我试图弄清楚“任务”的概念在 SLURM 中意味着什么。我在 SO 上找到了这个答案,它建议我使用以下作业脚本:
#!/bin/bash
#SBATCH --ntasks=2
srun --ntasks=1 sleep 10 &
srun --ntasks=1 sleep 12 &
wait
Run Code Online (Sandbox Code Playgroud)
作者说这项工作总共需要 12 秒才能运行,因为这两个步骤sleep 10是sleep 12并行运行的,但我无法重现这一点。
如果我将上述文件另存为slurm-test并运行
sbatch -o slurm.out slurm-test,
Run Code Online (Sandbox Code Playgroud)
我看到我的作业运行了 23 秒。
这是以下的输出sacct --format=JobID,Start,End,Elapsed,NCPUS -S now-2minutes:
JobID Start End Elapsed NCPUS
------------ ------------------- ------------------- ---------- ----------
645514 2021-06-30T11:05:38 2021-06-30T11:06:00 00:00:22 2
645514.batch 2021-06-30T11:05:38 2021-06-30T11:06:00 00:00:22 2
645514.exte+ 2021-06-30T11:05:38 2021-06-30T11:06:00 00:00:22 2
645514.0 2021-06-30T11:05:38 2021-06-30T11:05:48 00:00:10 2
645514.1 2021-06-30T11:05:48 2021-06-30T11:06:00 00:00:12 2
Run Code Online (Sandbox Code Playgroud)
我的slurm.out输出是
srun: Job 645514 step creation temporarily disabled, retrying (Requested nodes are busy)
srun: Step created for job 645514
Run Code Online (Sandbox Code Playgroud)
显式包含-n 2在sbatch调用中不会改变结果。我究竟做错了什么?如何让作业文件中的两个调用同时运行?
根据 Slurm 版本,您可能需要将--exclusive参数添加到 srun (其语义与 for 不同sbatch):
#!/bin/bash
#SBATCH --ntasks=2
srun --ntasks=1 --exclusive -c 1 sleep 10 &
srun --ntasks=1 --exclusive -c 1 sleep 12 &
wait
Run Code Online (Sandbox Code Playgroud)
另外,添加-c 1更明确的内容可能会有所帮助,这同样取决于 Slurm 版本。