mpiexec和python mpi4py给出等级0和大小1

时间:2015-03-25 19:19:09

标签: python mpi mpi4py mpiexec

我在虚拟机上运行python Hello World mpi4py代码时遇到问题。

hello.py代码是:

#!/usr/bin/python
#hello.py
from mpi4py import MPI

comm = MPI.COMM_WORLD

size = comm.Get_size()
rank = comm.Get_rank()

print "hello world from process ", rank,"of", size

我尝试使用mpiexec和mpirun运行它,但它运行不正常。 输出:

$ mpirun -c 4 python hello.py 
hello world from process  0 of 1
hello world from process  0 of 1
hello world from process  0 of 1
hello world from process  0 of 1

来自mpiexec:

$ mpiexec -n 4 python hello.py 
hello world from process  0 of 1
hello world from process  0 of 1
hello world from process  0 of 1
hello world from process  0 of 1

他们似乎没有得到通讯的等级和大小。是什么导致这个?怎么解决?

mpiexec --version
mpiexec (OpenRTE) 1.6.5

mpirun --version
mpirun (Open MPI) 1.6.5

系统是Virtal Machine上的Ubuntu 14.04。

任何想法为什么?谢谢!

2 个答案:

答案 0 :(得分:0)

运行python模块emcee时遇到了同样的问题。它会给我一个错误:

"ValueError: Tried to create an MPI pool, but there was only one MPI process available. 
Need at least two."

我为我的特定群集找到的解决方案是使用不同的MPI。我的代码适用于intel-mpimpich2,但不适用openmpi。对于这个系统,我所要做的只是切换MPI。在我的PBS脚本中,我使用了module load mpich2而不是module load openmpi。在这种情况下,mpiexecmpirun正常工作。

答案 1 :(得分:0)

如上文和C的this question中所建议,这与使mpirun来自与链接的mpi4py不同的MPI有关。

就我而言,我怀疑许多其他Python用户也是如此,这是由于最初安装了mpi4pyconda,并将非系统版本的MPI拉入了{ {1}}-即conda在我的which mpirun环境中给出了一条路径。

要解决此问题,我先运行conda,然后运行conda remove mpi4py,它似乎在pip install mpi4py环境中针对MPI重建了mpi4py,并解决了问题。