作业数组步骤单次执行

问题描述 投票:0回答:1

我有一个摘要脚本,可以通过不同的步骤将作业数组提交给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不存在,并且不会突然终止。但是我仍然会收到错误消息。

slurm
1个回答
0
投票

使用-pmkdir选项,以便mkdir仅创建不存在的目录,并且日志中不会包含错误。

srun mkdir -p $dir

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

© www.soinside.com 2019 - 2024. All rights reserved.