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 работал правильно.

Другие вопросы по тегам