限制SLURM中正在运行的作业数

时间:2017-03-15 14:19:37

标签: slurm

我在SLURM排队多个工作。我可以用slurm限制并行运行的作业数量吗?

提前致谢!

4 个答案:

答案 0 :(得分:8)

如果您不是管理员,如果您不希望所有工作同时启动hold,您可以scontrol hold <JOBID>一些工作,并且您可以延迟提交一些工作sbatch --begin=YYYY-MM-DD。此外,如果它是一个作业数组,您可以限制同时运行的阵列中的作业数量,例如--array=1:100%25在阵列中有100个作业,但只有25个作业在运行。

答案 1 :(得分:4)

根据SLURM资源限制documentation,您可以使用MaxJobs参数限制可以为关联/ qos运行的作业总数。提醒一下,关联是群集,帐户,用户名和(可选)分区名称的组合。

你应该可以做类似的事情:

sacctmgr modify user <userid> account=<account_name> set MaxJobs=10

如果您有更多问题,我发现this presentation非常有帮助。

答案 2 :(得分:0)

根据SLURM documentation--array=0-15%4-符号而不是),会将与此作业数组同时运行的任务数限制为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

运行它

作业按预期运行(始终并行运行4个),仅创建目录并保持运行 $ number 秒。

赞赏评论和建议。

答案 3 :(得分:0)

如果您的工作相对相似,则可以使用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 $1}')    # Get first argument

$cmd_line  #may need to be piped to bash