繁体   English   中英

从strigger开始的作业中获取SLURM作业ID

[英]Get SLURM job ID from job started by strigger

我有一个由三个部分( partApartBpartC )组成的R分析。 我将每个部分提交给SLURM(例如sbatch partA ),并且每个部分都通过#SBATCH --array=1-1500并行#SBATCH --array=1-1500 这些零件是串行的,因此我需要等待一个零件完成才能开始下一个零件。 现在,我正在手动开始每项工作,但这不是一个很好的解决方案。

我想自动执行三个sbatch调用。 例如:

  1. sbatch partA
  2. partA完成后, sbatch partB
  3. partB完成后,对sbatch partC

我使用此解决方案获取partA的作业ID,并将其传递给strigger以完成上述步骤2。 但是我被困在这一点上,因为我不知道如何从strigger获取partB的工作ID 这是我的代码:

#!/bin/bash

# step 1: sbatch partA
partA_ID=$(sbatch --parsable partA.sh)

# step 2: sbatch partB
strigger --set --jobid=$partA_ID --fini --program=/path/to/partB.batch

# step 3: sbatch partC
... ?

如何完成步骤3?

strigger不是实现该目标的合适工具,它比常规用户更适合管理员。 只有slurm user可以实际设置触发器(请参见strigger联机帮助页中的“重要说明”)。

对于您的情况,您应该一次提交所有三个作业,并在它们之间设置依赖性。

例如:

$ partA_ID=$(sbatch --parsable partA.sh)
$ partB_ID=$(sbatch --parsable --dependency=afterany:${partA_ID} partB.sh)
$ partC_ID=$(sbatch --parsable --dependency=afterany:${partB_ID} partC.sh)

这将提交三个作业数组,但是第二个作业数组仅在第一个作业中的所有作业都已完成时才开始。 并且只有在第二个作业完成后,第三个作业才会开始。

可以选择

$ partA_ID=$(sbatch --parsable partA.sh)
$ partB_ID=$(sbatch --parsable --dependency=aftercorr:${partA_ID}  partB.sh)
$ partC_ID=$(sbatch --parsable --dependency=aftercorr:${partB_ID}  partC.sh)

这将提交三个作业数组,但是第二个作业数组的所有作业将在第一个作业中的相应作业(即具有相同$SLURM_ARRAY_TASK_ID )完成之前开始。 并且只有在第二个作业中的相应作业完成后,第三个作业中的所有作业才会开始。

有关详细信息,请参阅--dependency在部分sbatch手册页

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM