HPC任务依赖的解决方案。
Motivation
在HPC集群中,有时候我们的任务会依赖于其他任务的完成。比如,我们需要先生成数据,然后再跑两个算法,最后再可视化对比结果。这时候,我们就需要让第二个任务等待第一个任务的完成。这就是任务依赖。
这里提供一个example repo:Compare EM LDSC
我们希望能有一个pipeline bash脚本,能够自动地提交任务,并且能够处理任务依赖。
Solution
Dependency 参数可以用来指定任务之间的依赖关系。可以指定任务完成后再运行,或者任务失败后再运行。
1 | id_1=$(sbatch --parsable job_1.sh) |
这里我们先获取第一个任务的job id,’–parsable’ 参数可以让 sbatch 输出job id。然后在后续任务中指定依赖关系。
常用的依赖关系有:
- after: 任务在指定任务之后运行
- afterok: 任务在指定任务成功后运行
- afterany: 任务在指定任务完成后运行
- afternotok: 任务在指定任务失败后运行
- aftercorr: 任务在指定任务完成后运行,但是不会等待任务成功
- expand: 任务在指定任务完成后运行,但是会等待所有任务成功
- singleton: 任务在指定任务完成后运行,但是只会运行一次
- afterokarray: 任务在指定任务数组完成后运行
更多信息可以’man sbatch’。
此外,如果任务是array job,只需要指定一个job id,就可以等待所有任务完成。
1 | jid=$(sbatch --parsable --array=1-100 job_arr.sh) |