《架构师》2017年4月
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

模型服务的实现

下面是我们实现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。这是一个异步客户端的例子。