mpi4py.MPI.COMM_SELF.SpawnAnaconda の Python ディストリビューションを使用するとエラーが発生するようです。私の質問はmpi4py、何らかの方法で Anaconda のインストールで間違ったバージョンの 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'smpi4pyは mpich を使用していると思います。システムpythonを使用すると動作します。
$ /usr/bin/python spawn.py
mpi4py: /usr/lib/python2.7/dist-packages/mpi4py/MPI.so
hello
システムmpi4pyは openmpi を使用します。mpi4pyAnaconda で競合する MPI バージョンを使用してビルドすると、問題が発生する可能性はありますか?
また、呼び出しmpi4pyの下で実行すると、パッケージは Anaconda で正しく機能するようです。mpirun例えば
# 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