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

rhm*_*ang 9 slurm

我正在努力了解如何使用 SLURM 在同一节点中运行多个进程。

假设我想运行一个具有 100 个不同输入参数的程序。例如,这就是我在笔记本电脑上执行的操作:

for i in `seq 100`; do
  ./program ${i}
done
Run Code Online (Sandbox Code Playgroud)

现在我可以访问具有 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
Run Code Online (Sandbox Code Playgroud)

事实证明,使用此提交脚本,即使每个循环仅调用一次,也会./program对每个值运行多次。isrun

到底是怎么回事?这样做的正确方法是什么?

dam*_*ois 5

默认情况下,srun将在运行中使用完整分配,因此这里是完整的 100 个任务。要判断是否仅使用单核,您需要运行

srun --exclusive --ntasks 1 ...
Run Code Online (Sandbox Code Playgroud)

来自srun 联机帮助页

当在现有资源分配中启动多个作业步骤(您希望单独的处理器专用于每个作业步骤)时,也可以使用此选项。如果没有足够的处理器来启动作业步骤,它将被推迟。这可以被认为是在其分配范围内为作业提供资源管理机制。

  • 嗯..让我解释一下。如果我不在命令中添加 `--exclusive` 会怎样?像这样:`srun --ntasks 1 ./program $i`? (2认同)