单个批次中的多个 srun 作业意外终止

multiple srun jobs within a single sbatch killed unexpectedly

我试图在集群上的单个 sbatch 脚本中 运行 多个 s运行 作业。 sbatch脚本如下:

#!/bin/bash  
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -c 64
#SBATCH --time=200:00:00
#SBATCH -p amd_256
for i in {0..6} ;
do
  cd ${i}
  ( srun -c 8 ./MD 150 20 300 20 20 0 0 > log.out 2>&1 & )
  sleep 20
  cd ..
done
cd 7/
srun -c 8 ./MD 100 20 300 20 20 0 0 > log.out 2>&1 
cd ..

wait

在这个脚本中,我提交了多个 s运行 作业。此脚本的一个问题是第 0-6 个作业将在第 7 个作业完成后被终止。这是我在第 0-6 个作业中收到的错误消息:

srun: Job step aborted: Waiting up to 62 seconds for job step to finish.
slurmstepd: error: *** STEP 3801214.0 ON j2308 CANCELLED AT 2021-12-22T11:02:22 ***
srun: error: j2308: task 0: Terminated

知道如何解决这个问题吗?

( srun -c 8 ./MD 150 20 300 20 20 0 0 > log.out 2>&1 & )

创建子 shell 并将它们放入后台 inside 子 shell。所以最后一行中的 wait 调用不知道这些后台进程,因为它们是不同 shell/process 的一部分。由于批处理脚本现已完成,作业将终止。

试试这个:

( srun -c 8 ./MD 150 20 300 20 20 0 0 > log.out 2>&1 ) &

举个例子:试试

( sleep  60 & )
wait

( sleep  60 ) & 
wait

看看区别。