在 SLURM openmpi 中绑定比 cpus 错误更多的进程

Binding more processes than cpus error in SLURM openmpi

我正在尝试 运行 一个使用显式消息在 SLURM 上的节点之间传递的作业(即不只是 运行 宁并行作业),但我收到重复出现的错误“已发出请求绑定到那个会导致在资源上绑定比 cpus 更多的进程”。简而言之,我的代码需要跨 128 个节点发送一个参数数组,计算这些参数的可能性,并将这些可能性值的总和收集回根节点。使用以下 sbatch 文件执行代码时出现错误:

#!/bin/bash

#SBATCH --job-name=linesearch
#SBATCH --output=ls_%j.txt
#SBATCH --nodes=16
#SBATCH --ntasks-per-node=16
#SBATCH --partition=broadwl
#SBATCH --mem-per-cpu=2000
#SBATCH --time=18:00:00

# Load the default OpenMPI module.
module load openmpi

mpiexec -N 8 ./linesearch

我认为使用 -N 8 会将每个节点 8 个进程显式分配给 16 个 --ntasks-per-node。我认为使用这种计算机处理效率低下的方法 space 会在响应不同的溢出线程后减少此错误,但它没有解决问题。

完整的错误信息如下:

A request was made to bind to that would result in binding more
processes than cpus on a resource:

   Bind to:     NONE:IF-SUPPORTED
   Node:        XXXXXX
   #processes:  4
   #cpus:       3

You can override this protection by adding the "overload-allowed"
option to your binding directive.

我正在执行的进程可能会占用大量内存,因此我不想一定要使用重载覆盖,以免作业在用尽分配后终止。

请注意,我正在加载模块 openmpi v2.0.1 [已停用]。但是,将 sbatch 文件更改为仅使用 -np 128 任务绑定到套接字解决了这个问题

批处理文件:

#!/bin/bash

#SBATCH --job-name=linesearch
#SBATCH --output=ls_%j.txt
#SBATCH --nodes=16
#SBATCH --ntasks=128
#SBATCH --partition=broadwl
#SBATCH --mem-per-cpu=2000
#SBATCH --time=18:00:00

# Load the default OpenMPI module.
module load openmpi

mpiexec -np 128 ./execs/linesearch  

另一种解决方案是在 mpiexec 语句中使用 --bind-to core --map-by core 将每个进程绑定到一个核心