深度学习 AMI
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

TensorFlow Serving

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

tensorflow-serving-api 会随 采用 Conda 的 Deep Learning AMI 一起预安装! 您将在 ~/examples/tensorflow-serving/ 中找到一个用于训练、导出和处理 MNIST 模型的示例脚本。

要运行这些示例中的任一示例,请先连接到您的 采用 Conda 的 Deep Learning AMI 并激活 Python 2.7 TensorFlow 环境。该示例脚本不与 Python 3.x 兼容

$ source activate tensorflow_p27

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

$ cd ~/examples/tensorflow-serving/

处理预训练的 Inception 模型

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

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

  1. 下载该模型。

    $ curl -O https://s3-us-west-2.amazonaws.com/aws-tf-serving-ei-example/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/SERVING_INCEPTION/SERVING_INCEPTION --port=9000
  5. 对于在前台运行的服务器,您将需要启动另一个终端会话才能继续。打开新的终端并使用 source activate tensorflow_p27 激活 TensorFlow。然后,使用您的首选文本编辑器创建具有以下内容的脚本。将它命名为 inception_client.py。此脚本将映像文件名用作参数,并从预训练模型中获得预测结果。

    from __future__ import print_function import grpc import tensorflow as tf from tensorflow_serving.apis import predict_pb2 from tensorflow_serving.apis import prediction_service_pb2_grpc tf.app.flags.DEFINE_string('server', 'localhost:9000', 'PredictionService host:port') tf.app.flags.DEFINE_string('image', '', 'path to image in JPEG format') FLAGS = tf.app.flags.FLAGS def main(_): channel = grpc.insecure_channel(FLAGS.server) stub = prediction_service_pb2_grpc.PredictionServiceStub(channel) # Send request with open(FLAGS.image, 'rb') as f: # See prediction_service.proto for gRPC request/response details. data = f.read() request = predict_pb2.PredictRequest() request.model_spec.name = 'inception' request.model_spec.signature_name = 'predict_images' request.inputs['images'].CopyFrom( tf.contrib.util.make_tensor_proto(data, shape=[1])) result = stub.Predict(request, 10.0) # 10 secs timeout print(result) print("Inception Client Passed") if __name__ == '__main__': tf.app.run()
  6. 现在,运行将服务器位置和端口以及哈士奇照片的文件名作为参数传递的脚本。

    $ python 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 网站

您也可以将 TensorFlow Serving 与 (EI) 结合使用。请查看有关如何将 Elastic Inference 与 TensorFlow 结合使用的指南以了解更多信息。