mpiexec и python mpi4py дает ранг 0 и размер 1
У меня проблема с запуском кода 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 на Virtal Machine.
Есть идеи почему? Спасибо!
1 ответ
Как предложено выше и в этом вопросе для C, это связано с mpirun
исходя из другого MPI, чем mpi4py
был связан с.
В моем случае, и я подозреваю, что то же самое верно для многих других пользователей Python, это произошло из-за первоначальной установки mpi4py
через conda
, который вытащил несистемную версию MPI в мой conda
- т.е. which mpirun
дал дорогу в моем conda
окружающая обстановка.
Чтобы решить проблему, я побежал conda remove mpi4py
а потом pip install mpi4py
, который, казалось, восстановить mpi4py
против MPI в conda
окружающей среды и решил вопрос.
У меня была такая же проблема при запуске модуля Python emcee
, Это дало бы мне ошибку:
"ValueError: Tried to create an MPI pool, but there was only one MPI process available.
Need at least two."
Решение, которое я нашел для своего конкретного кластера, заключалось в использовании другого MPI. Мой код работал с intel-mpi
а также mpich2
но нет openmpi
, Для этой системы все, что мне нужно было сделать, это переключить MPI. В моем PBS
сценарий, который я использовал module load mpich2
вместо module load openmpi
, В этом случае mpiexec
а также mpirun
работал правильно.