2

我是一名癌症研究人员,我们想知道你们中是否有人知道如何制作一个调用其他 slurm 的 SLURM 脚本。如果上一个脚本成功完成,则继续下一个调用。IE 类似:

#!/bin/bash
#SBATCH --nodes=1 
#SBATCH --tasks-per-node=1
#SBATCH --time=24:00:00
#SBATCH --mem=40GB?
#SBATCH --job-name=Master_script
#call first slurm
sbatch a.slurm
#if it completes successfully
if a.slurm:
   sbatch b.slurm
   if b.slurm:
      sbatch c.slurm
      sbatch d.slurm
      if c.slurm:
          sbatch e.slurm
      else:
         echo "c.slurm did not complete successfully"
   else:
      echo "b.slurm did not complete successfully"
else:
    echo "a.slurm did not complete successfully"
4

1 回答 1

4

您可以使用--dependency选项提交 5 个作业sbatch

手册页

-d, --dependency= 推迟此作业的开始,直到完成指定的依赖关系。

在你的情况下,它会是这样的:

A=$(sbatch --parsable a.slurm)
B=$(sbatch --parsable --dependency=afterok:$A a.slurm)    
C=$(sbatch --parsable --dependency=afterok:$B a.slurm)    
D=$(sbatch --parsable --dependency=afterok:$B a.slurm)    
E=$(sbatch --parsable --dependency=afterok:$D a.slurm)    

请注意,在这种情况下,如果依赖的作业失败,依赖于其他作业的作业将无限期地保持挂起状态。您要么必须手动清理它们,要么在作业失败的情况下提交空作业--dependency=afternotok:...

如果您的工作流程变得更加复杂,那么研究使用工作流程管理器(例如BoscoFireworks )可能会很有趣。

于 2018-12-07T08:54:44.910 回答