限制 SLURM 中 运行 个作业的数量
Limit the number of running jobs in SLURM
我在 SLURM 中排队多个作业。我可以限制 slurm 中并行 运行 作业的数量吗?
提前致谢!
根据 SLURM 资源限制 documentation,您可以使用 MaxJobs
参数限制 association/qos 可以 运行 的作业总数。提醒一下,关联是集群、帐户、用户名和(可选)分区名的组合。
您应该能够执行类似以下操作:
sacctmgr modify user <userid> account=<account_name> set MaxJobs=10
我发现 this presentation 对您有更多问题很有帮助。
如果您不是管理员,您可以 hold
一些作业,如果您不希望它们同时开始,使用 scontrol hold <JOBID>
,您可以延迟提交一些作业sbatch --begin=YYYY-MM-DD
.
的职位
此外,如果它是一个作业数组,您可以限制数组中并发 运行 的作业数,例如 --array=1:100%25
数组中有 100 个作业,但只有 25 个他们 运行.
最后,您可以使用 --dependency=singleton
选项,该选项一次只允许具有相同 --job-name
的一组作业中的一个成为 运行。如果您选择三个名称并将这些名称分配给您的所有作业并使用该选项,您实际上将自己限制在最多 3 个 运行 个作业中。
根据SLURM documentation,--array=0-15%4
(-符号而不是:)会限制人数同时 运行ning 任务从这个作业数组到 4
我写了test.sbatch:
#!/bin/bash
# test.sbatch
#
#SBATCH -J a
#SBATCH -p campus
#SBATCH -c 1
#SBATCH -o %A_%a.output
mkdir test${SLURM_ARRAY_TASK_ID}
# sleep for up to 10 minutes to see them running in squeue and
# different times to check that the number of parallel jobs remain constant
RANGE=600; number=$RANDOM; let "number %= $RANGE"; echo "$number"
sleep $number
和运行它与sbatch --array=1-15%4 test.sbatch
Jobs 运行 如预期(总是 4 个并行)并且只创建目录并保持 运行ning $number 秒。
感谢意见和建议。
如果您的工作比较相似,您可以使用 slurm 数组函数。我一直试图弄清楚这个问题并在以下位置找到了这个解决方案
https://docs.id.unibe.ch/ubelix/job-management-with-slurm/array-jobs-with-slurm
#!/bin/bash -x
#SBATCH --mail-type=NONE
#SBATCH --array=1-419%25 # Submit 419 tasks with with only 25 of them running at any time
#contains the list of 419 commands I want to run
cmd_file=s1List_170519.txt
cmd_line=$(cat $cmd_file | awk -v var=${SLURM_ARRAY_TASK_ID} 'NR==var {print }') # Get first argument
$cmd_line #may need to be piped to bash
扩展已接受的答案,在我的例子中,我需要 运行 每个节点的最大作业数,并且我需要专门使用 s运行(不是 sbatch)来完成。我解决这个问题的方法是同时使用这三个标志:--nodename=<nodename> --dependency=singleton --job-name=<uniquename>_<nodename>
.
首先,我创建了一个具有 x
个唯一名称的数组,其中该数组的长度是我希望每个节点 运行 的最大作业数。其次,我创建了一个数组,其中包含我要使用的所有节点名称。最后,我以循环方式组合这两个数组,也就是说,我将节点名称附加到唯一名称,并确保 --nodename
的值与附加节点名称的值相匹配。结果是限制每个节点上 运行 的最大作业数,而不是限制最大作业数。在我的例子中,我需要以这种方式分发它,主要是由于每个节点上的内存限制。
我在 SLURM 中排队多个作业。我可以限制 slurm 中并行 运行 作业的数量吗?
提前致谢!
根据 SLURM 资源限制 documentation,您可以使用 MaxJobs
参数限制 association/qos 可以 运行 的作业总数。提醒一下,关联是集群、帐户、用户名和(可选)分区名的组合。
您应该能够执行类似以下操作:
sacctmgr modify user <userid> account=<account_name> set MaxJobs=10
我发现 this presentation 对您有更多问题很有帮助。
如果您不是管理员,您可以 hold
一些作业,如果您不希望它们同时开始,使用 scontrol hold <JOBID>
,您可以延迟提交一些作业sbatch --begin=YYYY-MM-DD
.
此外,如果它是一个作业数组,您可以限制数组中并发 运行 的作业数,例如 --array=1:100%25
数组中有 100 个作业,但只有 25 个他们 运行.
最后,您可以使用 --dependency=singleton
选项,该选项一次只允许具有相同 --job-name
的一组作业中的一个成为 运行。如果您选择三个名称并将这些名称分配给您的所有作业并使用该选项,您实际上将自己限制在最多 3 个 运行 个作业中。
根据SLURM documentation,--array=0-15%4
(-符号而不是:)会限制人数同时 运行ning 任务从这个作业数组到 4
我写了test.sbatch:
#!/bin/bash
# test.sbatch
#
#SBATCH -J a
#SBATCH -p campus
#SBATCH -c 1
#SBATCH -o %A_%a.output
mkdir test${SLURM_ARRAY_TASK_ID}
# sleep for up to 10 minutes to see them running in squeue and
# different times to check that the number of parallel jobs remain constant
RANGE=600; number=$RANDOM; let "number %= $RANGE"; echo "$number"
sleep $number
和运行它与sbatch --array=1-15%4 test.sbatch
Jobs 运行 如预期(总是 4 个并行)并且只创建目录并保持 运行ning $number 秒。
感谢意见和建议。
如果您的工作比较相似,您可以使用 slurm 数组函数。我一直试图弄清楚这个问题并在以下位置找到了这个解决方案 https://docs.id.unibe.ch/ubelix/job-management-with-slurm/array-jobs-with-slurm
#!/bin/bash -x
#SBATCH --mail-type=NONE
#SBATCH --array=1-419%25 # Submit 419 tasks with with only 25 of them running at any time
#contains the list of 419 commands I want to run
cmd_file=s1List_170519.txt
cmd_line=$(cat $cmd_file | awk -v var=${SLURM_ARRAY_TASK_ID} 'NR==var {print }') # Get first argument
$cmd_line #may need to be piped to bash
扩展已接受的答案,在我的例子中,我需要 运行 每个节点的最大作业数,并且我需要专门使用 s运行(不是 sbatch)来完成。我解决这个问题的方法是同时使用这三个标志:--nodename=<nodename> --dependency=singleton --job-name=<uniquename>_<nodename>
.
首先,我创建了一个具有 x
个唯一名称的数组,其中该数组的长度是我希望每个节点 运行 的最大作业数。其次,我创建了一个数组,其中包含我要使用的所有节点名称。最后,我以循环方式组合这两个数组,也就是说,我将节点名称附加到唯一名称,并确保 --nodename
的值与附加节点名称的值相匹配。结果是限制每个节点上 运行 的最大作业数,而不是限制最大作业数。在我的例子中,我需要以这种方式分发它,主要是由于每个节点上的内存限制。