«

编译集群MPI可用并行OpenMolcas

叫个啥名字 发布于 阅读:625 linux


一.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>&1
export 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倍。

 

 

OpenMolcas 集群

请先 登录 再评论