Deepmd是一款高效的神经网络势函数训练软件,只需要有一些Linux和基本的lammps分子动力学基础的使用者即可上手。Deepmd具有很好的lammps接口。但是对于初学者而言,deepmd-lammps编译不是一件容易的事,编译过程中的坑非常非常多。即便deepmd官网上手册中有打包好conda包,但由于不同的编译环境,编译出来的结果有可能是报错的。除此之外, 官网的一键安装包在编译过程中没有采用intel的加速功能,实际测试与本方法相比速度慢了大约1倍左右(原因是因为lammps官网有个加速的包需要手动make)。 因此建议自己编译,实现最大程度的加速效果。笔者在编译以及调试deepmd-lammps大概花费了一周左右,写本文的目的是记录在编译过程的各种报错以及相应的通用解决办法,为后续deepmd-lammps的使用者在编译上提供一定的便利。本笔记根据官网编译源码手段编译,并详细记录了编译过程中的各种坑。在编译过程中,非常感谢 Sustech 科学计算中心 高级计算工程师 Yusen Yang Hong Tang Zhuo Chou ,湖南大学硕士生 Jian He, 以及美国罗格斯大学 Jinze Zeng 博士在编译过程中提供的帮助。本人水平有限,如有槽点,还请轻喷。

2021年4月22日

Jia'ao WANG

废话不多说,直接贴编译方法。(南方科大太乙集群修改路径后直接可以运行以下代码,速度比直接使用deepmd官网一键安装包的速度快大概1倍)

module load python/anaconda3/2020.7
module load python/3.7.0
conda create python=3.7 -n dpdev -y
conda activate dpdev


module load python/anaconda3/2020.7
module load python/3.7.0
module add cuda/10.2
module add cmake/3.12.2
module load cmake/3.12.2
module load git/2.18.0

cd ~
mkdir software
cd ~/software
wget https://github.com/bazelbuild/bazel/releases/download/0.25.1/bazel-0.25.1-installer-linux-x86_64.sh
chmod +x bazel-0.25.1-installer-linux-x86_64.sh
./bazel-0.25.1-installer-linux-x86_64.sh --user
export PATH="$HOME/bin:$PATH"
git clone https://github.com/tensorflow/tensorflow -b v2.0.0 --depth=1       !!! (这里要改成2.4版本)
cd tensorflow
./configure

bazel build -c opt --verbose_failures //tensorflow:libtensorflow_cc.so
cd ..
mkdir tensorflowc++
cd tensorflowc++
export tensorflow_root=`pwd`

cd   /work/para-test/software/tensorflow
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/

cd ..
chmod -R +w ./tensorflowc++/
cd tensorflow

mkdir -p $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.2 $tensorflow_root/lib/libtensorflow_framework.so
mkdir -p $tensorflow_root/include/tensorflow
rsync -avzh --include '*/' --include '*.h' --include '*.inc' --exclude '*' bazel-genfiles/ $tensorflow_root/include/
rsync -avzh --include '*/' --include '*.h' --include '*.inc' --exclude '*' tensorflow/cc $tensorflow_root/include/tensorflow/
rsync -avzh --include '*/' --include '*.h' --include '*.inc' --exclude '*' tensorflow/core $tensorflow_root/include/tensorflow/
rsync -avzh --include '*/' --include '*' --exclude '*.cc'  third_party/ $tensorflow_root/include/third_party/
rsync -avzh --include '*/' --include '*' --exclude '*.txt' bazel-tensorflow/external/eigen_archive/Eigen/ $tensorflow_root/include/Eigen/
rsync -avzh --include '*/' --include '*' --exclude '*.txt' bazel-tensorflow/external/eigen_archive/unsupported/ $tensorflow_root/include/unsupported/
rsync -avzh --include '*/' --include '*.h' --include '*.inc' --exclude '*' bazel-tensorflow/external/com_google_protobuf/src/google/ $tensorflow_root/include/google/
rsync -avzh --include '*/' --include '*.h' --include '*.inc' --exclude '*' bazel-tensorflow/external/com_google_absl/absl/ $tensorflow_root/include/absl/

cd ..

git clone --recursive https://github.com/deepmodeling/deepmd-kit.git deepmd-kit
cd deepmd-kit

