c++调用tensorflow2.x训练结果()
注:
- 本来想着用Tensorflow2.x训练模型,然后用C++去调用模型进行预测.后来计划有变,于是只完成了编译tensorflow生成.so文件.至于后续怎么用C++调用就没有去研究了.
- 本文说明的是2.x版本的tensorflow的编译,其他版本的编译类似.1.x应该也是.只是编译需要的库的版本不一致.不过版本不一致在编译的过程中会有提示,按着提示安装对应版本的库就行了.
整个的安装过程是从0开始的,也就是从一个全新的Linux进行的.会安装所有用到的软件.
整个的环境:
- Centos 7.6
- 12G内存
- 6核处理器
- 200G硬盘大小
其中:
-
12G内存是因为编译tensorflow这玩意儿太耗内存,我6G的时候在执行命令 (
bazel build --config=opt //tensorflow:libtensorflow_cc.so
) 的时候会报错直接退出.报错内容大概长下面这样:fatal error: Killed signal terminated program cc1plus Exit(1)
-
6核处理器这里,其实4核差不多就够用了.
-
200G硬盘大小.实际上用不到200G.但是我估计安全起见怎么说也得弄个50G吧.我只是偷懒直接弄了200G.这里是因为我在这个过程中遇到的坑.一开始我只分配了20G给虚拟机.然后也能编译完成,但是!!! 后续配置一系列环境等其他操作的时候,很难受的发现磁盘空间都占满了(不确定是哪里的问题).然后尝试扩容,历经九九八十一难最后放弃(什么逻辑卷,物理卷的,扩展逻辑卷,然后虚拟机好像又没弄逻辑卷什么什么的.反正很头疼).所以最好保证你的虚拟机分配50G以上.
首先安装一些必要的环境
1.安装gcc8.5
- 首先安装依赖
yum install m4
yum install -y glibc-headers gcc-c++
yum install zlib-devel.x86_64
- 安装gcc8.5
wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-8.5.0/gcc-8.5.0.tar.gz
tar -zxvf gcc-8.5.0.tar.gz
cd gcc-8.5.0/
- 进入gcc以后,先修改一个配置文件,不然有些东西下载起来很慢.
vim ./contrib/download_prerequisites
- 将其中的base_url修改为:
base_url='http://www.mirrorservice.org/sites/sourceware.org/pub/gcc/infrastructure/'
- 修改完成后保存并关闭,然后执行下面的语句
./contrib/download_prerequisites
mkdir build
cd build
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
6.上述步骤完成后,编译并安装gcc,编译大概半小时.安装比较快,几分钟.安装完成后输入gcc -v
可以看到gcc版本已经变了.
make -j 4 && make install
2.安装python3.7
- 下载安装
yum install libffi-devel -y
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
tar -zxvf Python-3.7.0.tgz
cd Python-3.7.0
./configure
make&&make install
- 环境配置
mv /usr/bin/python /usr/bin/python.bak
ln -s /usr/local/bin/python3 /usr/bin/python
ln -s /usr/local/bin/pip3 /usr/bin/pip
3.修改配置文件
分别执行vi /usr/libexec/urlgrabber-ext-down
和vi /usr/bin/yum
,将这两个文件的第一行:#!/usr/bin/python
修改为#!/usr/bin/python2.7
3.下载安装future
点击下载下载future-0.18.2.tar.gz然后上传到服务器
上传完毕后执行下面的命令
tar -zxvf future-0.18.2.tar.gz
cd future-0.18.2/
python setup.py install
4. 其他依赖
- 编译最开始先执行一条命令,这条命令是因为后续编译的过程中没有Numpy会报ModuleNotFoundError.我目前记得好像只需要安装这一个,如果报了其他ModuleNotFoundError,对应的安装一下就行了.
yum install numpy
- 注意,这里可以执行一下
java -version
命令看看现在虚拟机是否有JDK环境了.这里应该会显示JDK8.后续安装后用到JDK,如果没有的话安装一下.
5.Bazel安装
- 安装
wget https://copr.fedorainfracloud.org/coprs/vbatts/bazel/repo/epel-7/vbatts-bazel-epel-7.repo
mv vbatts-bazel-epel-7.repo /etc/yum.repos.d/
yum install bazel4
- 执行
bazel version
查看bazel版本,这里应该是4.1.0版本的
关于Bazel的话,不同版本的tensorflow有不同版本的要求.如果版本不符合要求,它会有提示的,告诉你要求的版本是多少.(怎么下载任意版本的bazel我还不是摸得很清楚.yum install bazel3
下的是3.x版本的.yum install bazel
下载的是1.x版本的,)
6. tensorflow下载编译
点击下载拉倒页面最下面,下载tensorflow源码包,下载tar.gz格式的.
tar -zxvf tensorflow-2.3.0.tar.gz
cd tensorflow-2.3.0/
./configure
configure执行的过程中,一直回车就行了.其他不用管(这里安装的是CPU版的,其他版的在这里需要设置一下,具体没研究).
这里会出现一个错误,这个错误会给你一个提示的命令,把它执行一遍就行了.
cd "/usr/bin" && curl -fLO https://releases.bazel.build/3.7.2/release/bazel-3.7.2-linux-x86_64 && chmod +x bazel-3.7.2-linux-x86_64
最后,先重启一遍虚拟机,然后再执行以下命令.不重启的话有些东西它会找不到.
yum install git
export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH
bazel build --config=opt //tensorflow:libtensorflow_cc.so
bazel build -c opt --verbose_failures //tensorflow:libtensorflow_framework.so
安装git,git用于接下来的命令要通过git下载东西.
export命令好像是暂时的,意思是如果重启了.需要重新export一次,然后再执行bazel命令.
第一个bazel比较慢,要编译8000+文件,好像大概要2.3个小时.第二个就2000+文件,相对快点.
编译完成后将在tensorflow/bazel_bin/tensorflow文件夹中出现libtensorflow_cc.so和libtensorflow_framework.so两个文件.