如何在 Slurm 集群上的多个节点上运行 MPI Python 脚本?错误:警告:无法在 2 个节点上运行 1 个进程,将 nnode 设置为 1



我正在 Slurm 集群上运行一个脚本,该脚本可以从并行处理中受益,所以我正在尝试实现 MPI。但是,它似乎不允许我在多个节点上运行进程。我不知道这是否通常是自动完成的,但是每当我在要提交的批处理文件中设置 --nodes=2 时,我都会收到错误消息,"警告:无法在 2 个节点上运行 1 个进程,将 nnode 设置为 1。

我一直在尝试让它与一个简单的 Hello World 脚本一起使用,但仍然遇到上述错误。我在运行 MPI 脚本时添加了 --oversubscribe选项,但仍然收到此错误。

    #SBATCH --job-name=a_test
    #SBATCH --mail-type=ALL
    #SBATCH --ntasks=1
    #SBATCH --cpu-freq=high
    #SBATCH --nodes=2
    #SBATCH --cpus-per-task=2
    #SBATCH --mem-per-cpu=1gb
    #SBATCH --mem-bind=verbose,local
    #SBATCH --time=01:00:00
    #SBATCH --output=out_%x.log
    module load python/3.6.2
    mpirun -np 4 --oversubscribe python par_PyScript2.py
```bash
I still get the expected output, but only after the error message "Warning: can't run 1 processes on 2 nodes, setting nnodes to 1." I'm worried that without being able to run on multiple nodes, my actual script will be a lot slower.

警告的原因是以下行:

#SBATCH --ntasks=1

在请求 2 个节点之前,指定仅运行 1 MPI 进程。

--ntasks设置要运行的进程数/要在案例中使用的排名。然后,您用等效的-n覆盖它,这就是您看到结果的原因。

供您参考,这是我在我的系统上运行的脚本,

#!/bin/bash
#SBATCH -C knl 
#SBATCH -q regular
#SBATCH -t 00:10:00
#SBATCH --nodes=2
module load python3
START_TIME=$SECONDS
srun -n 4 python mpi_py.py >& py_${SLURM_JOB_ID}.log
ELAPSED_TIME=$(($SECONDS - $START_TIME))
echo $ELAPSED_TIME

性能说明:

  • 如果可能的话,在同一节点上运行代码会更快。节点间通信比节点内通信慢,它可能慢一点,但也可能慢得多,这取决于集群架构等因素。
  • 请参阅群集设置建议。例如,在我的脚本上,我应该在此脚本中添加某些 slurm 选项 - 特别是-ccpu_bind=(更多在这里(。

最新更新