如何解决链接多个具有依赖关系的 SLURM 作业
在 previous question 中,我询问了如何将作业 B 排在作业 A 之后开始,这是通过
sbatch --dependency=after:123456:+5 jobB.slurm
其中 123456
是作业 A 的 id,:+5
表示它将在作业 A 后五分钟开始。
我现在需要为几份工作执行此操作。作业 B 应该依赖于作业 A,作业 C 依赖于 B,作业 D 依赖于 C。
sbatch jobA.slurm
将返回 Submitted batch job 123456
,我需要将作业 ID 传递给除第一个作业以外的所有作业的依赖项的调用。由于我正在使用一个繁忙的集群,我不能依赖于将作业 ID 加一,因为有人可能会在它们之间排队作业。
因此,我想编写一个脚本,该脚本采用作业脚本 (*.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
选项获取先前提交的作业的作业 ID:
#!/bin/bash
ID=$(sbatch --parsable $1)
shift
for script in "$@"; do
ID=$(sbatch --parsable --dependency=after:${ID}:+5 $script)
done
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。