查看原文
其他

安装基于openmpi的mpi4py

jxzou 量子化学 2022-07-07

在使用PySCFBlock程序做DMRG-SC-NEVPT2计算时,发现它要用到mpi4py(可以在pyscf/pyscf/dmrg/nevpt_mpi.py看到)来实现并行,然而Anaconda23500MB的离线安装包里都没有mpi4py这个模块。当然可以直接联网,使用pip install mpi4py命令来安装,十分方便。但是这有个问题:联网安装的mpi4py是基于mpich2的,它要求一起安装mpich2。由于笔者的电脑里原本安装有openmpi-1.10.3,使用联网安装后,虽然安上了mpi4py,但是所有mpicc, mpicxx, mpirun的环境变量都变成了mpich2的,其他软件并行时就出问题了。因此琢磨了一下基于openmpimpi4py的安装方法,这样有2个好处:(1)不用安装mpich2了,直接基于现有的openmpi,或者intel mpi也可以;(2)有些不方便连外网的服务器可以采用此法来安装mpi4py。(不过,连外网问题也可以解决,参看本公众号前几期文章《计算集群使用squid代理访问外网》)

笔者测试时的实际安装版本或环境:mpi4py-3.0.0openmpi-1.10.3Anaconda3-5.0.1Python 3.6.3intel2018编译器。

 

1.下载mpi4py 3.0.0

可以从https://pypi.python.org/pypi/mpi4py下载到压缩包。

解压 tar-zxvf mpi4py-3.0.0.tar.gz

cd mpi4py-3.0.0

 

2. 修改配置文件mpi.cfg

如果想基于openmpi,可以直接到该文件里的[openmpi]处,修改mpi_dir后的路径为真实路径,比如笔者电脑上是/opt/openmpi-1.10.3;如果想基于intel mpi,也可以将此处修改为系统上intel mpi的路径,比如/opt/intel/compilers_and_libraries/linux/mpi,但是要注意,下面几行的mpicc, mpicxxlibrary_dirs后的路径要做相应的修改,笔者电脑上intel mpi下这些路径里是bin64lib64,而不是binlib。其中的include_dirslibraries看上去没什么用,保留原样没动。

需要注意的是,基于任一种mpi,安装完后使用就必须对应的mpi。比如安装时基于intel mpi,但是安装完后把intel mpi的环境变量改成openmpi的、或者用openmpi的覆盖掉,是不行的。

 

3. 编译

python setup.py build --mpi=openmpi

这里的openmpi对应上一步骤的修改之处。

 

如果基于openmpi-1.10.3,可能会报error: Cannot link MPI programs.的错误,往上看其实是找不到libimf.so, libsvml.so, libirng.so, libintlc.so.5四个库文件,这4个库文件在intel编译器的文件夹里可以找到,但是不知道为什么无法自动识别出来。我的解决办法是将这4个库文件复制一份进/opt/openmpi-1.10.3/lib下。看到此处的小伙伴如果有什么更好的做法,欢迎留言。若是基于intel mpi,自然不会有此问题。

 

4. 安装

(1)若想安装在自己的目录下:

python setup.py install --user

这样会安装到/home/$USER/.local文件夹下,由于其位置特殊,不需要在.bashrc里增添mpi4py的环境变量,因为.local下的文件会自动被识别。

 

2)若想安装在系统的anaconda文件夹里(如/opt/anaconda3,需要root权限):

python setup.py install --prefix=/opt/anaconda3

它其实是自动安装进/opt/anaconda3/lib/python3.6/site-packages/里去,与numpyscipy同级的目录下。此时由于anacondapython已有环境变量,mpi4py在其目录下可以被识别,不需要再添加环境变量。

 

(3)使用--prefix安装至其他指定路径,此时需要自己在.bashrc文件里添加其环境变量。如

python setup.py install --prefix=/localhome/$USER/software/mpi4py-3.0.0

相应的环境变量就是

export PYTHONPATH=/localhome/$USER/software/mpi4py-3.0.0/lib/python3.6/site-packages:$PYTHONPATH

可以看到此时它仍然会保留lib/python3.6/site-packages一长串的路径。若不想要这么长的路径名,可以进入将其中的mpi4py文件夹整个移出来即可。

 

5. 测试是否安装成功:

$ python

>> from mpi4py import MPI

无报错则安装成功。

 

参考资料:

https://pypi.python.org/pypi/mpi4py

http://mpi4py.scipy.org/docs/usrman/install.html


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存