TensorFlow Serving - 深度学习 AMI
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

TensorFlow Serving

TensorFlow Serving 是一个用于机器学习模型的灵活、高性能的服务系统。

这些区域有:tensorflow-serving-api在带有 Conda 的深度学习 AMI 中预安装!您将在 ~/examples/tensorflow-serving/ 中找到一个用于训练、导出和处理 MNIST 模型的示例脚本。

要运行这些示例中的任一示例,请先使用 Conda 连接到您的深度学习 AMI 并激活 TensorFlow 环境。

$ source activate tensorflow_p37

现在,将目录更改至服务示例脚本文件夹。

$ cd ~/examples/tensorflow-serving/

处理预训练的 Inception 模型

以下是您可尝试为不同的模型(如 Inception)提供服务的示例。作为一般规则,您需要将可维护模型和客户端脚本下载到您的 DLAMI。

使用 Inception 模型处理和测试推理

  1. 下载该模型。

    $ curl -O https://s3-us-west-2.amazonaws.com/tf-test-models/INCEPTION.zip
  2. 解压缩模型。

    $ unzip INCEPTION.zip
  3. 下载一张哈士奇的照片。

    $ curl -O https://upload.wikimedia.org/wikipedia/commons/b/b5/Siberian_Husky_bi-eyed_Flickr.jpg
  4. 启动服务器。请注意,对于 Amazon Linux,您必须将用于 model_base_path 的目录从 /home/ubuntu 更改为 /home/ec2-user

    $ tensorflow_model_server --model_name=INCEPTION --model_base_path=/home/ubuntu/examples/tensorflow-serving/INCEPTION/INCEPTION --port=9000
  5. 当服务器在前台运行时,您需要启动另一个终端会话才能继续。打开新的终端并使用 source activate tensorflow_p37 激活 TensorFlow。然后,使用您的首选文本编辑器创建具有以下内容的脚本。将它命名为 inception_client.py。此脚本将映像文件名用作参数,并从预训练模型中获得预测结果。

    from __future__ import print_function import grpc import tensorflow as tf import argparse from tensorflow_serving.apis import predict_pb2 from tensorflow_serving.apis import prediction_service_pb2_grpc parser = argparse.ArgumentParser( description='TF Serving Test', formatter_class=argparse.ArgumentDefaultsHelpFormatter ) parser.add_argument('--server_address', default='localhost:9000', help='Tenforflow Model Server Address') parser.add_argument('--image', default='Siberian_Husky_bi-eyed_Flickr.jpg', help='Path to the image') args = parser.parse_args() def main(): channel = grpc.insecure_channel(args.server_address) stub = prediction_service_pb2_grpc.PredictionServiceStub(channel) # Send request with open(args.image, 'rb') as f: # See prediction_service.proto for gRPC request/response details. request = predict_pb2.PredictRequest() request.model_spec.name = 'INCEPTION' request.model_spec.signature_name = 'predict_images' input_name = 'images' input_shape = [1] input_data = f.read() request.inputs[input_name].CopyFrom( tf.make_tensor_proto(input_data, shape=input_shape)) result = stub.Predict(request, 10.0) # 10 secs timeout print(result) print("Inception Client Passed") if __name__ == '__main__': main()
  6. 现在,运行将服务器位置和端口以及哈士奇照片的文件名作为参数传递的脚本。

    $ python3 inception_client.py --server=localhost:9000 --image Siberian_Husky_bi-eyed_Flickr.jpg

训练和处理 MNIST 模型

对于本教程,我们将导出模型并随后通过 tensorflow_model_server 应用程序处理它。最后,您可以使用示例客户端脚本测试模型服务器。

运行将训练和导出 MNIST 模型的脚本。作为脚本的唯一参数,您需要为其提供一个文件夹位置以保存该模型。现在,我们可以把它放入 mnist_model 中。该脚本将会为您创建此文件夹。

$ python mnist_saved_model.py /tmp/mnist_model

请耐心等待,因为此脚本可能需要一段时间才能提供输出。当训练完成并最终导出模型后,您应该看到以下内容:

Done training! Exporting trained model to mnist_model/1 Done exporting!

下一步是运行 tensorflow_model_server 以处理导出的模型。

$ tensorflow_model_server --port=9000 --model_name=mnist --model_base_path=/tmp/mnist_model

为您提供了一个客户端脚本来测试服务器。

要对其进行测试,您将需要打开一个新的终端窗口。

$ python mnist_client.py --num_tests=1000 --server=localhost:9000

更多功能和示例

如果您有兴趣了解有关 TensorFlow Serving 的更多信息,请查看 TensorFlow 网站