具有相关作业的 Slurm 作业数组

问题描述 投票:0回答:2

我有一组已成功提交的依赖 Slurm 作业。作业设置为:

a   b
 \ /
  c
  |
  d
  |
  e

我需要提交这组作业 1000 次,每次参数化都略有不同。如果我要提交一大批没有依赖关系的作业,我会使用作业数组来善待其他用户和调度程序。提交依赖作业的作业数组的最佳实践是什么?

可能的问题:SBATCH 的每个作业 (a/b - e) 的参数化略有不同(节点、每个节点的任务等)。

slurm
2个回答
1
投票

--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。)


0
投票

我遇到了类似的问题:我想为我的工作指定一系列依赖项,例如:

ArrayA=$(sbatch --array=1-100 a.sh)
ArrayB=$(sbatch --array=1-1000 --dependency=aftercorr:[$ArrayA_0, $ArrayA_29, ..., $ArrayA_783] b.sh)

但是 Slurm 似乎并不想允许这样做?

© www.soinside.com 2019 - 2024. All rights reserved.