在Slurm中,作业数组规范无效。

7

我正在Slurm中提交一项玩具数组作业。我的命令行是:

$ sbatch -p development -t 0:30:0 -n 1 -a 1-2 j1

j1是脚本文件:

#!/bin/bash
echo job id is $SLURM_JOB_ID
echo array job id is $SLURM_ARRAY_JOB_ID
echo task id id $SLURM_ARRAY_TASK_ID

当我提交时,出现错误:
--> Verifying valid submit host (login1)...OK
--> Verifying valid jobname...OK
--> Enforcing max jobs per user...OK
--> Verifying availability of your home dir (/home1/03400/myname)...OK
--> Verifying availability of your work dir (/work/03400/myname)...OK
--> Verifying availability of your scratch dir (/scratch/03400/myname)...OK
--> Verifying valid ssh keys...OK
--> Verifying access to desired queue (development)...OK
--> Verifying job request is within current queue limits...OK
--> Checking available allocation (PRJ-1234)...OK
sbatch: error: Batch job submission failed: Invalid job array specification

不使用数组规范,同样的工作可以正常运行:

$ sbatch -p development -t 0:30:0 -n 1 j1
2个回答

16

这篇文章有点旧了,但如果其他人遇到同样的问题,我也曾遇到过相同的问题,但所采用的答案并没有解决我问题的原因。

当作业数组大小过大时,也会引发此错误(sbatch:错误:批作业提交失败:无效的作业数组规范)。

来自https://slurm.schedmd.com/slurm.conf.html

MaxArraySize

最大作业数组大小。最大作业数组任务索引值将比 MaxArraySize 小 1,以允许有一个索引值为零。将 MaxArraySize 配置为 0 可以禁用作业数组使用。该值不得超过 4000001。MaxJobCount 的值应远大于 MaxArraySize。默认值为 1001。

要检查该值,必须使 slurm.conf 文件可被所有 slurm 用户访问(仍然依据 1),可以在 /etc/slurm.conf 附近找到该文件(参见https://slurm.schedmd.com/slurm.conf.html#lbAM,在我的情况下,我找到了它位于 /etc/slurm/slurm.conf 的路径)。


3
如果这是您的问题,请注意,在更新slurm.conf文件后,更改不会通过“sudo scontrol reconfigure”生效。 您需要重新启动控制守护进程:“sudo systemctl restart slurmctld”。 - Golpette
如果您在GCP Slurm上工作,您需要使用sudo编辑设置。文件位于/usr/local/etc/slurm/slurm.conf。运行“sudo scontrol reconfigure”即可。具有大型数组大小的作业已经通过。但是,在阅读先前的评论后,我决定重新启动控制守护程序。 - Dom

4
您的数组规范语法正确。但是您粘贴的打印输出不是标准的Slurm格式,我猜您正在使用Stampede;他们有自己的sbatch包装器。
您可以使用-vvv选项来查看Slurm看到的完整信息:
$ sbatch -vvv -p development -t 0:30:0 -n 1 -a 1-2 j1 |& grep array

这里应该返回
sbatch: array             : 1-2

如果没有显示,那就意味着信息在某处丢失了。

您可以尝试从提交命令行中移除数组规范,并将其插入提交脚本中,例如:

$ sbatch -p development -t 0:30:0 -n 1 j1

在 j1 为

#!/bin/bash
#SBATCH -a 1-2
echo job id is $SLURM_JOB_ID
echo array job id is $SLURM_ARRAY_JOB_ID
echo task id id $SLURM_ARRAY_TASK_ID

下一步是使用上面测试所得到的信息联系系统管理员并请求帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接