我正在使用SLURM运行一个作业数组,以下是我使用sbatch job_array_script.sh [args]
运行的作业数组脚本:
#!/bin/bash
#SBATCH ... other options ...
#SBATCH --array=0-1000%200
srun ./job_slurm_script.py $1 $2 $3 $4
echo 'open' > status_file.txt
为了解释清楚,我希望以数组作业的形式运行
job_slurm_script.py
1000次,最多并行运行200个任务。当所有这些都完成后,我想要在status_file.txt
中写入“open”。这是因为实际上我有超过10,000个作业,这超过了我的集群最大提交限制,因此我需要将其拆分成较小的块(每个包含1000个作业数组),并逐个运行它们(只有在上一个作业完成后才可以运行下一个作业)。但是,为了使这项工作顺利进行,echo语句只能在整个作业数组完成后触发(除此之外,我还有一个循环检查
status_file.txt
是否已经完成作业,即内容为字符串“open”时)。到目前为止,我认为
srun
会一直保持脚本运行到整个作业数组完成。然而,有时srun
“返回”,脚本在作业完成之前就到达echo语句,因此所有后续作业都会从集群反弹,因为它超过了提交限制。那么,如何使
srun
一直“挂起”,直到整个作业数组完成?