链接多个具有依赖性的 SLURM 作业
Chain multiple SLURM jobs with dependency
在 中,我询问了如何将作业 B 排入队列以在作业 A 之后开始,这是通过
完成的
sbatch --dependency=after:123456:+5 jobB.slurm
其中123456
是作业A的id,:+5
表示作业A后五分钟开始。
我现在需要为几份工作做这件事。工作 B 应该依赖于工作 A,工作 C 依赖于 B,工作 D 依赖于 C。
sbatch jobA.slurm
将 return Submitted batch job 123456
,我需要将作业 ID 传递给除第一个作业以外的所有依赖项的调用。由于我使用的是繁忙的集群,我不能依赖于将作业 ID 递增 1,因为有人可能会在两者之间排队作业。
因此我想编写一个脚本来获取作业脚本 (*.slurm
) 我想 运行 作为参数,例如
./run_jobs.sh jobA.slurm jobB.slurm jobC.slurm jobD.slurm
对于传递给它的所有作业脚本,脚本应该 运行,
sbatch jobA.slurm # Submitted batch job 123456
sbatch --dependency=after:123456:+5 jobB.slurm # Submitted batch job 123457
sbatch --dependency=after:123457:+5 jobC.slurm # Submitted batch job 123458
sbatch --dependency=after:123458:+5 jobD.slurm # Submitted batch job 123459
使用 bash 执行此操作的最佳方法是什么?
您可以使用--parsable
选项获取之前提交的作业的jobid:
#!/bin/bash
ID=$(sbatch --parsable )
shift
for script in "$@"; do
ID=$(sbatch --parsable --dependency=after:${ID}:+5 $script)
done
在
sbatch --dependency=after:123456:+5 jobB.slurm
其中123456
是作业A的id,:+5
表示作业A后五分钟开始。
我现在需要为几份工作做这件事。工作 B 应该依赖于工作 A,工作 C 依赖于 B,工作 D 依赖于 C。
sbatch jobA.slurm
将 return Submitted batch job 123456
,我需要将作业 ID 传递给除第一个作业以外的所有依赖项的调用。由于我使用的是繁忙的集群,我不能依赖于将作业 ID 递增 1,因为有人可能会在两者之间排队作业。
因此我想编写一个脚本来获取作业脚本 (*.slurm
) 我想 运行 作为参数,例如
./run_jobs.sh jobA.slurm jobB.slurm jobC.slurm jobD.slurm
对于传递给它的所有作业脚本,脚本应该 运行,
sbatch jobA.slurm # Submitted batch job 123456
sbatch --dependency=after:123456:+5 jobB.slurm # Submitted batch job 123457
sbatch --dependency=after:123457:+5 jobC.slurm # Submitted batch job 123458
sbatch --dependency=after:123458:+5 jobD.slurm # Submitted batch job 123459
使用 bash 执行此操作的最佳方法是什么?
您可以使用--parsable
选项获取之前提交的作业的jobid:
#!/bin/bash
ID=$(sbatch --parsable )
shift
for script in "$@"; do
ID=$(sbatch --parsable --dependency=after:${ID}:+5 $script)
done