微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我是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,name))

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

  print_hello(rank,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

可能会为您带来想要的东西。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。