Tensorflow serving的源码编译安装(成功编译安装)

一. 总论

说到Tensoflow serving的编译安装,真的是一把鼻涕一把泪。前前后后折腾了一个星期。在这期间参考了同行的做法,自己也在不断地摸索尝试。本文的第一作者是我的直属领导亮总(一位经常穿西装的绅士),本人在亮总的操作文档上进行改良使Tensorflow serving能安装成功。
遇到的困难:Tensoflow serving的版本和源码在不断更新,之前成功编译安装的版本在一段时间后,由于github上的Tensoflow serving的源码的更新,变得编译安装不成功。即使是执行官网提供的编译安装指令也无法成功编译安装。
解决方案:自己手动匹配bazel,Tensorflow与Tensoflow serving的版本.
本文所用的软件版本和操作系统:
(1) Python3.6.4
(2) Pip3
(3) Tensorflow1.13.1
(4) Bazel-0.23-1.
(5) Binutils2.25
(6) 操作系统:Centos7
Linux version 3.10.0-327.el7.x86_64 ([email protected]) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) #1 SMP Thu Nov 19 22:10:57 UTC 2015

二. Tensoflow的安装

安装Python3.6.4
(用yum安装依赖包)
yum install –y openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc gcc-c++ openssl-devel libffi-devel zlib*
wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz
tar xvf Python-3.6.4.tgz
cd Python-3.6.4
./configure --prefix=/usr/python
make
make install
ln -s /usr/python/bin/python3 /usr/bin/python3(创建软连接)

安装pip3
wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py
如果找不到pip3,把/usr/python/bin加到环境变量PATH里

安装TensorFlow1.13.1
pip3 install -v tensorflow==1.13.1

切换到python3
mv /usr/bin/python /usr/bin/python.bak
ln -s /usr/bin/python3 /usr/bin/python

验证TensorFlow是否可用
输入python进入shell
import tensorflow as tf
一般会遇到抛错
常见问题1:需要升级glibc到2.17
如何查看glibc版本:strings /lib64/libc.so.6 |grep GLIBC_
常见问题1:需要升级glibc到2.17
如何查看glibc版本:strings /lib64/libc.so.6 |grep GLIBC_
Tensorflow serving的源码编译安装(成功编译安装)_第1张图片

具体步骤如下:
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-2.17-55.el6.x86_64.rpm
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-common-2.17-55.el6.x86_64.rpm
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-devel-2.17-55.el6.x86_64.rpm
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-headers-2.17-55.el6.x86_64.rpm
rpm -Uvh glibc-2.17-55.el6.x86_64.rpm
glibc-common-2.17-55.el6.x86_64.rpm
glibc-devel-2.17-55.el6.x86_64.rpm
glibc-headers-2.17-55.el6.x86_64.rpm --force --nodeps

常见问题2:需要升级gcc到4.8.3
Tensorflow serving的源码编译安装(成功编译安装)_第2张图片

具体步骤如下:
wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.3/gcc-4.8.3.tar.gz
tar -zxvf gcc-4.8.3.tar.gz
cd gcc-4.8.3
./contrib/download_prerequisites 
mkdir build
cd build
yum -y install gcc-c++
…/configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
make && make install
cp ./stage1-x86_64-unknown-linux-gnu/libstdc+±v3/src/.libs/libstdc++.so.6.0.19 /usr/lib64
cd /usr/lib64
rm -f /usr/lib64/libstdc++.so.6
ln -s libstdc++.so.6.0.19 libstdc++.so.6

测试TensorFlow:
$ python

import tensorflow as tf
hello = tf.constant(‘Hello World!’)
with tf.Session() as sess:
output = sess.run(hello)
print(output)
成功应该会输出Hello world,安装成功。

三. Tensorflow serving的源码编译安装

安装gRPC
pip3 install grpcio

安装bazel
Wget https://copr-be.cloud.fedoraproject.org/results/vbatts/bazel/epel-7-x86_64/00864426-bazel/bazel-0.23.1-1.el7.x86_64.rpm
yum install bazel-0.23.1-1.el7.x86_64.rpm -y

升级git到2.6.2(因为Git版本太低的话,没有–recurse-submodules这个option)
wget https://www.kernel.org/pub/software/scm/git/git-2.6.2.tar.gz
tar –xvf git-2.6.2.tar.gz
cd git-2.6.2
make prefix=/usr/local/git all
make prefix=/usr/local/git install
将/usr/local/git/bin加入到环境变量PATH中
git –version 查看下版本号

升级binutils到2.25
http://ftp.gnu.org/gnu/binutils/binutils-2.25.1.tar.bz2
tar -xjf binutils-2.25.1.tar.bz2
cd binutils-2.25.1
./configure --prefix=/usr
make
make install
as –version //查看版本号

安装TensorFlow serving
git clone --recurse-submodules https://github.com/tensorflow/serving
cd serving
bazel --output_user_root=/opt/bazel build --define with_hdfs_support=true -c opt tensorflow_serving/… --incompatible_disallow_data_transition=false

编译中应该会遇到一些问题:
常见问题1:No module named [模块名],pip3 install [模块名] 就可以了(大致有2-3个是这种总情况)
常见问题2:ModuleNotFoundError: No module named ‘StringIO’
bazel对python3的支持问题https://github.com/bazelbuild/bazel/issues/1580
具体处理:
将附件里的make_deb.py替换报错的文件。
由于bazel对更新文件有检查机制。需要修改此文件的mtime。
stat -c %Y [某个bazel的文件,报错文件的同目录文件随便找一个] //获取时间
touch -m -t [yyyymmdd] make_deb.py //修改mtime与其他文件一致
然后继续编译

常见问题3:pip3 AttributeError: ‘_NamespacePath’ object has no attribute ‘sort’
解决方法:pip3 install tensorflow-serving-api

四. 验证编译安装是否成功

(1)Find /opt -name model_servers
在这里插入图片描述
(2)cd /opt/bazel/a7f87da91eb96619a4a06166e85ddea6/execroot/
tf_serving/bazel-out/k8-opt/bin/tensorflow_serving/model_servers
(3) ./tensorflow_model_server --version
在这里插入图片描述

五. 总结

Tensorfow serving的安装最好能遵从官网的指导安装使用docker安装,那样方便快捷少折腾。若实际安装有特殊要求,可以使用本文所描述的方法安装Tensorflow serving。
本文已编译安装成功的tensorflow serving包
https://download.csdn.net/download/fenbo2013/11166347

参考文档:
https://github.com/tensorflow/serving
https://github.com/bazelbuild/bazel/releases/tag/0.23.1
https://copr-be.cloud.fedoraproject.org/results/vbatts/bazel/epel-7-x86_64/

你可能感兴趣的:(Tensorflow)