在Anaconda Python发行版中使用mpi4py产生问题

时间:2014-03-21 22:33:58

标签: mpi anaconda mpi4py

使用Anaconda的Python发行版时,

mpi4py.MPI.COMM_SELF.Spawn似乎会抛出错误。我的问题是,在我的Anaconda安装方式中,mpi4py是否有可能针对错误版本的MPI(mpich v openmpi)构建。

问题是以下代码

# spawn.py
import mpi4py.MPI as MPI
import sys
print 'mpi4py:',MPI.__file__
comm = MPI.COMM_SELF.Spawn(sys.executable,
                           args=['hello.py'],
                           maxprocs=1)

给出以下错误

$ /home/wd15/anaconda/bin/python spawn.py
mpi4py: /home/wd15/anaconda/lib/python2.7/site-packages/mpi4py/MPI.so
[mpiexec@loki] match_arg (./utils/args/args.c:122): unrecognized argument pmi_args
[mpiexec@loki] HYDU_parse_array (./utils/args/args.c:140): argument matching returned error
[mpiexec@loki] parse_args (./ui/mpich/utils.c:1387): error parsing input array
[mpiexec@loki] HYD_uii_mpx_get_parameters (./ui/mpich/utils.c:1438): unable to parse user arguments
...

我相信Anaconda的mpi4py正在使用mpich。如果我使用系统python它可以工作。

$ /usr/bin/python spawn.py
mpi4py: /usr/lib/python2.7/dist-packages/mpi4py/MPI.so
hello

系统mpi4py使用openmpi。在{Anaconda中使用冲突的MPI版本构建mpi4py是否会出现问题?

此外,mpi4py程序包在mpirun调用下运行时似乎在Anaconda中正常运行。例如

# test_mpi4py.py
import mpi4py.MPI as MPI
print MPI.COMM_WORLD.Get_rank()

将给出

$ mpirun -n 2 /home/wd15/anaconda/bin/python test_mpi4py.py
0
1

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,一个解决方案是用openmpi而不是mpich编译mpi4py(参见mpi4py文档中的'Compute Pi'示例)。

请参阅this未解决的问题。

测试: Ubuntu 16.04 Anaconda 4.0.0 python 3.5.0 mpich 3.2.0 openmpi 1.10.2 mpi4py 2.0.0

答案 1 :(得分:0)

Anaconda与MPICH捆绑在一起。您不需要使用anaconda的mpi4py,而是需要从源代码构建自己的安装,显式链接系统MPI安装。