使用SLURM在同一节点中执行多个任务

时间:2018-06-01 00:10:59

标签: slurm

我很难理解如何使用SLURM在同一节点中运行多个进程。

假设我想运行一个包含100个不同输入参数的程序。这就是我在笔记本电脑上所做的事情,例如:

for i in `seq 100`; do
  ./program ${i}
done

现在我可以访问具有24核节点的群集。所以,我希望同时在5个节点上运行24个程序实例(4个节点上24个,第5个节点上4个)。

我认为提交脚本应如下所示:

#!/bin/bash
#SBATCH -N 5
#SBATCH -n 100
#SBATCH --ntasks-per-node=24
for i in `seq 100`; do
  srun ./program ${i} &
done
wait

事实证明,使用此提交脚本,./program会为每个i值多次运行,即使每个循环只调用srun一次。

发生了什么事?这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

默认情况下,srun将在运行中使用完整分配,因此这里包含完整的100个任务。要说明只使用单个核心,您需要运行

srun --exclusive --ntasks 1 ...

来自srun manpage

  

启动多个作业步骤时也可以使用此选项   在现有资源分配中,您需要单独分配   处理器专用于每个工作步骤。如果处理器足够   无法启动作业步骤,它将被推迟。这个   可以被认为是为资源管理提供机制   其中的工作是分配。

答案 1 :(得分:0)

添加--nodes 1将消除警告。

#!/bin/bash
#SBATCH -N 5
#SBATCH -n 100
#SBATCH --ntasks-per-node=24
for i in `seq 100`; do
  srun --exclusive --nodes 1 --ntasks 1 ./program ${i} &
done
wait