如何在节点之间均匀分配Slurm任务?

4
我希望在一个sbatch脚本中使用srun命令运行脚本约200次。由于执行脚本需要一些时间,因此最好将任务均匀分布到群集中的节点上。不幸的是,我在这方面存在问题。
现在,我创建了一个示例脚本("hostname.sh")来测试sbatch脚本中的不同参数。
echo `date +%s` `hostname`
sleep 10

这是我的sbatch脚本:
#SBATCH --ntasks=15
#SBATCH --cpus-per-task=16

for i in `seq 200`; do
    srun -n1 -N1 bash hostname.sh &
done

wait

我预计hostname.sh会执行200次(for循环),但同时只有15个任务在运行(--ntasks=15)。由于我的最大节点只有56个核心,因此在同一时间内只能在该节点上运行三个作业(--cpus-per-task=16)。
从脚本的输出中,我可以看到前九个任务分布在集群的九个节点上,但是所有其他任务(191个!)同时在一个节点上执行。整个sbatch脚本的执行仅花费约15秒。
我认为我误解了一些slurm参数,但查看官方文档并没有帮助我。
1个回答

2

在这种情况下,您需要使用srun--exclusive选项:

srun -n1 -N1 --exclusive bash hostname.sh &

来自srun手册

默认情况下,作业步骤可以访问作业分配的每个CPU。为了确保每个作业步骤分配到不同的CPU,请使用--exclusive选项。

请参阅所述文档中倒数第二个示例。


对我来说,srun 的 --exclusive 选项不仅用于在节点上独占地运行作业是新的。这对其他 slurm 初学者可能非常重要...谢谢! - Tobias Scheithauer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接