Mar*_*ses 6 cluster-computing slurm
我正在使用 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
Run Code Online (Sandbox Code Playgroud)
为了解释一下,我想job_slurm_script.py作为一个数组作业运行 1000 次,最多并行 200 个任务。当所有这些都完成后,我想写 'open' 到status_file.txt. 这是因为实际上我有超过 10,000 个作业,这高于我的集群的 MaxSubmissionLimit,所以我需要将它拆分成更小的块(在 1000 个元素的作业数组中)并一个接一个地运行它们(仅当前一个完成)。
但是,为了使其工作,echo 语句只能在整个作业数组完成后触发(除此之外,我有一个循环来检查status_file.txt作业是否完成,即当内容是字符串“open”时) .
到目前为止,我认为srun将脚本保留到整个作业数组完成。然而,有时srun“返回”并且脚本会在作业完成之前转到 echo 语句,因此所有后续作业都会从集群中反弹,因为它超出了提交限制。
那么如何srun在整个作业数组完成之前“保持”状态?
您可以在 bash 中结合使用--waitoption in将作业发送到集群,暂停脚本执行直到这些作业完成,然后继续。例如sbatchwait
#!/bin/bash
set -e
date
for((i=0; i<5; i++)); do
sbatch -W --wrap='echo "hello from $SLURM_ARRAY_TASK_ID"; sleep 10' &
done;
wait
date
echo "I am finished"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12398 次 |
| 最近记录: |