【问题标题】:How to force mpi4py installation to use gnu MPI instead of intel MPI on cluster如何强制 mpi4py 安装在集群上使用 gnu MPI 而不是 intel MPI
【发布时间】:2020-01-21 23:41:39
【问题描述】:

问题

我正在尝试在集群上使用 mpi4py。由于其他依赖项,我必须使用 gnu,而不是 intel。但是,集群上有两个编译器版本,我无法强制 mpi4py 与 gnu 编译器一起安装

问题

  • 如何让 mpi4py 与 gnu 而不是 intel 一起工作?

  • 为什么我卸载了所有的 intel 模块,mpi4py 还是安装了 intel?

  • 尽管我指定了env MPICC,为什么mpi4py 还是随intel 一起安装的?

尝试失败

我首先尝试卸载 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/

但是,当我 pip install mpi4py 时,尽管我努力卸载它们,但它仍使用英特尔编译器:

(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 and python mpi4py gives rank 0 and size 1”的 cmets 中所指出的,针对与使用的 mpirun 不同的 MPI 实现构建 mpi4py 会导致错误:

(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.

【问题讨论】:

  • 我不是专家,但 mpi4py 可能有一个扩展,它可能与 Intel 相关,如果是这样,您需要安装 mpi4py 并加载 gnu 而不是 Intel
  • @geckos 但这就是我要说的。 尽管卸载了英特尔并加载了 gnu,但 mpi4py仍然与英特尔一起安装...

标签: python mpi mpi4py


【解决方案1】:

安装包时,pip 会缓存最近构建的包。为避免使用缓存,强制 pip 重新构建包,从而选择正确的环境,可以使用 pip install--no-cache-dir 选项。

有关进一步讨论,请参阅 horovod 的文档 here

【讨论】:

    猜你喜欢
    • 2016-03-30
    • 1970-01-01
    • 2015-10-09
    • 2016-11-14
    • 2014-05-24
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 2015-12-27
    相关资源
    最近更新 更多