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

将 Elastic Inference 与 TensorFlow 结合使用

(EI) 仅适用于通过 Elastic Inference Accelerator 启动的实例。

查看选择 DLAMI 的实例类型以选择所需的实例类型,并查看 Elastic Inference 先决条件以了解与 Elastic Inference 相关的说明。有关如何使用 Elastic Inference Accelerator 启动 DLAMI 的详细说明,请参阅 文档。

TensorFlow Serving 是 EI 支持的唯一推理模式。不支持预测器和估算器。如果您之前未试用过 TensorFlow Serving,建议您先试用 TensorFlow Serving 教程。

激活 TensorFlow Elastic Inference 环境

  1. 首先,连接到您的 采用 Conda 的 Deep Learning AMI 并激活 Python 2.7 TensorFlow 环境。该示例脚本不与 Python 3.x 兼容

    $ source activate amazonei_tensorflow_p27
  2. 本指南的剩余部分假定您使用的是 amazonei_tensorflow_p27 环境。

注意

如果您正在各种 MXNet 或 TensorFlow Elastic Inference 环境之间切换,则必须停止,然后启动您的实例以重新挂载 Elastic Inference Accelerator。重启是不够的,因为该过程需要完全关闭。

将 Elastic Inference 与 TensorFlow 结合使用

启用了 EI 的 TensorFlow 版本可让您无缝地将 EI 与对 TensorFlow 代码进行的几处更改结合使用。您可以通过下列方式之一来将 EI 与 TensorFlow 结合使用:

使用 EI TensorFlow Serving

Elastic Inference TensorFlow Serving 使用与普通 TensorFlow Serving 相同的 API。唯一的区别是入口点是一个名为 AmazonEI_TensorFlow_Serving_v1.11_v1 的不同的二进制文件。此文件位于 /usr/local/bin/AmazonEI_TensorFlow_Serving_v1.11_v1。以下示例显示了使用 TensorFlow Serving 的命令。

EI TensorFlow Serving 示例

以下是您可尝试为不同的模型(如 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

    $ AmazonEI_TensorFlow_Serving_v1.11_v1 --model_name=inception --model_base_path=/home/ubuntu/SERVING_INCEPTION/SERVING_INCEPTION --port=9000
  5. 对于在前台运行的服务器,您将需要启动另一个终端会话才能继续。打开新的终端并使用 source activate amazonei_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

使用启用了 EI 的 TensorFlow 时的注意事项

  • 预热:Tensorflow Serving 提供预热功能以预加载模型并减少第一个推理请求的典型延迟。Amazon EI TensorFlow Serving 仅支持预热“serving_default”签名定义。

  • 签名定义:使用多个签名定义可对已使用的加速器内存量产生倍增效应。如果您计划对推理调用练习多个签名定义,则应在为您的应用程序确定加速器类型时测试这些方案。

更多模型和资源

  1. TensorFlow Serving - TensorFlow Serving 具有可与 EI 结合使用的推理示例。

有关更多教程和示例,请参阅该框架的官方 Python 文档、TensorFlow Python API