git clone --recursive https://github.com/deepmodeling/dargs dargs
cd dargs

pip install --upgrade pip --user
pip install .  --user

cd ..

pip install . --user

cd ~/software
mkdir deepmdc++
git clone https://github.com/deepmodeling/deepmd-kit
mkdir /work/para-test/software/deepmd-kit/source/build
cd  /work/para-test/software/deepmdc++
export deepmd_root=`pwd`

cd   /work/para-test/software/deepmd-kit/source/build

cmake -DUSE_CUDA_TOOLKIT=true -DTENSORFLOW_ROOT=$tensorflow_root -DCMAKE_INSTALL_PREFIX=$deepmd_root ..


make -j40 && make install
make lammps

cp -r USER-DEEPMD/ /work/para-test/apps/lammps-29Oct20/src

cd   /work/para-test/apps/lammps-29Oct20/src

module load intel/2020.4
module load mpi/intel/2020.4

make yes-user-deepmd
make yes-kspace
make yes-user-intel

make intel_cpu_intelmpi -j40

在其他的集群直接运行上述代码极有可能是报错的,因此下面我们将对每一步骤进行解释,尽可能清晰地讲清楚每一步执行的目的,以便帮助读者在一个新的集群上编译成功。

接下来 我们对每一行代码进行细致的剖析 ,以及逐行对在编译过程中容易出现的错误进行解释。编译对于新手来说并不是一件容易的事情。 如有报错请按照以下分析耐心debug, 请一步一步慢慢来。耐心debug

总的来说 安装deepmd-lammps分为三个步骤:

第零:环境的检查与准备;

第一:tensorflow的安装&tensorflow C++库的编译;

第二:deepmd-kit的安装&deepmd-kit C++库的编译;

第三:lammps的下载与c++库建立链接、编译。

第零:环境的检查。此步极其重要,请仔细检查。

请检查环境anaconda安装情况(建议用anaconda 2020.7之后的版本)具体的anaconda安装方法以及加载请参考 https://blog.csdn.net/ychgyyn/article/details/82258136 在此不多赘述。

gcc 4.8.5 CUDA 10.2 intel/2020.4 mpi/intel/2020.4 cmake/3.12.2 lammps-29Oct20 压缩包 python3 anaconda 2020.7 tensorflow为2.4版本(请注意)

第一:tensorflow的安装&tensorflow C++库的编译;

加载好环境之后,进入(base)模式,如果在环境变量中设置了登录时启动,则忽略此步骤。

conda activate

定义一个新的conda环境,命名为"deepmd",我们在此环境下(deepmd)(base)安装tensorflow。因为tensorflow对于环境依赖性非常强。

module load python/anaconda3/2020.7
module load python/3.7.0
conda create python=3.7 -n deepmd -y

启动我们定义好的环境

conda activate deepmd

在环境里面加载一下module,版本号可能对应不上,如有报错请检查。

module load python/anaconda3/2020.7
module load python/3.7.0
module add cuda/10.2
module add cmake/3.12.2
module load cmake/3.12.2
module load git/2.18.0

创建一个software的目录放在home目录下(当然放在哪里都行,方便为主)

cd ~
mkdir software
cd ~/software

下载bazel模块。请注意,一定要用0.25.1,既不要高也不要低,这是个大坑。笔者在编译过程中用了或高或低的版本,都遇到了报错,反复试了很多遍才搞定。

./bazel-0.25.1-installer-linux-x86_64.sh --user  后面建议加--user,否则会遇到permission的报错。因为放在自己的bin下不会被拒绝访问,不加user会放在管理员账户上,造成权限受限。

这一步如果出现grpc的gettid函数的报错,请关注湖南大学硕士生何健同学的解决方案。 https://zhuanlan.zhihu.com/p/367794526

wget https://github.com/bazelbuild/bazel/releases/download/0.25.1/bazel-0.25.1-installer-linux-x86_64.sh
chmod +x bazel-0.25.1-installer-linux-x86_64.sh
./bazel-0.25.1-installer-linux-x86_64.sh --user

下载2.0.0版本的tensorflow,git命令如果受限,请手动在官网下载包,然后进行配置

