machine-learning - 在 Slurm 中,如何批量提交多个实验运行,并一个接一个地连续执行?
问题描述
在由 Slurm 管理的 gpu 集群上提交作业。
我正在做一些实验,如您所知,我们必须调整参数,这意味着我需要运行几个具有不同超参数的类似脚本。所以我编写了多个 bash 脚本(例如,名为training_n.sh)来执行,在每个脚本中它就像:
# training_n.sh
srun [command with specific model/training hyperparameters]
然后我sbatch
用来执行这些脚本,在sbatch
脚本中是这样的:
# sbatch script
bash training_1.sh
bash training_2.sh
...
bash training_n.sh
如果我的“sbatch”脚本中有一个“srun”列表,如上所示,它们是如何排列在队列中的(假设我在单个分区上运行)?所有这些“srun”是被视为一项工作还是被视为单独的工作?
换句话说,它们是否在“squeue”列表中连续排队并且将连续执行?或者相反,其他用户的作业将完全排在我正在运行的“srun”之后,而剩余的“srun”只能在这些用户的作业完成后执行?
此外,在公共使用的集群上提交一批实验脚本有什么更好的想法吗?由于很多人都在使用它,我想在轮到我的时候连续完成我设计的所有实验,而不是完成一个“srun”并等待其他用户完成来开始我的下一个。
解决方案
如果我的“sbatch”脚本中有一个“srun”列表,如上所示,它们是如何排列在队列中的(假设我在单个分区上运行)?所有这些“srun”是被视为一项工作还是被视为单独的工作?换句话说,它们是否在“squeue”列表中连续排队并且将连续执行?或者相反,其他用户的作业将完全排在我正在运行的“srun”之后,而剩余的“srun”只能在这些用户的作业完成后执行?
如果您srun
在一个脚本中提交所有这些单个脚本/命令sbatch
,您将只会得到一份工作。原因是srun
在工作分配内部和外部的工作方式不同。如果您srun
在作业分配中运行(例如在 sbatch 脚本中),它不会创建新作业,而只会创建作业步骤。因此,在您的情况下,您将拥有一个包含n 个作业步骤的作业,该作业将在您的分配中连续运行。
此外,在公共使用的集群上提交一批实验脚本有什么更好的想法吗?
如果这些运行完全独立,则应使用大小为 n的作业数组。这样,您可以创建n个可以在有可用资源时运行的作业。
由于很多人都在使用它,我想在轮到我的时候连续完成我设计的所有实验,而不是完成一个“srun”并等待其他用户完成来开始我的下一个。
这可能不是一个好主意。如果这些作业是独立的,您可以将它们作为数组提交。通过这种方式,他们可以利用回填调度并可能运行得更快。将他们投入到一项大工作中,您可能不会获得任何收益。
推荐阅读
- javascript - 可排序的大桌子
- apache-spark - 如何删除 Spark DataFrame 中的重复项
- jmeter - 可以在 JMeter HTTPSampler 中使用 user:pass@host 吗?
- npm - 无法下载 https://github.com/sass/node-sass/releases/download/v3.13.1/darwin-x64-57_binding.node”
- sparql - Sparql 查询不显示来自 RDFS 的标签
- performance - Firestore:在聊天应用程序中,这种文档结构是否适合(在速度和成本方面)允许多收件人消息?
- drupal - 如何获取用户的个人资料 URL?
- node.js - 如何处理不退出浏览器/网站的断开客户端?套接字IO
- python - 为什么我收到一个错误,要求通过这个超级初始化函数传递一个参数
- python - 使用 CreateProcessW 捕获 Python Sys.Exit 代码