[英]mpiexec and python mpi4py gives rank 0 and size 1 for all processes
我在 macOS 10.14 上。 在test.py
中尝试以下操作:
from mpi4py import MPI
comm = MPI.COMM_WORLD
i = comm.Get_rank()
p = comm.Get_size()
print('proc {}/{}'.format(i, p))
结果是
proc 0/1
proc 0/1
proc 0/1
proc 0/1
据我所知,这个问题的典型原因是安装了两个不同的 MPI 实现。 如果用于构建mpi4py
的库与提供用于运行程序的mpiexec
的库不同,就会发生这种情况。
不过,我认为我这样做是小心翼翼的。 我按照文档中提供的说明从源代码构建mpi4py
,通过
$ python setup.py build --mpi=openmpi
其中openmpi
在mpi.cfg
中定义为
[openmpi]
mpi_dir = /usr/local/Cellar/open-mpi/4.0.2
mpicc = %(mpi_dir)s/bin/mpicc
mpicxx = %(mpi_dir)s/bin/mpicxx
include_dirs = %(mpi_dir)s/include
#libraries = mpi
library_dirs = %(mpi_dir)s/lib
runtime_library_dirs = %(library_dirs)s
我验证安装在 python 中按预期进行:
$ python
>>> import mpi4py
>>> mpi4py.get_config()
{'mpicc': '/usr/local/Cellar/open-mpi/4.0.2/bin/mpicc', 'mpicxx': '/usr/local/Cellar/open-mpi/4.0.2/bin/mpicxx', 'library_dirs': '/usr/local/Cellar/open-mpi/4.0.2/lib', 'runtime_library_dirs': '/usr/local/Cellar/open-mpi/4.0.2/lib'}
与正在使用的mpiexec
匹配:
$ which mpiexec
/usr/local/Cellar/open-mpi/4.0.2/bin/mpiexec
mpirun
的情况是相同的。 我错过了什么? 是否有一些 package 的“部分”出于某种原因默默地期待mpich
,即使这一切似乎都加起来了?
我永远无法解决这个特定问题,而是尝试卸载我原来安装的mpi4py
,然后在新的miniconda
环境中通过conda
安装mpi4py
,它附带它自己的二进制文件,例如mpiexec
, mpicc
......这更干净而不是试图自己解决依赖关系。 它现在可以正常工作,尽管我需要手动指向新的mpiexec
(因为我通过homebrew
安装的原始openmpi
需要保留,因为它仍然是其他东西的依赖项)。 我必须这样做
/Users/me/miniconda3/bin/mpiexec -n 4 python ./test.py
我一开始没有尝试这个,因为我的 conda 安装出现了与当前问题无关的问题。 如果这也是您的障碍,只需重新安装miniconda
或您喜欢的任何 Anaconda 发行版。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.