目录
DeePMD-kit安装测试
DeePMD-kit简介
分子动力学(Molecular dynamics,MD)在物理、化学、生物、和材料科学等领域都有着极为广泛的应用。然而做MD计算模拟却长期面临着模拟精度与效率的困境:基于密度泛函理论(Density functional theory,简称DFT)的第一性原理分子动力学(ab initio molecular dynamics,简称AIMD)精度高,但缺包含着巨大的计算开销(通常与模拟原子数的立方成正比)。AIMD模拟尺度局限在数百个原子以及100皮秒以内。超出上述范围的应用往往只能依赖于经验力场(如经典的EAM势),经验力场有效地拓展了特定MD的模拟尺度,但是其可移植性以及精度往往是个问题,在处理复杂系统时常常显得力不从心,且构建经验力场通常比较麻烦。
近来通过深度学习的方法表示多体势能的发展给解决这一困境带来了新的希望,在这一背景下,DeePMD-kit应运而生。DeePMD-kit是一个基于TensorFlow(TF)开源机器学习框架的用Python/C++语言编写的软件包,旨在最小化构建基于深度学习的势能和力场表示以及执行MD模拟所需的人工干预。DeePMD-kit的潜在应用范围从有限的分子体系到周期性材料体系,从金属系统到带有化学键的系统。目前已经发表的成果证明DeePMD-kit 具有AIMD的精度同时也保有线性增长的计算复杂度和计算内存使用量。使用DeePMD-kit将在复杂的化学反应、电化学电池、纳米晶体材料、辐射损伤以及动态断裂和裂纹扩展等需要大规模、高精度分子动力学模拟的应用问题中发挥重要作用。将极大地加速化学反应设计与合成,材料老化与失效,新材料研发与工艺设计等领域的研究进展。
开源的(https://github.com/deepmodeling/deepmd-kit)DeePMD-kit 软件包,其代码主要由三个部分构成:
(1)C++实现的计算descriptors(保留了原子坐标的平移,交换以及对称不变性等信息),force以及virial等量的动态链接库,也包括了和TensoFlow以及LAMMPS等第三方软件包的接口;
(2)基于TensorFlow Python API实现的训练和测试程序;
(3)对于LAMMPS以及i-PI软件包的支持。
安装过程
新版配置
从 https://cancon.hpccube.com:65024/1/main/DTK-23.10_hpcapps-20231120/NFS3.2_CentOS7.6 下载deepmd-kit源码:
wget https://cancon.hpccube.com:65024/directlink/1/DTK-23.10_hpcapps-20231120/NFS3.2_CentOS7.6/DeepMD-kit-v2.2.7_nfs3.2_DTK23.10_hpcx2.4.1_01Nov2023.tar.gz
//下载后以包内最新的README为准,注意上方链接为DTK-23.10版本的DTK环境,配置环境需与安装包DTK版本一致,下方配置仅供参考。
旧版配置
安装TensorFlow python接口
在拥有conda工具以及可以连接外网的环境下,按照以下步骤进行安装:
conda create -n tensorflow-1.15 python=3.6.8
source activate tensorflow-1.15
pip install tensorflow-1.15.3-cp36-cp36m-linux_x86_64.whl
在conda虚拟环境中,pip会自动下载TensorFlow依赖的其他组件进行安装。
安装TensorFlow C++接口
安装TensorFlow C++接口需要bazel 0.24.1版本。进入TensorFlow 1.15源码顶层目录进行配置与安装:
export PATH=/public/home/gromacs/sourcecode/dcuapps-rocm39/tensorflow-source/bin:$PATH
cd /public/home/gromacs/sourcecode/dcuapps-rocm39/tensorflow-source/tensorflow-rocm-r1.15-rocm-enhanced
export ROCM_PATH=$(dirname $(dirname $(which hipcc)))
export ROCM_TOOLKIT_PATH=${ROCM_PATH}
yes "" | ROCM_PATH=$ROCM_PATH TF_NEED_ROCM=1 TF_DOWNLOAD_CLANG=0 TF_NEED_MPI=1 TF_NEED_CUDA=0 PYTHON_BIN_PATH=/public/home/gromacs/.conda/envs/tensorflow-1.15/bin/python ./configure
bazel build --config=opt --copt="-I/opt/rh/devtoolset-7/root/usr/include/c++/7" --copt="-L/opt/rh/devtoolset-7/root/usr/lib64" --copt="-static-libstdc++" --config=rocm --copt=-mavx2 //tensorflow:libtensorflow_cc.so
export tensorflow_root= /public/home/gromacs/sourcecode/dcuapps-rocm39/tensorflow-1.15-cc
mkdir -p $tensorflow_root
mkdir $tensorflow_root/lib
cp -d bazel-bin/tensorflow/libtensorflow_cc.so* $tensorflow_root/lib/
cp -d bazel-bin/tensorflow/libtensorflow_framework.so* $tensorflow_root/lib/
cp -d $tensorflow_root/lib/libtensorflow_framework.so.1 $tensorflow_root/lib/libtensorflow_framework.so
mkdir -p $tensorflow_root/include/tensorflow
cp -r bazel-genfiles/* $tensorflow_root/include/
cp -r tensorflow/cc $tensorflow_root/include/tensorflow
cp -r tensorflow/core $tensorflow_root/include/tensorflow
cp -r third_party $tensorflow_root/include
cp -r bazel-tensorflow-rocm-r1.15-rocm-enhanced/external/eigen_archive/Eigen/ $tensorflow_root/include
cp -r bazel-tensorflow-rocm-r1.15-rocm-enhanced/external/com_google_absl/absl $tensorflow_root/include
cp -r bazel-tensorflow-rocm-r1.15-rocm-enhanced/external/eigen_archive/unsupported/ $tensorflow_root/include
rsync -avzh --include '*/' --include '*.h' --include '*.inc' --exclude '*' bazel-tensorflow-rocm-r1.15-rocm-enhanced/external/com_google_protobuf/src/ $tensorflow_root/include/
cd $tensorflow_root/include
find . -name "*.cc" -type f -delete
安装deepmd-kit C++接口
然后使用cmake进行配置和安装:
cd deepmd-kit
mkdir -p source/build
cd source/build
cmake -DTENSORFLOW_ROOT=$tensorflow_root -DCMAKE_INSTALL_PREFIX=$deepmd_root ..
make -j 10
make install
其中$tensorflow_root为TensorFlow C++接口安装目录。
安装deepmd-kit python接口
进入deepmd-kit顶层目录,修改setup.py文件中deepmd_op_rocm_lib变量为deepmd-kit C++接口安装生成的libdeepmd_op_rocm.so库所在路径,然后直接使用pip进行安装。安装完成后,执行dp -h,产生如下输出:
usage: dp [-h] {transform,train,freeze,test} ...
DeePMD-kit: A deep learning package for many-body potential energy
representation and molecular dynamics
optional arguments:
-h, --help show this help message and exit
Valid subcommands:
{transform,train,freeze,test}
transform pass parameters to another model
train train a model
freeze freeze the model
test test the model
安装LAMMPS的deepmd-kit 模块
进入deepmd-kit源码目录的source/build目录,执行make lammps命令,当前目录下生成USER-DEEPMD目录。将该目录拷贝到LAMMPS目录的src目录下,然后在该目录下进行安装:
cd $lammps/src/
cp -r $deepmd_source_dir/source/build/USER-DEEPMD ./
make yes-kspace
make yes-user-deepmd
make mpi
完成后当前目录下生成lmp_mpi可执行文件。
测试算例
训练
进入deepmd-test/water/train目录,sbatch提交sub.sh脚本。sub.sh脚本内容如下:
#!/bin/bash
#SBATCH -J dp
#SBATCH -N 1
#SBATCH -n 32
#SBATCH -p sugon
#SBATCH -o dp-%J.log
#SBATCH -e dp-%J.err
#SBATCH -t 24:00:00
#SBATCH --gres=dcu:4
source /public/home/gromacs/sourcecode/dcuapps-rocm39/deepmd-test/env.sh
export TF_CPP_MIN_LOG_LEVEL=2
dp train water.json
dp freeze -o graph.pb
dp train按照json文件中的信息进行训练,dp freeze导出训练好的模型,作为后续MD过程的输入。
/public/home/gromacs/sourcecode/dcuapps-rocm39/deepmd-test/env.sh脚本内容如下:
export DP_HOME=/public/home/gromacs/sourcecode/dcuapps-rocm39
export tensorflow_root=${DP_HOME}/tensorflow-1.15-cc
export deepmd_source_dir=${DP_HOME}/deepmd-kit
export deepmd_root=${DP_HOME}/deepmd-kit-rocm-install
module purge
module load compiler/devtoolset/7.3.1
module load compiler/rocm/3.9.1
module load mpi/hpcx/2.4.1/gcc-7.3.1
module load apps/anaconda3
export LD_LIBRARY_PATH=/public/home/gromacs/sourcecode/dcuapps-rocm39/deepmd-kit-rocm-install/lib:$LD_LIBRARY_PATH
export PATH=${DP_HOME}/lammps/src:$PATH
source activate tensorflow-1.15
MD模拟
进入deepmd-test/water/lmp目录,提交sub.sh脚本进行MD模拟,脚本内容如下:
#!/bin/bash
#SBATCH -J dp
#SBATCH -p sugon
#SBATCH -N 1
#SBATCH --cpus-per-task=1
#SBATCH --ntasks-per-node=32
#SBATCH --gres=dcu:4
#SBATCH --time=01:00:00
#SBATCH -o dp-%j.log
#SBATCH -e dp-%j.err
source /public/home/gromacs/sourcecode/dcuapps-rocm39/deepmd-test/env.sh
date
srun hostname | sort | uniq -c |awk '{printf"%s slots=4\n",$2}' > hostfile
mpirun -np 4 --hostfile hostfile --bind-to none ./bind.sh
date
bind.sh脚本内容如下:
#!/bin/bash
lrank=$OMPI_COMM_WORLD_LOCAL_RANK
app=/public/home/gromacs/sourcecode/dcuapps-rocm39/lammps/src/lmp_mpi
case ${lrank} in
[0])
export HIP_VISIBLE_DEVICES=0
numactl --cpunodebind=0 --membind=0 ${app} -in copper.in;;
[1])
export HIP_VISIBLE_DEVICES=1
numactl --cpunodebind=1 --membind=1 ${app} -in copper.in;;
[2])
export HIP_VISIBLE_DEVICES=2
numactl --cpunodebind=2 --membind=2 ${app} -in copper.in;;
[3])
export HIP_VISIBLE_DEVICES=3
numactl --cpunodebind=3 --membind=3 ${app} -in copper.in;;
esac
copper.in文件为lammps的输入文件,其中:
pair_style deepmd copper.pb
pair_coeff
pair_style 指定deepmd类型,后面加训练好的.pb模型文件。pair_coeff必须为空。