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.

Есть идеи, почему? Спасибо!


person ziuu    schedule 25.03.2015    source источник
comment
возможный дубликат MPI_Rank возвращает тот же номер процесса для всех процессов   -  person Jonathan Dursi    schedule 25.03.2015
comment
Скорее всего, ваш mpi4py построен на другой реализации MPI, чем mpiexec / mpirun, который вы используете для запуска программы. mpi4py.get_config() возвращает компиляторы, которые находятся на том же пути, что и ваш mpirun?   -  person Jonathan Dursi    schedule 25.03.2015
comment
mpi4py.get_config() возвращает {'mpicxx': '/usr/bin/mpicxx', 'mpif77': '/usr/bin/mpif77', 'mpicc': '/usr/bin/mpicc', 'mpif90': '/usr/bin/mpif90'} Но я пробовал то же самое на моем локальном хосте и получил тот же результат (та же конфигурация), а на моем локальном хосте код работает.   -  person ziuu    schedule 27.03.2015
comment
большой ; где теперь mpirun / mpi exec? Например, какой mpirun выводит?   -  person Jonathan Dursi    schedule 27.03.2015
comment
И whereis: mpirun: /usr/bin/mpirun.mpich /usr/bin/mpirun /usr/bin/mpirun.openmpi /usr/bin/X11/mpirun.mpich /usr/bin/X11/mpirun /usr/bin/X11/mpirun.openmpi /usr/share/man/man1/mpirun.1.gz mpiexec: /usr/bin/mpiexec.mpich /usr/bin/mpiexec.hydra /usr/bin/mpiexec /usr/bin/mpiexec.openmpi /usr/bin/X11/mpiexec.mpich /usr/bin/X11/mpiexec.hydra /usr/bin/X11/mpiexec /usr/bin/X11/mpiexec.openmpi /usr/share/man/man1/mpiexec.1.gz Извините за форматирование, я только узнаю, как использовать Stack Oerflow   -  person ziuu    schedule 28.03.2015
comment
Хорошо - похоже, что для MPI установлены обе версии MPICH и OpenMPI (или, по крайней мере, их заглушки). Это канонический источник этой проблемы - у вас есть mpi4py, скомпилированный с одной реализацией, и вы пытаетесь запустить его с другой. Попробуйте либо явно запустить mpirun.mpich и mpirun.openmpi, либо полностью удалить один или другой (включая все библиотеки)   -  person Jonathan Dursi    schedule 28.03.2015
comment
Да, версия openmpi mpiexec вернула 0 и 1. mpich mpiexec отлично работает. Я очень благодарен за вашу помощь!   -  person ziuu    schedule 29.03.2015


Ответы (2)


У меня была такая же проблема при запуске модуля 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 работали правильно.

person user3148185    schedule 09.11.2015
comment
Что переключить? Где переключиться? Я пытаюсь понять ваш пост, у меня та же проблема, что и у OP. - person Cheshire Cat; 29.04.2016
comment
Я отредактировал ответ, чтобы уточнить, что я переключил MPI для своей конкретной системы. - person user3148185; 03.05.2016

Как было предложено выше и в этом вопросе для C, это связано с тем, что mpirun поступает из другого MPI, с которым был связан mpi4py.

В моем случае, и я подозреваю, что то же самое верно и для многих других пользователей Python, это произошло из-за того, что изначально были установлены mpi4py - conda, которые втягивали несистемную версию MPI в мой conda, т.е. which mpirun указали путь в моем conda окружении. .

Чтобы решить эту проблему, я запустил conda remove mpi4py, а затем pip install mpi4py, который, казалось, перестроил mpi4py против MPI в среде conda и решил проблему.

person Linuxios    schedule 14.06.2019