Как заставить установку mpi4py использовать MPI GNU вместо Intel MPI в кластере - PullRequest
2 голосов
/ 21 сентября 2019

Проблема

Я пытаюсь использовать mpi4py в кластере.Из-за других зависимостей я должен использовать GNU, а не Intel.Однако в кластере есть обе версии компилятора , и мне не удается принудительно установить mpi4py с компиляторами gnu .

Вопросы

  • Как заставить mpi4py работать с gnu вместо intel?

  • Почему mpi4py устанавливается с intel, хотя я выгружал все модули intel?

  • Почему mpi4py установлен с Intel, несмотря на то, что я указал env MPICC?

Неудачные попытки

Я впервые попыталсявыгрузите модули intel и загрузите модуль gnu openmpi, чтобы я получил:

me@cluster:~$ module purge
me@cluster:~$ module load python
me@cluster:~$ source .virtualenvs/py36env/bin/activate
(py36env) me@cluster:~$ module load openmpi/gcc/9.1/4.0.1 
(py36env) me@cluster:~$ module list
Currently Loaded Modulefiles:
  1) python/3.6              2) openmpi/gcc/9.1/4.0.1

(py36env) me@cluster:~$ which mpicc
/usr/local/Cluster-Apps/openmpi/gnu/4.0.1-gcc-9.1/bin/mpicc

(py36env) me@cluster:~$ mpicc --version
gcc (GCC) 9.1.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

(py36env) me@cluster:~$ which mpirun
/usr/local/Cluster-Apps/openmpi/gnu/4.0.1-gcc-9.1/bin/mpirun

(py36env) me@cluster:~$ mpirun --version
mpirun (Open MPI) 4.0.1

Report bugs to http://www.open-mpi.org/community/help/

Однако, когда я устанавливаю mpi4py в пипс, он использует компиляторы intel, несмотря на мои попытки выгрузить их:

(py36env) me@cluster:~$ pip install mpi4py
Collecting mpi4py
Installing collected packages: mpi4py
Successfully installed mpi4py-3.0.2

(py36env) me@cluster:~$ python -c "import mpi4py; print(mpi4py.get_config())"
{'mpicc': '/usr/local/Cluster-Apps/intel/2017.4/compilers_and_libraries_2017.4.196/linux/mpi/intel64/bin/mpicc', 
 'mpicxx': '/usr/local/Cluster-Apps/intel/2017.4/compilers_and_libraries_2017.4.196/linux/mpi/intel64/bin/mpicxx', 
 'mpifort': '/usr/local/Cluster-Apps/intel/2017.4/compilers_and_libraries_2017.4.196/linux/mpi/intel64/bin/mpif90', 
 'mpif90': '/usr/local/Cluster-Apps/intel/2017.4/compilers_and_libraries_2017.4.196/linux/mpi/intel64/bin/mpif90', 
 'mpif77': '/usr/local/Cluster-Apps/intel/2017.4/compilers_and_libraries_2017.4.196/linux/mpi/intel64/bin/mpif77'}

Я получаю тот же результат, даже когда пытаюсь указать среду mpi с

$ env MPICC=/usr/local/Cluster-Apps/openmpi/gnu/4.0.1-gcc-9.1/bin/mpicc pip install mpi4py

, как указано в примечании в https://mpi4py.readthedocs.io/en/stable/install.html#using-pip-or-easy-install.

Ошибки

Какв комментариях указано, что « mpiexec и python mpi4py дают ранг 0 и размер 1 », имеяpi4py, построенный против реализации MPI, отличной от используемой mpirun, приводит к ошибкам:

(py36env) me@login-e-11:~$ mpirun -n 5 python -m mpi4py.bench helloworld
Hello, World! I am process 0 of 1 on login-e-11.
Hello, World! I am process 0 of 1 on login-e-11.
Hello, World! I am process 0 of 1 on login-e-11.
Hello, World! I am process 0 of 1 on login-e-11.
Hello, World! I am process 0 of 1 on login-e-11.

На самом деле это должно быть (см. https://mpi4py.readthedocs.io/en/stable/install.html#testing):

$ mpirun -n 5 python -m mpi4py.bench helloworld
Hello, World! I am process 0 of 5 on localhost.
Hello, World! I am process 1 of 5 on localhost.
Hello, World! I am process 2 of 5 on localhost.
Hello, World! I am process 3 of 5 on localhost.
Hello, World! I am process 4 of 5 on localhost.

1 Ответ

3 голосов
/ 22 сентября 2019

При установке пакетов pip хранит кеш недавно собранных пакетов.Чтобы избежать использования кеша, вынуждая pip пересобрать пакет и тем самым подобрать правильную среду, можно использовать параметр --no-cache-dir для pip install.

См. Документацию horovod здесь для дальнейшего обсуждения.

...