TensorFlow Serving 是一个用于机器学习模型 serving 的高性能开源库。它可以将训练好的机器学习模型部署到线上,使用 gRPC 作为接口接受外部调用。更加让人眼前一亮的是,它支持模型热更新与自动模型版本管理。这意味着一旦部署 TensorFlow Serving 后,你再也不需要为线上服务操心,只需要关心你的线下模型训练。
1、安装Bazel
把下面的文件放到/etc/yum.repos.d/vbatts-bazel-epel-7.repo
[vbatts-bazel]
name=Copr repo for bazel owned by vbatts
baseurl=https://copr-be.cloud.fedoraproject.org/results/vbatts/bazel/epel-7-$basearch/
type=rpm-md
skip_if_unavailable=True
gpgcheck=1
gpgkey=https://copr-be.cloud.fedoraproject.org/results/vbatts/bazel/pubkey.gpg
repo_gpgcheck=0
enabled=1
enabled_metadata=1
执行命令:
yum install bazel
yum install patch
2、安装gRPC 等包
pip install grpcio
pip install patch
pip install tensorflow
pip install tensorflow-serving-api
3、下载TensorFlow serving 源码
git clone --recurse-submodules https://github.com/tensorflow/serving
cd serving
cd tensorflow
./configure
cd ..
#构建
bazel build -c opt tensorflow_serving/...
#测试
bazel test -c opt tensorflow_serving/...
4、测试案例
导出模型
bazel方式
bazel-bin/tensorflow_serving/example/mnist_saved_model /tmp/mnist_model
python方式
需要先pip安装好tensorflow-serving-api
python tensorflow_serving/example/mnist_saved_model.py /tmp/mnist_model
部署模型
bazel-bin/tensorflow_serving/model_servers/tensorflow_model_server --port=9000 --model_name=mnist --model_base_path=/tmp/mnist_model/
测试模型
也有两种方式,bazel和python,同样bazel方式用不了
python tensorflow_serving/example/mnist_client.py --num_tests=1000 --server=localhost:9000
5、自定义模型导出代码实现过程
1、通过定义tf.app.flags标记接收命令行传递的参数
2、在main函数中编写模型训练代码和模型导出代码即可
3、在BUILD文件中添加代码的定义,格式如下
4、执行编译和导出命令、部署模型、使用客户端连接服务即可
存在问题
tensorflow serving 模型发布与代码耦合太紧;官方给出的例子只有mnist和inception两个模型;要把普通的模型发布需要写较多代码,并且文档说明也很欠缺。 附:一个lstm模型代码lstm.py和 将lstm模型导出的代码 lstm_saved_model.py ;以及调用模型服务预测的代码 lstm_client1.py