如何使用 slurm 逐个节点分配?

How to allocate node by node with slurm?

我的目标: 我想启动多个代码,逐个节点并为每个节点分配 100%

epic*        up   infinite      4    alloc lio[1-2]

我得到的是:

epic*        up   infinite      4    mix lio[1-3,5]

我的脚本:

#!/bin/bash
#SBATCH -A pt
#SBATCH -p epic
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=16
#SBATCH -J concentration
#SBATCH --array=1-4

. /usr/share/Modules/init/bash
module purge
module load openmpi-gcc/4.0.4-pmix_v2

MAXLEVEL=14
Ranf=8000
case $SLURM_ARRAY_TASK_ID in
  1) phi='0.01'
     ;;
  2) phi='0.008'
     ;;
  3) phi='0.005'
     ;;
  4) phi='0.001'
    ;;
esac

mkdir RBnf-P=$phi
cp RBnf `pwd`/RBnf-P=$phi/
cd RBnf-P=$phi
srun --mpi=pmix_v2 -J Ra${phi} ./RBnf $Ranf $MAXLEVEL $Phi

每个计算需要每个节点16个进程,每个节点有32个进程。

我有 4 个计算要进行。

我的问题:我怎样才能 100% 只分配 2 个节点?

因为我的脚本将使用 4 个节点。因此每个节点将以其容量的 50% (4 * 16/32) 使用。我希望我的代码 运行 仅在 2 个节点上达到 100% 的容量 (2 * 32/32)。 使用此脚本,slurm 将分配另一个节点而不是填充已使用的节点。这就是为什么我有“混合”节点并且我只想要 2 个节点“分配”。

你有什么想法吗?

我找到为什么不能逐个节点分配了。

未指定 slurm.conf 文件中的“过度订阅”选项。 这就是为什么我得到节点“混合”而不是 100% 分配的原因。

https://slurm.schedmd.com/cons_res_share.html

现在我自动使用两个节点。