./configure命令一路回车下来即可(对于cpu版本)


export PATH="$HOME/bin:$PATH"
git clone https://github.com/tensorflow/tensorflow -b v2.0.0 --depth=1     !! (这里要改成2.4版本)
cd tensorflow
./configure

开始编译tensorflow,这步骤时间很长,请耐心等待,如有报错,大概率是conda环境没有加载好的问题,请返回仔细查看(此步骤及其耗费资源,会自动占慢登录节点,用此步骤前请提前联系管理员不要把进程kill掉)

bazel build -c opt --verbose_failures //tensorflow:libtensorflow_cc.so

在software下创建一个tensorflowc++目录,用于存放tensorflowc++的链接地址。定义一个tensorflow_root的环境变量,指向tensorflowc++文件夹。


cd ..
mkdir tensorflowc++
cd tensorflowc++
export tensorflow_root=`pwd`

注意/work/para-test/software修改为自己的目录

cd   /work/para-test/software/tensorflow
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/

注意将tensorflowc++/更改写入权限,否则bazel-bin对其写入会受到权限问题从而报错。这是个大坑,请注意

cd ..
chmod -R +w ./tensorflowc++/
cd tensorflow

mkdir -p $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.2 $tensorflow_root/lib/libtensorflow_framework.so
mkdir -p $tensorflow_root/include/tensorflow
rsync -avzh --include '*/' --include '*.h' --include '*.inc' --exclude '*' bazel-genfiles/ $tensorflow_root/include/
rsync -avzh --include '*/' --include '*.h' --include '*.inc' --exclude '*' tensorflow/cc $tensorflow_root/include/tensorflow/
rsync -avzh --include '*/' --include '*.h' --include '*.inc' --exclude '*' tensorflow/core $tensorflow_root/include/tensorflow/
rsync -avzh --include '*/' --include '*' --exclude '*.cc'  third_party/ $tensorflow_root/include/third_party/
rsync -avzh --include '*/' --include '*' --exclude '*.txt' bazel-tensorflow/external/eigen_archive/Eigen/ $tensorflow_root/include/Eigen/
rsync -avzh --include '*/' --include '*' --exclude '*.txt' bazel-tensorflow/external/eigen_archive/unsupported/ $tensorflow_root/include/unsupported/
rsync -avzh --include '*/' --include '*.h' --include '*.inc' --exclude '*' bazel-tensorflow/external/com_google_protobuf/src/google/ $tensorflow_root/include/google/
rsync -avzh --include '*/' --include '*.h' --include '*.inc' --exclude '*' bazel-tensorflow/external/com_google_absl/absl/ $tensorflow_root/include/absl/

cd ..

第二:deepmd-kit的安装&deepmd-kit C++库的编译;

这一步直接在git下载1.3.3的deepmd-kit即可,用pip安装deepmd-kit,注意,要安装一下dargs,否则在安装过程会报错。这个在官网上也提到过,请注意。

git clone --recursive https://github.com/deepmodeling/deepmd-kit.git deepmd-kit
cd deepmd-kit

git clone --recursive https://github.com/deepmodeling/dargs dargs
cd dargs

pip install --upgrade pip --user
pip install .  --user

cd ..

pip install . --user

接下来编译deepkit C++库 ,定义一个deepmd_root的环境变量,指向deepmdc++文件夹。 在编译过程中,如果服务器意外掉线,请重新定义$tensorflow_root 和$deepmd_root,因为如果掉线,就会丢失环境指针。

cd ~/software
mkdir deepmdc++
git clone https://github.com/deepmodeling/deepmd-kit
mkdir /work/para-test/software/deepmd-kit/source/build
cd  /work/para-test/software/deepmdc++
export deepmd_root=`pwd`

cd   /work/para-test/software/deepmd-kit/source/build

cmake -DUSE_CUDA_TOOLKIT=true -DTENSORFLOW_ROOT=$tensorflow_root -DCMAKE_INSTALL_PREFIX=$deepmd_root ..

直接用gcc的make进行编译即可,j后面的数字代表你使用登录节点cpu的数目,例如南科大太乙的的登录节点是72核,我们使用40核进行编译(目的是不拖慢大家在登录节点的速度。)

