TensorFlow Serving裸机安装

有人说有docker为啥还裸机安装,嗯~,问的好没毛病!

  • 升级 glibc 至 2.23
  • 升级 gcc 至 5.2
  • 安装 jdk-8.0
  • 安装 bazel
  • 安装 python2.7

操作系统下TensorFlow安装说明:

1、操作系统必须是CentOS 7.0或更高版本,可以省略安装许多许多gcc、glibc等等之类的第三方库,安装升级解决冲突是一件极其麻烦的事情;

2、bazel(谷歌编译器),采用bazel-0.21.0-installer-linux-x86_64.sh安装,不要采用源代码安装,各种依赖非常非常多;执行完毕采用bazel help或bazel version查看;

3、解压TensorFlow后,执行./configure,如果不打算构建GPU版本,全部选择N即可,完成后执行bazel build -c opt (--config=cuda) //tensorflow/cc:tutorials_example_trainer,CPU版本忽略小括号内文字;

4、如果提示ERROR: error loading package '': Encountered error while reading extension file 'closure/defs.bzl': no such package '@io_bazel_rules_closure//closure': Error downloading之类的信息,需要打开外网访问端口;

5、如果提示internal compiler error: Killed之类的信息,表示内存资源不够,从经验看物理内存最小不少于8G,网上有建议打开swap,实际上使用swap会造成编译过程难以容忍的慢,而且依旧会报错,只是报错的情况延后了而已;

6、整个编译过程在8CPU、16G虚拟机下耗时将近40分钟,编译操作5500多次,并行编译将消耗所有CPU资源,因此不适合在有生产任务的服务器上操作;

7、bazel和TensorFlow的编译过程中会遇到各种各样非常非常多的依赖、缺失、升级、冲突的情况发生,问题太多情况太复杂这里就不一一列举了,只要逐一耐心解决应该都不是问题;

8、编译通过通过bazel-bin/tensorflow/cc/tutorials_example_trainer指令查看结果,如果有多行类似000000/000001 lambda = 2.000000 x = [0.894427 -0.447214] y = [1.788854 -0.894427]的输出说明构建成功;

9、TensorFlow编译是一件非常麻烦的事情,在系统间迁移,需要同时迁移tensorflow-master目录和.cache(注意这是一个隐藏目录),在保证各种依赖关系都正常的情况下,基本都能保证迁移成功;

此外:

1、yum install python-numpy swig python-dev可能不是必须的操作,具体还要看操作系统;

2、GPU版本英伟达cuda组件安装冲突需要手动逐一卸载:

** 发现 6 个已存在的 RPM 数据库问题, 'yum check' 输出如下:
ipa-admintools-4.4.0-12.el7.centos.noarch 有已安装冲突 freeipa-admintools: ipa-admintools-4.4.0-12.el7.centos.noarch
ipa-client-4.4.0-12.el7.centos.x86_64 有已安装冲突 freeipa-client: ipa-client-4.4.0-12.el7.centos.x86_64
ipa-client-common-4.4.0-12.el7.centos.noarch 有已安装冲突 freeipa-client-common: ipa-client-common-4.4.0-12.el7.centos.noarch
ipa-common-4.4.0-12.el7.centos.noarch 有已安装冲突 freeipa-common: ipa-common-4.4.0-12.el7.centos.noarch
ipa-server-4.4.0-12.el7.centos.x86_64 有已安装冲突 freeipa-server: ipa-server-4.4.0-12.el7.centos.x86_64
ipa-server-common-4.4.0-12.el7.centos.noarch 有已安装冲突 freeipa-server-common: ipa-server-common-4.4.0-12.el7.centos.noarch

3、可能需要yum -y install gcc make glibc kernel-headers kernel-devel dkms,依旧有问题尝试yum install gcc*或许能解决gcc的所有问题;

4、第一步sudo dd if=/dev/zero of=/swapfile bs=8M count=1024,第二步sudo mkswap /swapfile,第三步sudo swapon /swapfile,不保证解决内存不足的问题;

5、如果一切顺利将看到如下信息:

INFO: Elapsed time: 2174.699s, Critical Path: 327.32s
INFO: 4644 processes: 4644 local.
INFO: Build completed successfully, 5599 total actions

继续:

1、.cache隐藏路径备份后清除,貌似和TensorFlow的同名路径会有冲突,省事起见确保.cache路径下无数据;

2、bazel的安装与TensorFlow相同,强烈建议用脚本安装,不要用源代码,否则需要解决的地方会非常多;

3、谷歌RPC安装,执行命令pip install grpcio,下载安装,涉及到的组件比较多,大约耗时半小时以上;

4、执行下面的指令:

yum install -y
build-essential
curl
libcurl3-dev
git
libfreetype6-dev
libpng12-dev
libzmq3-dev
pkg-config
python-dev
python-numpy
python-pip
software-properties-common
swig
zip
zlib1g-dev

5、下载tfserver源代码,解压缩进入项目,执行:bazel build -c opt (--config=cuda) tensorflow_serving/...

      其中小括号内为GPU模式,CPU版本请忽略;

此外:

1、安装中报告Python.h文件缺失,找到python的include,将所有文件复制到系统可找到的路径下;

2、安装过程中报内存不足,磁盘不足,基本无解,编译过程是多进程并行执行的,资源开销极大;

3、在相同配置的操作系统间迁移,务必复制serving-master和.cache路径,经过实测可以运行;