模型服务的实现
下面是我们实现TensorFlow Serving部署和运行所采取的步骤:
1. 从源编译TensorFlow Serving
首先,我们需要编译源代码来产生可执行的二进制文件。然后就可以从命令行执行二进制文件来启动服务系统。
假设你已经配置好了Docker,那么一个好的开端就是使用提供的Dockerfile来编译二进制文件。请按照以下步骤:
运行该gist中的代码以构建适合编译TensorFlow Serving的docker容器。
在正在运行的docker容器中运行该gist中的代码以构建可执行二进制文件。
一旦编译完成,可执行二进制文件将在你的docker镜像的以下路径中:/work/serving/bazel-bin/tensorflow_serving/model_servers/tensorflow_model_server。
2. 运行模型服务系统
上一步生成的可执行二进制文件(tensorflow_model_server)可以部署到您的生产实例中。如果您使用docker编排框架(如Kubernetes或Elastic Container Service),您还可以在docker容器中运行TensorFlow Serving。
现在假设TensorFlow模型存储在目录/work/awesome_model_directory下的生产主机上。你可以在端口8999上使用以下命令来运行TensorFlow Serving和你的TensorFlow模型:
<path_to_the_binary>/tensorflow_model_server — port=8999 — model_base_path=/work/awesome_model_directory
默认情况下,TensorFlow Serving会每秒扫描模型基本路径,并且可以自定义。此处列出了可作为命令行参数的可选配置。
3. 从服务定义(Service Definitions)生成Python gRPC存根
下一步是创建可以在模型服务器上进行预测的gRPC客户端。这可以通过编译.proto文件中的服务定义,从而生成服务器和客户端存根来实现。.proto文件在TensorFlow Serving源码中的tensorflow_serving_apis文件夹中。在docker容器中运行以下脚本来编译.proto文件。运行提交版本号为46915c6的脚本的示例:
./compile_ts_serving_proto.sh 46915c6
运行该脚本后应该在tensorflow_serving_apis目录下生成以下定义文件:
model_pb2.py predict_pb2.py prediction_service_pb2.py
你还可以使用grpc_tools Python工具包来编译.proto文件。
4. 从远程主机调用服务
可以使用编译后的定义来创建一个python客户端,用来调用服务器上的gRPC调用。比如这个例子用一个同步调用TensorFlow Serving的Python客户端。
如果您的用例支持异步调用预测,TensorFlow Serving还支持批处理预测以达到性能优化的目的。要启用此功能,你应该运行tensorflow_model_server同时开启flag? —enable_batching。这是一个异步客户端的例子。