make -j40 && make install
make lammps

cp -r USER-DEEPMD/ /work/para-test/apps/lammps-29Oct20/src

至此结束,生成的USER-DEEPMD拷贝到lammps中的src,等待make。

第三:lammps的下载与c++库建立链接、编译。

进入src目录

cd   /work/para-test/apps/lammps-29Oct20/src

加载intel以及mpi的module,建议使用较新版本

module load intel/2020.4
module load mpi/intel/2020.4

这步骤将官网的更新包自动加入编译,加入之后,运行速度比不加快1倍,亲测。

make lib-kim args="-b -a everything"

之后加入deepmd模块进行makelist

make yes-user-deepmd
make yes-kspace
make yes-user-intel

利用mpi或者intel_cpu_intelmpi进行正式编译

make intel_cpu_intelmpi -j72

至此会生成lmp或者intel_lmp文件,编写提交脚本之后(请不要私信询问如何写提交作业脚本问题),可以得到deepmd内嵌的lammps。该版本lammps可以直接使用deepmd训练出来的势函数.pb文件,具体用法不再此赘述。

如有在编译过程中遇到细节问题,欢迎电邮本人 wangjiaao0720@utexas.edu

Jia’ao WANG

22:34 2021-04-22 于南方科大工学院

Deep MD 基于 机器学习 方法 可以训练自己需要的势函数,解决了没有势函数的难题,详细的原理后面会陆续介绍。训练势函数主要使用 Deep MD -kit,因此,本文主要介绍ubuntu系统下 Deep MD -kit的安装。 windows安装 安装分为三步: 下载安装包, lammps , lammps -mpi,mpich2,这里的安装包是64位的,32位对应的包去上面提到的网站去下载对应的包。 lammps 的包可以选择较新的版本来安装。 双击安装,注意第三个包是为 lammps 运行提供一些基本文件的,假如第三个不安装会提示dll文件缺失,从而无法运行。 检查运行,在shell命令行中运行lmp_mpi,假如没有报错就表明没有问题。 linux安装(centos7) linux下暂时未使用 利用命令行安装 首先安装对 也就是要按照我上面的顺序来 按e键后,要再按i键后再进行粘贴,确保显示了export而非rt。1、老板让装一下 Deep MD ,说是今后会用到,然后我开始再在网上找教程开始装了,完全新手上路。(当然不同人路径不一样)” 我始终实现不了,小白第一次接触,后来去学了vim编辑器的使用 方法 。常用的几个操作:首先E键进入编辑,然后i键进入编辑模式 显示插入,这个时候就可以修改了。修改完后,Esc键退出编辑模式,在输入:wq命令回车后即可实现保存后退出。然后再设置环境变量那里卡了很久。原帖中:编辑profile。 2021-03-15 By Junwu Chen 参考教程:http://t.cn/A6tmS3Aw 随着时间的变更, lammps 版本提升、 编译 器更新等原因,本教程可能不会完全适用 1. 下载 lammps 最新稳定版源码包(可自行下载需要的版本的源码包:官方;github) wget方式下载: wget https:// lammps .sandia.gov/tars/ lammps -stable.tar.gz --no-check-certific 最近由于需要重新使用 Deep MD ,实验室服务器又崩了,/opt /home阵列全完蛋了,只能在自己的机器上进行重新安装。 Deep MD 是由Wang等人开发的 机器学习 MD 工具包,其github地址如下: https://github.com/ deep modeling/ deep md -kit/ 我使用了 Deep MD 官方推荐的conda 方法 安装,不得不说conda真是神器,安装早期版本的时候跳了一万次坑。 此处选用GPU版本,推荐conda虚拟环境,所有需要GPU的包都强烈建议使用虚拟环境运行,一面出现差错。此处我 2019年10月24日(UTC-4)微信公众号近日,我已经通过conda-build[1]构建了 deep md -kit(含 lammps 模块)的conda packges[2],并用constructor[3]打包了离线安装包。下介绍安装 方法 及注意事项:一、conda安装安装conda后,使用以下命令安装GPU版:=*将gpu改为cpu即可安装CPU版:=*如需指定版本,需将两个等号中间的*号改为版本...