作业阵列单步执行

时间:2020-05-06 09:15:10

标签: slurm

我有一个sbatch脚本,可以通过不同的步骤将作业数组提交给Slurm:

#!/bin/bash
#SBATCH --ntasks 1
#SBATCH --nodes 1
#SBATCH --time 00-01:00:00
#SBATCH --array=0-15

dir="TEST_$SLURM_ARRAY_JOB_ID"
org=base-case
dst=$dir/case-$SLURM_ARRAY_TASK_ID

#step 0 -> I'd like that this step was executed only by one task!
srun mkdir $dir

#step 1
srun cp -r $org $dst

#step 2
srun python createParamsFile.py $dst $SLURM_ARRAY_TASK_ID

#step 3
srun python simulation.py $dst

我只想执行步骤0,因为数组中的其余作业将共享创建的目录。 没什么大不了的,因为一旦创建目录,其余的尝试就会在创建目录时引发错误。但是,最好避免在日志中记录错误消息,并避免步骤中止。在这种情况下,请参见每个示例:

/usr/bin/mkdir: cannot create directory 'TEST_111224': File exists
srun: error: s02r3b83: task 0: Exited with exit code 1
srun: Terminating job step 111226.0

的确,如果我在不使用srun的情况下执行mkdir命令,则步骤0不存在,并且不会突然终止。但是我仍然会收到错误消息。

1 个答案:

答案 0 :(得分:1)

使用-p的{​​{1}}选项,以便mkdir仅在目录不存在的情况下创建目录,并且日志中不会包含错误。

mkdir

请注意,在您的情况下删除srun mkdir -p $dir 不会改变任何内容,因为每个作业仅请求一项任务(srun)。该错误不是因为作业中的许多任务创建了相同的目录,而是因为阵列中的许多作业都创建了相同的目录。

相关问题