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



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

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

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

现在,我可以访问具有 24 核节点的群集。因此,我想同时在 24 个节点上运行 5 个程序实例(24 个节点上的 4 个实例 + 第 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

这是怎么回事?正确的方法是什么?

默认情况下,srun将在运行中使用完全分配,因此此处为完整的 100 个任务。要告诉就是只用单核,需要运行

srun --exclusive --ntasks 1 ...

从 srun 手册页:

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

添加--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

最新更新