主要参考Deepmodeling社区的NoteBook,然后根据自己的配置稍微修改
https://nb.bohrium.dp.tech/detail/5215742477
1. 从网上下载abacus-develop
国内就用 gitee,比较快
git clone https://gitee.com/deepmodeling/abacus-develop.git
cd abacus-develop/toolchain
需要编辑 toolchian_intel.sh
和 build_abacus_intel.sh
两个文件
2. 环境设置
在编译之前,需要加载的环境
module load mpi/oneAPI/2021.1 #官方推荐oneAPI
module load cmake/3.21.2
module load gcc/10.2.0
之前一直只加载了mpi和cmake编译不通过,后来加了gcc才编译通过。
3. 编辑 toolchian_intel.sh 和 build_abacus_intel.sh 两个文件
1. toolchain_intel.sh
这是原来的样子:
可以根据自己的需要修改,但基本不用修改。这是我因为之前环境没配正确乱七八糟修改后的
这里加载了mpi,gcc后,即使设置了–with-gcc=install --with-fftw=install,–with-scalapack=install 他也不会安装的,除此之外,加载了cmake环境,也可以不用 install cmake了,但最好还是install一下,我重新编译了一下,没有修改这两个文件,报错明显变少了。
这里需要注意的是,如果直接运行 ./toolchain_intel.sh 的话这样是通过github 下载的,国内的网络环境会很慢,所以在这里,我们先把所需要的这些库给他先下载下来,然后再执行就很快了。
从 README.md里面可以看到,需要的库有:
去这个cp2k的网页里面下载:
https://www.cp2k.org/static/downloads
下载到以后,在 abacus-develop/toolchain/ 目录下面 mkdir build ,把刚刚下载的那些依赖库上传进build里面去。然后执行
./toolchain.sh
看吧,这个gcc和mpi都是读取的我加载的gcc和mpi,即使我写了gcc=install也并没有install。所以最后就只有这四个依赖库被装在了toolchain/install里面
2. build_abacus_intel.sh
上面配置好了依赖库,可以直接不用修改 build_abacus_intel.sh
然后直接运行他。因为我当时前面库没配好,乱七八糟的改,我把 LCAO给关了。
下面是我的 build_abacus_intel.sh
文件:
#!/bin/bash
#SBATCH -J build
#SBATCH -N 1
#SBATCH -n 16
#SBATCH -o install.log
#SBATCH -e install.err
# install ABACUS with libxc and deepks
# JamesMisaka in 2023.08.22
# Build ABACUS by intel-toolchain
# module load mkl compiler mpi
# source path/to/vars.sh
ABACUS_DIR=..
TOOL=$(pwd)
INSTALL_DIR=$TOOL/install
source $INSTALL_DIR/setup
cd $ABACUS_DIR
ABACUS_DIR=$(pwd)
BUILD_DIR=build_abacus_intel
rm -rf $BUILD_DIR
PREFIX=$ABACUS_DIR
ELPA=$INSTALL_DIR/elpa-2023.05.001/cpu
CEREAL=$INSTALL_DIR/cereal-1.3.2/include
LIBXC=$INSTALL_DIR/libxc-6.2.2
# LIBTORCH=$INSTALL_DIR/libtorch-2.0.1/share/cmake/Torch
# LIBNPY=$INSTALL_DIR/libnpy-1.0.1/include
# LIBRI=$INSTALL_DIR/LibRI-0.1.1
# LIBCOMM=$INSTALL_DIR/LibComm-0.1.0
# DEEPMD=$HOME/apps/anaconda3/envs/deepmd
# if use deepks and deepmd
cmake -B $BUILD_DIR -DCMAKE_INSTALL_PREFIX=$PREFIX \
-DCMAKE_CXX_COMPILER=icpc \
-DMPI_CXX_COMPILER=mpiicpc \
-DMKLROOT=$MKLROOT \
-DELPA_DIR=$ELPA \
-DCEREAL_INCLUDE_DIR=$CEREAL \
-DLibxc_DIR=$LIBXC \
-DENABLE_LCAO=OFF \
-DENABLE_LIBXC=ON \
-DUSE_OPENMP=ON \
-DUSE_ELPA=OFF \
# -DENABLE_DEEPKS=1 \
# -DTorch_DIR=$LIBTORCH \
# -Dlibnpy_INCLUDE_DIR=$LIBNPY \
# -DENABLE_LIBRI=ON \
# -DLIBRI_DIR=$LIBRI \
# -DLIBCOMM_DIR=$LIBCOMM \
# -DDeePMD_DIR=$DEEPMD \
# -DTensorFlow_DIR=$DEEPMD \
# -DENABLE_RAPIDJSON=ON \
cmake --build $BUILD_DIR -j `nproc`
cmake --install $BUILD_DIR 2>/dev/null
# if one want's to include deepmd, your gcc version should be >= 11.3.0
# generate abacus_env.sh
cat << EOF > "${TOOL}/abacus_env.sh"
source $INSTALL_DIR/setup
export PATH="${PREFIX}/bin":\${PATH}
EOF
然后执行
./build_abacus_intel.sh
这个过程中有很多的这种warning,可以忽略,这是因为oneAPI推荐支持 icx
和 icpx
编译器,但我们用的 -DCMAKE_CXX_COMPILER=icpc
。
最后编译结束,会在abacus-develop/bin
里面生成可执行文件 abacus_pw
,有一个后缀pw
猜测可能是我把LCAO关了的原因。
4. 程序运行
在编译成功后,会在toolchain
文件夹下面生成一个 abacus_env.sh
的文件,每次执行计算任务之前,先source一下,当然,也需要module load oneAPI, gcc, 和 cmake。所以可以把这几个module写进这个abacus_env.sh里面。这样每次就只需要执行一次 source就行了。
source ~/software/abacus-develop/toolchain/abacus_env.sh
先看一下 abacus 的版本
abacus_pw --version
程序测试
进入 abacus-develop/examples/scf/pw_Si2
执行以下命令:
OMP_NUM_THREADS=1
mpirun -np 48 abacus_pw | tee abacus_mpi.log
我的一个节点有48个核,后面的这个 | tee abacus_mpi.log
表示日志输出到这个文件里,也会输出到slurm-PID.out里面
最后成功输出,程序编译成功~~~~
--------------------------------------------手动分割线----------------------------------------------
5. 带PW和LCAO版本的abacus
下面是正式编译带PW和LCAO版本的abacus
LCAO也算是abacus的一个亮点吧,所以上面编译的abacus误打误撞把LCAO关闭了心里不太爽,决定重新编译一下。
5.1 软件下载
5.2 环境加载
软件下载和环境加载不说了。还是cmake3.21.2,gcc-10.2.0。但是不知道为什么,上面编译只带PW的版本加载oneAPI-2021是可以成功编译出来的,但现在加了LCAO后,oneAPI-2021不行了,必须要加载oneAPI-2022
,可能是某些库冲突了。
5.3 toolchain_intel.sh
在这里我把cmake和gcc关了,打开了rapidjson
然后执行
./toolchian_intel.sh
然后直接执行build_abacus_intel.sh,不用修改
./build_abacus_intel.sh
基本没有什么报错信息,不太懂。
然后就在abacus-develop/bin
目录下面生成了abacus
这个可执行文件,后面同上~~