Slurm 和 mpi4py:用一个进程重复 n 次操作,而不是用 n 个进程重复一次

Slurm and mpi4py : repeat n times the operation with one process instead of doing it one time with n process

我是 Slurm 和 mpi4py 的新用户,所以我想测试我在此处找到的一些代码:https://researchcomputing.princeton.edu/mpi4py

我的 python 代码 test.py 如下:

from mpi4py import MPI
import sys

def print_hello(rank, size, name):
  msg = "Hello World! I am process {0} of {1} on {2}.\n"
  sys.stdout.write(msg.format(rank, size, name))

if __name__ == "__main__":
  size = MPI.COMM_WORLD.Get_size()
  rank = MPI.COMM_WORLD.Get_rank()
  name = MPI.Get_processor_name()

  print_hello(rank, size, name)

我的 bash 脚本是:

#!/bin/bash
#SBATCH --job-name=mpi4py-test 
#SBATCH --nodes=1                
#SBATCH --ntasks=3              
#SBATCH --cpus-per-task=1 

srun python test.py

当 运行 sbatch run.sh 我希望得到类似的东西:

Hello World! I am process 0 of 3 on node1.
Hello World! I am process 1 of 3 on node1.
Hello World! I am process 2 of 3 on node1.

但是我得到:

Hello World! I am process 0 of 1 on node1.
Hello World! I am process 0 of 1 on node1.
Hello World! I am process 0 of 1 on node1.

如果我将 srun python test.py 更改为 srun mpiexec -n 3 python test.py,我会得到:

Hello World! I am process 0 of 3 on node1.
Hello World! I am process 2 of 3 on node1.
Hello World! I am process 1 of 3 on node1.
Hello World! I am process 1 of 3 on node1.
Hello World! I am process 0 of 3 on node1.
Hello World! I am process 2 of 3 on node1.
Hello World! I am process 0 of 3 on node1.
Hello World! I am process 1 of 3 on node1.
Hello World! I am process 2 of 3 on node1.

流程执行了3次,我只想执行一次。 提前致谢。

可能是因为

  • Mpi4py 使用的 MPI 版本未使用 Slurm 支持编译;或
  • 你有一个非常老的 OpenMPI;或
  • 你有一个很老的 Slurm。

运行

mpiexec -n 3 python test.py

可能会得到你想要的。