编译集群MPI可用并行OpenMolcas
一.GNU
1.检查环境变量
检查是否注释掉了所有的环境变量,.bashrc把原来安装的GCC,intel等编译器以及一些能注释掉的先释掉。
2.下载相应版本的GCC
下载地址:https://ftp.gnu.org/gnu/gcc 选择相应的版本进行下载。
wget https://ftp.gnu.org/gnu/gcc/gcc-11.3.0/gcc-11.3.0.tar.gz --no-check-certificate #下载gcc-11.3.0
3.安装GCC
tar -xvf gcc-11.3.0.tar.gz && cd gcc-11.3.0 #解压并进入到源码目录
./contrib/download_prerequisites #下载 GCC 所需要的 gmp、mpfr、mpc 、isl。速度较慢,成功后会出现All prerequisites downloaded successfully.
mkdir build && cd build
../configure --prefix=/opt/wsy/GCC/gcc-11.3.0/my_install --enable-threads=posix --enable-languages=c,c++,fortran --disable-multilib #构建安装文件
--enable-threads=posix 使c++异常能处理多线程代码 –-enable-languages 表示你要让你的gcc支持那些语言 –-disable-multilib 不交叉编译。 具体其他可选项在官网可查 |
make -j16 >make.log #进行编译,正确信息保存到make.log,提示信息以及错误信息直接显示。
make install #将编译成功的软件安装到你--prefix设置的地址。
4:添加环境变量
vi ~/.bashrc #将原来注释掉变量的给改回来,然后添加下面这些。
export GCC=/opt/wsy/GCC/gcc-11.3.0/my_install
export PATH=$GCC/bin:$PATH
export LD_LIBRARY_PATH=$GCC/lib64:$LD_LIBRARY_PATH
source ~/.bashrc
二. 安装openmpi, mpi并行编译器
1.下载
下载地址
wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.3.tar.gz
2.安装
tar -xvf openmpi-4.1.3.tar.gz && cd openmpi-4.1.3
./configure --prefix=/opt/wsy/openmpi/openmpi-4.1.3/my_install
make -j16
make install
3.添加环境变量
export openmpi=/opt/wsy/openmpi/openmpi-4.1.3/my_install
export PATH=$openmpi/bin:$PATH
export LD_LIBRARY_PATH=$openmpi/lib:$LD_LIBRARY_PATH
source ~/.bashrc
三. 安装OpenSSL 通信
1.下载
下载地址
wget https://github.91chi.fun/https://github.com//openssl/openssl/archive/refs/tags/OpenSSL_1_1_1n.tar.gz
2.安装
tar -xvf OpenSSL_1_1_1n && tar -xvf OpenSSL_1_1_1n.tar.gz && cd openssl-OpenSSL_1_1_1n
./config --prefix=/opt/wsy/OpenSSL/openssl-OpenSSL_1_1_1n/my_install
make -j16 && make install
3.设置环境变量
export openssl=/opt/wsy/OpenSSL/openssl-OpenSSL_1_1_1n/my_install
export PATH=$openssl/bin:$PATH
export LIBRARY_PATH=$openssl/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$openssl/lib:$LD_LIBRARY_PATH
四. 安装线性代数库blas和lapack
1.下载
下载地址,选择合适的版本。
wget https://codeload.github.com/Reference-LAPACK/lapack/tar.gz/refs/tags/v3.10.1
2.安装
需要配置好gfortran,python以及python库文件。
tar -xvf v3.10.1 && cd lapack-3.10.1 #解压进入目录
vi Makefile #编辑Makefile
#lib: lapacklib tmglib # 第十二行注释
lib: blaslib variants lapacklib tmglib #第十三行取消注释
cp make.inc.example make.inc #把编译模板复制为make.inc
make -j16
cd LAPACKE #这里是lapack的C语言接口源码
make -j16
3.设置环境变量
export lapack=/opt/wsy/lapack
export LIBRARY_PATH=$lapack/lapack-3.10.1:$LIBRARY_PATH
export CPLUS_INCLUDE_PATH=$lapack/lapack-3.10.1/LAPACKE/include:$CPLUS_INCLUDE_PATH
export C_INCLUDE_PATH=$lapack/lapack-3.10.1/LAPACKE/include:$C_INCLUDE_PATH
source ~/.bashrc
五.安装OpenBLAS(依赖blas和lapack)
1.下载地址
wget https://github.com/xianyi/OpenBLAS/releases/download/v0.3.20/OpenBLAS-0.3.20.tar.gz
2.安装
tar vxzf OpenBLAS-0.3.20.tar.gz
cd OpenBLAS-0.3.20/
make USE_OPENMP=1 NO_LAPACK=0 INTERFACE64=1 BINARY=64 DYNAMIC_ARCH=1 libs netlib shared
make PREFIX=/opt/wsy/OpenBLAS/OpenBLAS-0.3.20/my_install install
六.安装ga库(依赖OpenBLAS)
1.下载地址
wget https://github.com/GlobalArrays/ga/releases/download/v5.8/ga-5.8.tar.gz
2.安装
tar vxzf ga-5.8.tar.gz
cd ga-5.8/
./configure --enable-i8 --with-blas8=/opt/wsy/OpenBLAS/OpenBLAS-0.3.20/my_install --prefix=/opt/wsy/ga/ga-5.8/my_install
make -j16 && make install
七.安装GSL库(QCMaquis模块需要)
1.下载
https://mirrors.nju.edu.cn/gnu/gsl
wget https://mirrors.nju.edu.cn/gnu/gsl/gsl-2.7.tar.gz
2.安装
tar -xvf gsl-2.7.tar.gz && cd gsl-2.7
./configure --prefix=/opt/wsy/GSL/gsl-2.7/my_install
make -j16 && make install
3.环境变量
export GSL_ROOT_DIR=/opt/wsy/GSL/gsl-2.7/my_install
export PATH=$GSL_ROOT_DIR/bin:$PATH
export CPATH=$GSL_ROOT_DIR/include:$CPATH
export LD_LIBRARY_PATH=$GSL_ROOT_DIR/lib:$LD_LIBRARY_PATH
八.安装boost(QCMaquis模块需要)
1.下载地址
https://sourceforge.net/projects/boost/files/boost/1.57.0
https://sourceforge.net/projects/boost/files/boost/1.77.0
2.安装
tar -zxvf boost_1_57_0.tar.gz
cd boost_1_57_0
./bootstrap.sh --prefix=/opt/wsy/Boost/boost_1_57_0/my_install --with-libraries=all
vi project-config.jam # 在第一行添加 using mpi ; 记住别忘了加;代表用mpi编译,否则默认用现在的编译器,注意自己目前的编译器是什么,有没有注释掉原来的多个编译器,比如intel的,gcc的,openmpi的
./b2 -j16 --layout=tagged link=static,shared threading=multi install
3.修改环境变量
#export BOOST_ROOT=/opt/wsy/Boost/boost_1_77_0/my_install
export BOOST_ROOT=/opt/wsy/Boost/boost_1_57_0/my_install
export BOOST_INCLUDE=$BOOST_ROOT/include:$BOOST_INCLUDE
export BOOST_LIB=$BOOST_ROOT/lib:$BOOST_LIB
export LD_LIBRARY_PATH=$BOOST_ROOT/lib:$LD_LIBRARY_PATH
export LIBRARY_PATH=$BOOST_ROOT/lib:$LIBRARY_PATH
source ~/.bashrc
九.安装HDF5以及cmake
1.下载
使用二进制包即可
hdf5下载地址:https://support.hdfgroup.org/ftp/HDF5/releases/
cmake下载地址:https://cmake.org/download/
下载下来解压后直接设置环境变量即可
2.设置环境变量
#hdf5
export HDF5_DIR=/opt/wsy/HDF5/1.12.2
export PATH=$HDF5_DIR/bin:$PATH
export LD_LIBRARY_PATH=$HDF5_DIR/lib:$LD_LIBRARY_PATH
export LIBRARY_PATH=$HDF5_DIR/lib:$LIBRARY_PATH
十.编译OpenMolcas
1.检查需要的软件包路径
export GAROOT=/opt/wsy/ga/ga-5.8/my_install #ga安装路径
export OPENBLASROOT=/opt/wsy/OpenBLAS/OpenBLAS-0.3.20/my_install #openblas安装路径
which gcc g++ gfortran mpicc mpifort mpicxx #检查gcc,g++,grortran,mpicc, mpifort, mpicxx路径是否正确。
echo $openmpi #再次检查openmpi版本是否正确。
再次检查看一下boost以及gsl库是否已经写入环境变量
2.下载源代码
git clone https://gitlab.com/Molcas/OpenMolcas.git
如果需要QCMaquis NEVPT2模块,编译时会自动到github下载,如果github无法访问,可以到这里先下载下来,然后下面介绍离线编译QCMaquis NEVPT2。
3.编译
cd OpenMolcas && mkdir build && cd build
CC=$openmpi/bin/mpicc FC=$openmpi/bin/mpifort CXX=$openmpi/bin/mpicxx cmake -DMPI=ON -DGA=ON -DLINALG=OpenBLAS -DOPENMP=ON -DDMRG=ON -DNEVPT2=ON ../
ccmake ../ #用ccmake可视化安装,选择需要的模块,优化代码,构建库,按T可以查看编译器路径等等,检查一下是否正确。
make -j16
####编译出现无法下载qcmaquis错误的话,直接make clean,然后执行以下操作,也可以在make -j16之间直接操作####
cd External/qcmaquis/tmp/
rm -f qcmaquis-gitclone.cmake qcmaquis-gitupdate.cmake
touch qcmaquis-gitclone.cmake qcmaquis-gitupdate.cmake
cd ../src/
rm -rf qcmaquis
然后将你下载好的qcmaquis包在这里解压,命名为qcmaquis。
cd ../../nevpt2_ext/tmp
rm -f nevpt2_ext-gitclone.cmake nevpt2_ext-gitupdate.cmake
touch nevpt2_ext-gitclone.cmake nevpt2_ext-gitupdate.cmake
cd ../src/
rm -rf nevpt2_ext
然后将你下载好的nevpt2包在这里解压,命名为nevpt2_ext。
cd ../../..
make -j16
##############################################################################################
4.设置环境变量
export MOLCAS=/opt/wsy/OpenMolcas/OpenMolcas-22.02/build_QCMaquis_mpi
export PATH=$MOLCAS:$MOLCAS/bin:$MOLCAS/sbin:$MOLCAS/qcmaquis/bin:$PATH
export LD_LIBRARY_PATH=$MOLCAS/lib:$MOLCAS/qcmaquis/lib:$LD_LIBRARY_PATH
export LIBRARY_PATH=$MOLCAS/lib/static:$MOLCAS/qcmaquis/lib:$LIBRARY_PATH
十一.编写任务脚本 pbs实例
########### pbs 节点节点信息开始 ######################## #PBS -N Fname #PBS -l nodes=cpu:ppn=numcore#PBS -l walltime=1000:00:00 #PBS -l mem=neicunMB #PBS -q batch #PBS -S /bin/bash ########### pbs 节点节点信息结束 ######################## ###########环境开始###################################GCC_GNU编译器 版本11.3.0 export GCC=/opt/wsy/GCC/gcc-11.3.0/my_install export PATH=$GCC/bin:$PATH export LD_LIBRARY_PATH=$GCC/lib64:$LD_LIBRARY_PATH #GCC11.3编译的lapack与blas export lapack=/opt/wsy/lapack export LIBRARY_PATH=$lapack/lapack-3.10.1:$LIBRARY_PATH export CPLUS_INCLUDE_PATH=$lapack/lapack-3.10.1/LAPACKE/include:$CPLUS_INCLUDE_PATH export C_INCLUDE_PATH=$lapack/lapack-3.10.1/LAPACKE/include:$C_INCLUDE_PATH ##openmpi-4.1.3 export openmpi=/opt/wsy/openmpi/openmpi-4.1.3/my_install export PATH=$openmpi/bin:$PATH export LD_LIBRARY_PATH=$openmpi/lib:$LD_LIBRARY_PATH ## OpenSSL_1_1_1n export openssl=/opt/wsy/OpenSSL/openssl-OpenSSL_1_1_1n/my_install export PATH=$openssl/bin:$PATH export LIBRARY_PATH=$openssl/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=$openssl/lib:$LD_LIBRARY_PATH ##HDF5 1.12.2 export HDF5_DIR=/opt/wsy/HDF5/1.12.2 export PATH=$HDF5_DIR/bin:$PATH export LD_LIBRARY_PATH=$HDF5_DIR/lib:$LD_LIBRARY_PATH export LIBRARY_PATH=$HDF5_DIR/lib:$LIBRARY_PATH ##GSL export GSL_ROOT_DIR=/opt/wsy/GSL/gsl-2.7/my_install export PATH=$GSL_ROOT_DIR/bin:$PATH export CPATH=$GSL_ROOT_DIR/include:$CPATH export LD_LIBRARY_PATH=$GSL_ROOT_DIR/lib:$LD_LIBRARY_PATH #Boost export BOOST_ROOT=/opt/wsy/Boost/boost_1_57_0/my_install export BOOST_INCLUDE=$BOOST_ROOT/include:$BOOST_INCLUDE export BOOST_LIB=$BOOST_ROOT/lib:$BOOST_LIB export LD_LIBRARY_PATH=$BOOST_ROOT/lib:$LD_LIBRARY_PATH export LIBRARY_PATH=$BOOST_ROOT/lib:$LIBRARY_PATH #GA and OpenBLAS export GAROOT=/opt/wsy/ga/ga-5.8/my_install export OPENBLASROOT=/opt/wsy/OpenBLAS/OpenBLAS-0.3.20/my_install ##OpenMolcas22.02 export MOLCAS=/opt/wsy/OpenMolcas/OpenMolcas-22.02/build_QCMaquis_mpi export PATH=$MOLCAS/bin:$MOLCAS/sbin:$MOLCAS/qcmaquis/bin:$PATH export LD_LIBRARY_PATH=$MOLCAS/lib:$MOLCAS/qcmaquis/lib:$LD_LIBRARY_PATH export LIBRARY_PATH=$MOLCAS/lib/static:$MOLCAS/qcmaquis/lib:$LIBRARY_PATH ###########环境结束################################# ######### 任务信息开始 ############################### mkdir -p /tmp/$USER.molcas/$PBS_JOBID >/dev/null 2>&1export OMP_NUM_THREADS=1 export MOLCAS_WORKDIR=/tmp/$USER.molcas/$PBS_JOBID export MOLCAS_MEM=neicun #export MOLCAS_PRINT=2 #export MOLCAS_PROPERTIES=LONG cd $PBS_O_WORKDIR startdate=`date '+%Y-%m-%d %H:%M:%S'` jobname=Fname pwd=`pwd` hostname=`hostname` jobid=${PBS_JOBID%.*} echo [OpenMolcas] [$jobname] [$jobid] [$hostname] [$pwd] [$startdate] >> ~/qsub.history $MOLCAS/pymolcas -f -np numcore *.input finishdate=`date '+%Y-%m-%d %H:%M:%S'` result1=$(grep 'Stop Module' *.log|tail -1|gawk -F/ '{print $2}'|gawk '{print $1}') result0=$(grep 'Stop Module' *.log|tail -1|gawk -F: '{print $2}'|gawk '{print $1}') result2=$(grep -i 'Error' *.log|gawk -F: '{print $1}') sed -i "/${PBS_JOBID%.*}/s/$/ [$finishdate] [$result0 $result1]/" ~/qsub.history sed -i "/${PBS_JOBID%.*}/s/$/ $result2/" ~/qsub.history touch `hostame` #cp -r /tmp/$USER.molcas/$PBS_JOBID . >/dev/null 2>&1 cp *.RasOrb.1 Root1.RasOrb >/dev/null 2>&1 cp *.molden.1 Root1.molden >/dev/null 2>&1 #mv *.RasOrb.* *.molden.* *.SpdOrb.* $PBS_JOBID >/dev/null 2>&1 cp input/* . >/dev/null 2>&1 rm *.RasOrb.* *.molden.* *.SpdOrb.* >/dev/null 2>&1 #rm -rf /tmp/$USER.molcas/$PBS_JOBID input >/dev/null 2>&1 rm *.GssOrb *.guessorb.h5 *guessorb.molden *.LoProp.molden *.LprOrb *.status xmldump *.e* *.o* >/dev/null 2>&1 rm *.RICDLib >/dev/null 2>&1 #content="OpenMolcas 任务名:${jobname} 任务号:${jobid} 计算节点:${hostname} \n 路径:${pwd} \n 开始时间:${startdate} 结束时间:${finishdate} \n 结果正确与否:${result0}${result1}${result2}" #summary="OpenMolcas 任务号:${jobid} 结果:${result0}${result1}${result2} 任务名:${jobname}" #curl -i -k -H "Content-type: application/json" -X POST -d '{ "appToken":"", "content":"'"$content"'", "summary":"'"$summary"'", "contentType":1, "uids":[""]}' http://wxpusher.zjiecode.com/api/send/message ##任务结束向你的微信推送信息 ######### 任务信息开结束 ############################### |
十二、Test
编译推荐
MPI版本可以选择GCC编译的openmpi去编译GA以及OpenMolcas并且结合openblas(此文中的编译方式)。或者选择intel编译器编译的openmpi去编译GA以及OpenMolcas并且结合MKL。直接用intel的mpi去编译无法编译通过。推荐此文中编译方法,不报错,极少部分不重要test测试出错,无关紧要的错误。
OpenMP版本可以(GNU+openblas)或 intel(mkl)全家桶,或者是选择(GNU+MKL),推荐最后面这个组合(不报错还比openblas快)。
用intel编译器会有很多段错误,测试有的通不过,检查里面有乱码,迭代的时候出现NaN,另外intel版本最好不开启OPT优化,编译过程很容易报错。
测试结果
测试的基准选择GNU+MKL单线程版本。所有测试均在单台机器且满负荷情况下同时运行测试,不存在测试环境不同的情况,仅供参考。
测试(CASSCF模块以及CASPT2模块(最短结束的任务时长13h28min),
MPI版本4核心并行加速2.2倍,7核心加速2.7倍左右,再多核心没测试。
OpenMP版本( GNU+ MKL)4核心加速1.3倍,7核心加速1.5倍。
OpenMP( GNU+ OpenBlas)4核心加速1.1倍,7核心1.13倍。