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

时间:2019-06-20 17:03:25

标签: python parallel-processing mpi cluster-computing slurm

我正在Slurm群集上运行一个脚本,该脚本可能会受益于并行处理,因此我尝试实现MPI。但是,它似乎不允许我在多个节点上运行进程。我不知道这是否通常会自动完成,但是每当我在批处理文件中设置--nodes = 2进行提交时,我都会收到错误消息,“警告:无法在2个节点上运行1个进程,将nnodes设置为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.

1 个答案:

答案 0 :(得分:3)

警告的原因是此行:

#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

性能说明:

  • 如果可能,在同一节点上运行代码会更快。节点间的通信比节点内的通信要慢,它可能要慢一些,但也可能要慢得多,这取决于集群体系结构。
  • 咨询您的群集设置建议。例如,在我的例子中,我应该为此脚本添加某些特定选项-特别是-ccpu_bind=(更多here)。