我有一组已成功提交的依赖 Slurm 作业。作业设置为:
a b
\ /
c
|
d
|
e
我需要提交这组作业 1000 次,每次参数化都略有不同。如果我要提交一大批没有依赖关系的作业,我会使用作业数组来善待其他用户和调度程序。提交依赖作业的作业数组的最佳实践是什么?
可能的问题:SBATCH 的每个作业 (a/b - e) 的参数化略有不同(节点、每个节点的任务等)。
--dependency
的sbatch
选项接受aftercorr
,将数组中的每个作业链接到另一个数组中的相应作业(具有相同任务数组ID的作业)。
序列将是(未经测试)
ArrayAID=$(sbatch --array=1-1000 A.sh)
ArrayBID=$(sbatch --array=1-1000 B.sh)
ArrayCID=$(sbatch --array=1-1000 --dependendy=aftercorr:$ArrayAID,$ArrayBID C.sh)
ArrayDID=$(sbatch --array=1-1000 --dependendy=aftercorr:$ArrayCID A.sh)
ArrayEID=$(sbatch --array=1-1000 --dependendy=aftercorr:$ArrayDID A.sh)
数组 C 中的第 i 作业将等待每个数组 A 和 B 中的第 i 作业完成后再开始。
Slurm 很可能会先安排数组 A 中的作业,然后再安排其他数组中的作业,但这取决于作业的特征和集群的负载。您可以使用
--nice
选项来更改排序并按照您想要的方式引导它(要么尽快完成所有数组 A,要么尽快完成整个工作流程,在这种情况下,您将使作业 E 更高优先级高于作业 D,其本身的优先级高于作业 C。)
我遇到了类似的问题:我想为我的工作指定一系列依赖项,例如:
ArrayA=$(sbatch --array=1-100 a.sh)
ArrayB=$(sbatch --array=1-1000 --dependency=aftercorr:[$ArrayA_0, $ArrayA_29, ..., $ArrayA_783] b.sh)
但是 Slurm 似乎并不想允许这样做?