如何在节点上均匀分布任务任务?

时间:2018-07-04 09:49:13

标签: slurm

我想在一个sbatch脚本中使用srun命令在一个群集上运行脚本约200次。由于执行脚本需要花费一些时间,因此最好在群集中的节点上平均分配任务。可悲的是,我对此有疑问。

现在,我创建了一个示例脚本(“ hostname.sh”)来测试sbatch脚本中的不同参数:

echo `date +%s` `hostname`
sleep 10

这是我的抽签脚本:

#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 个答案:

答案 0 :(得分:1)

在这种情况下,您需要使用--exclusive的{​​{1}}选项:

srun

srun manpage

  

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

另请参阅上述文档中的最后一个示例。