公司服务器无法直接连接外网,所以只能在本地进行下载或者变编译后,上传服务器,实现tensorflowserving的离线安装。本安装方法适用于centos、RHEL系统,建议使用最新版操作系统,避免后续升级gcc或者安装各种最新插件的烦恼。
https://pypi.org/上下载最新版grpcio安装所需插件,下载完成后上传服务器安装即可,具体可根据grpcio(下载源码包)中setup.py中的可知,或者根据pip在本地机器的安装记录就可获得:
sudo python -m pip install grpcio
Collecting grpcio
Downloadinghttps://files.pythonhosted.org/packages/0d/54/b647a6323be6526be27b2c90bb042769f1a7a6e59bd1a5f2eeb795bfece4/grpcio-1.11.0-cp27-cp27mu-manylinux1_x86_64.whl(8.7MB)
100% |████████████████████████████████| 8.7MB 55kB/s
Requirement already satisfied:six>=1.5.2 in /usr/lib/python2.7/site-packages (from grpcio)
Collecting protobuf>=3.5.0.post1 (fromgrpcio)
Downloadinghttps://files.pythonhosted.org/packages/9d/61/54c3a9cfde6ffe0ca6a1786ddb8874263f4ca32e7693ad383bd8cf935015/protobuf-3.5.2.post1-cp27-cp27mu-manylinux1_x86_64.whl(6.4MB)
100% |████████████████████████████████| 6.4MB 102kB/s
Collecting futures>=2.2.0 (from grpcio)
Downloadinghttps://files.pythonhosted.org/packages/2d/99/b2c4e9d5a30f6471e410a146232b4118e697fa3ffc06d6a65efde84debd0/futures-3.2.0-py2-none-any.whl
Requirement already satisfied:enum34>=1.0.4 in /usr/lib/python2.7/site-packages (from grpcio)
Requirement already satisfied: setuptoolsin /usr/lib/python2.7/site-packages (from protobuf>=3.5.0.post1->grpcio)
Installing collected packages: protobuf,futures, grpcio
Successfully installed futures-3.2.0grpcio-1.11.0 protobuf-3.5.2.post1
在https://copr.fedorainfracloud.org/coprs/vbatts/bazel/中下载对应版本的repo文件,并拷贝到/etc/yum.repos.d/.中,该机器需有网络,使用命令
yum install –downloadonly bazel,
就可以下载bazel的 rpm软件,缓存在/var/cache/yum目录下的子文件夹里,比如我的机器是在/var/cache/yum/x86_64/7/vbatts-bazel/packages下,将bazel-0.12.0-1.el7.centos.x86_64.rpm拷贝出来,上传服务器,直接在当前目录下,
yum install bazel-0.12.0-1.el7.centos.x86_64.rpm
即可实现安装,或者放置在服务器的yum缓存目录使用命令
yum -C install packetName
进行安装
确保当前机器有网络,拷贝github程序:
git clone --recurse-submoduleshttps://github.com/tensorflow/serving
cd serving
使用bazel下载编译所需插件:
bazel fetch tensorflow_serving/...
注意这里有三个点,下载的程序并非放在当前文件夹下,而是在/root/.cache/bazel/(应该跟用户有关,观察下载时的日志即可定位到下载文件夹)下的子目录中,比如我的目录:
/root/.cache/bazel/_bazel_ethansheng/7c7ba1fef06177718927526275ae1387/external
将external目录zip压缩后导出(压缩后不到2g),与git下载的serving文件夹一起上传到服务器对应目录下,执行编译和测试:
bazel build -c opt tensorflow_serving/...
bazel test -c opt tensorflow_serving/...
编译耗时跟机器性能有关,服务器应该花费不了多久。
还有一种方法就是本地使用与服务器相同的操作系统,编译完成后将编译完的文件上传服务器,这种方式应该也行得通,懒得去测试了。