一周前我们分享了
在Ubuntu下在线安装DeepMD-kit
,但是有一些服务器或者集群是无法连接外网的,因此很有必要掌握离线安装DeePMD-kit的方法。
本课题组的集群装的Centos7系统,离线,GCC版本是4.8.5。
主要参考资料[安装deepmd]和[源码安装TensorFlow]
https://blog.csdn.net/xszyqbr/article/details/82961934
https://github.com/deepmodeling/deepmd-kit/blob/master/doc/install-tf.1.12.md
本教程适合无法连网的Ubuntu和Centos主机以及集群。太老的集群不要考虑装了,因为bazel依赖
GLIBC_2.14
和
GLIBCXX_3.4.19
,如果gcc版本和glibc版本过低,可以考虑先升级一波。本教程所有用的文件可以在链接:
https://pan.baidu.com/s/1XL00f32OxtWbRkQQq1arYw
提取码:qfmd 下载,包含用到的所有文件。
离线安装必须的工具
安装 cmake
#从cmake官网下载cmake-3.15.3.tar.gz,并上传到服务器
tar -zxvf cmake-3.15.3.tar.gz
cd cmake-3.15.3/
#指定一个安装目录,比如${DeePMDkitHOME}/pre-tools/cmake
#这里我指定DeePMDkitHOME为/public/software/apps/DeePMD-kit,根据自己的实际目录更改
export DeePMDkitHOME=/public/software/apps/DeePMD-kit
mkdir -p ${DeePMDkitHOME}/pre-tools
./configure --prefix=${DeePMDkitHOME}/pre-tools/cmake
gmake && gmake install
#加入环境变量
export PATH=${DeePMDkitHOME}/pre-tools/cmake/bin:$PATH
#在我的系统 这样安装的cmake报openssl错误,可以直接使用以下版本的二进制cmake
tar -zxvf cmake-3.15.3-Linux-x86_64.tar.gz
mv cmake-3.15.3-Linux-x86_64 ${DeePMDkitHOME}/pre-tools
export PATH=${DeePMDkitHOME}/pre-tools/cmake-3.15.3-Linux-x86_64/bin:$PATH
安装 autoconf
#从http://ftp.gnu.org/gnu/autoconf/ 下载 autoconf-2.69.tar.gz
tar -zxvf autoconf-2.69.tar.gz
cd autoconf-2.69
#指定一个安装目录,比如${DeePMDkitHOME}/pre-tools/autoconf
./configure --prefix=${DeePMDkitHOME}/pre-tools/autoconf
make && make install
#加入环境变量
export PATH=${DeePMDkitHOME}/pre-tools/autoconf/bin:$PATH
cd ../
安装 automake
#从http://ftp.gnu.org/gnu/automake/ 下载 automake-1.14.tar.gz
tar -zxvf automake-1.14.tar.gz
cd automake-1.14
./bootstrap.sh
#指定一个安装目录,比如${DeePMDkitHOME}/pre-tools/automake
./configure --prefix=${DeePMDkitHOME}/pre-tools/automake
make && make install
#加入环境变量
export PATH=${DeePMDkitHOME}/pre-tools/automake/bin:$PATH
cd ../
安装 libtool
#从http://ftp.gnu.org/gnu/libtool/ 下载 libtool-2.4.6.tar.gz
tar -zxvf libtool-2.4.6.tar.gz
cd libtool-2.4.6
#指定一个安装目录,比如${DeePMDkitHOME}/pre-tools/libtool
./configure --prefix=${DeePMDkitHOME}/pre-tools/libtool
make && make install
#加入环境变量
export PATH=${DeePMDkitHOME}/pre-tools/libtool/bin:$PATH
export LIBRARY_PATH=${DeePMDkitHOME}/pre-tools/libtool/lib:$LIBRARY_PATH
cd ../
安装JAVA环境
下载Openjdk,并设置JAVA_HOME变量
#从https://download.java.net/java/GA/jdk13/5b8a42f3905b406298b72d750b6919f6/33/GPL/openjdk-13_linux-x64_bin.tar.gz下载 openjdk二进制版本
tar -zxvf openjdk-13_linux-x64_bin.tar.gz
#移动到指定的安装目录,比如${DeePMDkitHOME}/pre-tools/
mv jdk-13 ${DeePMDkitHOME}/pre-tools
#配置openjdk环境变量
export JAVA_HOME=${DeePMDkitHOME}/pre-tools/jdk-13
export PATH=$JAVA_HOME/bin:$PATH
安装bazel,必须安装0.15.0及以上版本
使用预编译好的
0.15.0
版本的bazel二进制版本(https://blog.csdn.net/darkrabbit/article/details/81262556)。注:将sh文件上传到集群可能会出现问题,可以打包成ZIP再上传
unzip bazel-0.15.0-installer-linux-x86_64.zip
#指定一个安装目录,比如${DeePMDkitHOME}/pre-tools/bazel
bash bazel-0.15.0-installer-linux-x86_64.sh --prefix=${DeePMDkitHOME}/pre-tools/bazel
#加入环境变量
export PATH=${DeePMDkitHOME}/pre-tools/bazel/bin:$PATH
离线安装Anaconda3.5
按照(https://blog.csdn.net/xszyqbr/article/details/82961934)安装Anaconda,并加入到环境变量。`unzip Anaconda3-5.0.1-Linux-x86_64.zip && bash Anaconda3-5.0.1-Linux-x86_64.sh`,此版本的python为Python3.6.
使用该环境下的pip离线安装适配Python3.6的tensorflow,
tensorflow-1.12.0-cp36-cp36m-manylinux1_x86_64.whl
,还需装各种依赖库。
安装依赖库,在
needed_python_package
文件夹下。
cd needed_python_package
pip install Keras_Preprocessing-1.0.5-py2.py3-none-any.whl
pip install Keras_Applications-1.0.6-py2.py3-none-any.whl
tar -zxvf absl-py-0.1.8.tar.gz
cd absl-py-0.1.8
python setup.py install
cd ../
pip install protobuf-3.6.1-cp36-cp36m-manylinux1_x86_64.whl
pip install grpcio-1.8.6-cp36-cp36m-manylinux1_x86_64.whl
pip install astor-0.7.1-py2.py3-none-any.whl
tar -zxvf termcolor-1.1.0.tar.gz
cd termcolor-1.1.0/
python setup.py install
cd ../
tar -zxvf gast-0.2.0.tar.gz
cd gast-0.2.0/
python setup.py install
cd ../
tar -zxvf Markdown-2.6.8.tar.gz
cd Markdown-2.6.8/
python setup.py install
cd ../
pip install tensorboard-1.12.0-py3-none-any.whl
pip install tensorflow-1.12.0-cp36-cp36m-manylinux1_x86_64.whl
下载tensorflow源码,安装tensorflow的C++接口
打开https://github.com/tensorflow/tensorflow,点击
Branch:master
,
tages
,选择
v1.12.0
版本,页面刷新后,选择
Clone or download
下载ZIP,并上传到服务器。
解压
tensorflow-master.zip
,
unzip tensorflow-1.12.0.zip
cd tensorflow-1.12.0
./configure
,有较多的选项,首先给出Python的路径,其他的配置参考博客(https://blog.csdn.net/yhily2008/article/details/79967118)。
Bazel需要很多第三方依赖,这些是编译必须的,这里我们提前用联网的机器下好,并上传到服务器上,并在服务器上开启一个网络下载服务,另外还需将tensorflow里原来的下载地址更改为本地下载地址。我做了一个压缩包forDeePMD-kit.zip。解压后在文件夹下有个开启下载服务的
download_local.py
脚本和更新后的
tensorflow1.12.0
文件夹以及含有所有第三方依赖的
dependency
文件夹。
tensorflow1.12.0
主要更新了三个文件,/tensorflow-1.12.0/WORKSPACE,/tensorflow-1.12.0/tensorflow/workspace.bzl以及/tensorflow-1.12.0/third_party/icu/workspace.bzl。在含有
download_local.py
文件的目录执行以下命令:
nohup python download_local.py > download_local.log 2>&1 &
。在后台使用
flask
框架开启一个
WEB
下载服务,上述安装的
Anaconda
版本的
python3.6
中包含了
flask
。
使用bazel 编译tensorflow,可以控制编译时的所用资源 等待非常久的时间
bazel build -c opt --verbose_failures //tensorflow:libtensorflow_cc.so
,安装完成后可以执行命令
fg
并按
Crtl+C
停止之前开的下载服务。
设置tensorflow的主安装目录,我装在目录
${DeePMDkitHOME}/tensorflow_root
下
export tensorflow_root=${DeePMDkitHOME}/tensorflow_root
mkdir -p ${tensorflow_root}
在当前目录下下载tensorflow的依赖文件:Protobuf, Eigen, nsync and absl
Protobuf
#设置在${tensorflow_root}目录下新建tmps文件夹用于放置中间文件
mkdir -p ${tensorflow_root}/tmps
mkdir -p ${tensorflow_root}/tmps/proto
#这里已经将/tensorflow/contrib/makefile/download_dependencies.sh中要下载的文件都下载好了,在tensorflow/contrib/makefile/downloads中。
cd tensorflow/contrib/makefile/downloads/protobuf/
#由于我们的libtool和autoconf是另外从头编译的,autoconf不知道libtool的宏文件放在哪里,因此需要将宏目录传入编译的include
#libtool的宏目录是${DeePMDkitHOME}/pre-tools/libtool/share/aclocal
#需根据自己的实际目录将autogen.sh中的autoreconf -f -i -Wall,no-obsolet 改成 autoreconf -f -i -Wall,no-obsolet -I${DeePMDkitHOME}/pre-tools/libtool/share/aclocal
./autogen.sh
./configure --prefix=${tensorflow_root}/tmps/proto
make
make install
Eigen
mkdir -p ${tensorflow_root}/tmps/eigen
cd ../eigen
mkdir build_dir
cd build_dir
cmake -DCMAKE_INSTALL_PREFIX=${tensorflow_root}/tmps/eigen/ ../
make install
nsync
mkdir -p ${tensorflow_root}/tmps/nsync
cd ../../nsync
mkdir build_dir
cd build_dir
cmake -DCMAKE_INSTALL_PREFIX=${tensorflow_root}/tmps/nsync/ ../
make
make install
absl
cd ../../absl
bazel build
mkdir -p ${tensorflow_root}/include/
sudo rsync -avzh --include '*/' --include '*.h' --exclude '*' absl ${tensorflow_root}/include/
cd ../../../../..
将以上库文件拷贝到tensorflow的安装目录
mkdir -p ${tensorflow_root}/lib
cp bazel-bin/tensorflow/libtensorflow_cc.so ${tensorflow_root}/lib/
cp bazel-bin/tensorflow/libtensorflow_framework.so ${tensorflow_root}/lib/
cp ${tensorflow_root}/tmps/proto/lib/libprotobuf.a ${tensorflow_root}/lib/
cp ${tensorflow_root}/tmps/nsync/lib/libnsync.a ${tensorflow_root}/lib/
#可能是nsync/lib64/libnsync.a
然后拷贝头文件
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 ${tensorflow_root}/tmps/proto/include/* ${tensorflow_root}/include
cp -r ${tensorflow_root}/tmps/eigen/include/eigen3/* ${tensorflow_root}/include
cp -r ${tensorflow_root}/tmps/nsync/include/*h ${tensorflow_root}/include
清理头文件目录下的源文件
cd ${tensorflow_root}/include
find . -name "*.cc" -type f -delete
可以删除所有依赖的缓存文件
rm -fr ${tensorflow_root}/tmps/eigen ${tensorflow_root}/tmps/nsync ${tensorflow_root}/tmps/proto
安装DeePMD-kit
先在${tensorflow_root}的上级目录克隆DeePMD-kit源码
cd ${tensorflow_root} && cd ../
unzip deepmd-kit-master.zip
通过
deepmd_source_dir
变量记录源代码的位置
cd deepmd-kit-master
export deepmd_source_dir=`pwd`
cd ${deepmd_source_dir}/source
mkdir build
cd build
设置deepmd-kit的主安装目录,我装在用户目录
${DeePMDkitHOME}/deepmd_root
下,执行cmake,
export deepmd_root=${DeePMDkitHOME}/deepmd_root
mkdir -p ${deepmd_root}
#如果用gcc>5.0 去掉选项-DTF_GOOGLE_BIN=true,如果运行时出现deepmd-kit/lib/deepmd/libop_abi.so: undefined symbol:请打开选项-DTF_GOOGLE_BIN=true
cmake -DTF_GOOGLE_BIN=true -DTENSORFLOW_ROOT=${tensorflow_root}
-DCMAKE_INSTALL_PREFIX=${deepmd_root} ..
如果cmake执行成功,make以及make install
make clean
make
#如果你的GCC版本小于4.9,编译时json会报错。所以需要把${DeePMDkitHOME}/forDeePMD-kit/deepmd-kit-master/source/3rdparty/json.hpp 的 //#error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" 报错命令注释掉。我的版本是GCC4.8.5,官网上json最低支持就是gcc4.8.5,因此注释没有关系。
make install
如果一切顺利的话,你将在
$deepmd_root/bin
目录下找到以下可执行文件
$ ls ${deepmd_root}/bin
dp_frz dp_ipi dp_test dp_train
#可以加入系统PATH
echo 'export PATH='${deepmd_root}'/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
至此DeePMD-kit的安装方法已经介绍完毕,后面的教程可能会讲解一些软件的用法和DPGEN(The deep potential generator,https://github.com/deepmodeling/dpgen)工具。