Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Slurm 处理作业提交限制_Slurm - Fatal编程技术网

Slurm 处理作业提交限制

Slurm 处理作业提交限制,slurm,Slurm,我正在使用--array运行slurm作业数组,我希望运行大约2000个任务/数组项。但是,这超出了集群每次提交约500份作业的限制 有什么建议/最佳实践可以将其分解吗?我想一次提交所有文件,如果可能的话,仍然能够将数组id参数1-2000传递给我的程序。我认为等待提交数组的片段可能会有所帮助,但目前我不确定如何做到这一点。如果限制是数组的大小: 您必须将数组拆分为多个作业数组。--array参数接受形式为-的值,因此您可以提交四个作业: sbatch --array=1-500 ... sba

我正在使用--array运行slurm作业数组,我希望运行大约2000个任务/数组项。但是,这超出了集群每次提交约500份作业的限制


有什么建议/最佳实践可以将其分解吗?我想一次提交所有文件,如果可能的话,仍然能够将数组id参数1-2000传递给我的程序。我认为等待提交数组的片段可能会有所帮助,但目前我不确定如何做到这一点。

如果限制是数组的大小:

您必须将数组拆分为多个作业数组。
--array
参数接受形式为
-
的值,因此您可以提交四个作业:

sbatch --array=1-500 ...
sbatch --array=501-1000 ...
sbatch --array=1001-1500 ...
sbatch --array=1501-200 ...
这样,您将绕过500限制,并将
SLURM\u ARRAY\u TASK\u ID
保持在1到2000之间

为了让事情简单一点,您可以在一行中这样写:

paste -d- <(seq 1 500 2000) <(seq 500 500 2000) | xargs -I {} sbatch --array={} ... 
请注意,理想情况下,阵列的最后一个运行作业应该提交作业,它可能是任务ID最高的作业,也可能不是,但这在许多情况下都适用于所有实际目的


另一个选项是设置作业以监控队列并在可能的情况下提交每个区块,或者使用一个适合您的区块。

不幸的是,“粘贴”方法不起作用:
sbatch:error:Batch job submission failed:job违反记帐/QOS策略(作业提交限制、用户大小和/或时间限制)sbatch:错误:QOSMaxSubmitJobPerUserLimit
。当我运行squeue时,只显示前几百个作业,看起来这仍然是同时发送所有2000个作业。好的,所以限制不是作业数组的大小,而是用户提交的作业数量。
#!/bin/bash
#SBATCH ...
...
...
if [[ $((SLURM_ARRAY_TASK_ID % 500)) == 0 ]] ; then 
    sbatch --array=$((SLURM_ARRAY_TASK_ID+1))-$((SLURM_ARRAY_TASK_ID+500)) $0
fi