15

我在虚拟机上运行 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

该系统是虚拟机上的 Ubuntu 14.04。

任何想法为什么?谢谢!

4

2 回答 2

0

正如上面和 C 的这个问题所建议的,这与mpirun来自与mpi4py链接不同的 MPI 有关。

就我而言,我怀疑许多其他 Python 用户也是如此,这来自于最初安装mpi4pythrough conda,它将 MPI 的非系统版本拉入我的conda- 即在我的环境which mpirun中提供了一条路径。conda

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

于 2019-06-14T14:36:51.787 回答
0

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

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

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

于 2015-11-09T06:59:23.757 回答