问题描述
我是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
可能会为您带来想要的东西。