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

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

推理

此节演示如何在上运行推理Amazon亚马逊弹性计算云的 Deep Learning Containers 使用 Apache MxNet(孵育)、PyTorch、TensorFlow 和 TensorFlow 2. 你也可以使用 Elastic Inference 来运行推理AmazonDeep Learning Containers。有关 Elastic Inference 的教程和更多信息,请参阅使用AmazonAmazon EC2 上的 EElastic Inference Deep Learning Containers.

有关 Deep Learning Containers 的完整列表,请参阅Deep Learning Containers 映像.

注意

MKL 用户:读取 AmazonDeep Learning Containers 英特尔数学核心库 (MKL) 建议以获得最佳训练或推理性能。

TensorFlow 推理

为了演示如何使用 Deep Learning Containers 进行推理,本示例使用了一个简单的一半加两模型 TensorFlow 服务。我们建议使用深度学习基础 AMI对于 TensorFlow。登录实例后,运行以下命令:

$ git clone -b r1.15 https://github.com/tensorflow/serving.git $ cd serving $ git checkout r1.15

使用这里的命令开始 TensorFlow 与此模型的 Deep Learning Containers 一起服务。请注意,与用于训练的不同,模型处理将在运行容器后立即开始并且作为后台进程运行。

  • 对于 CPU 实例:

    $ docker run -p 8500:8500 -p 8501:8501 --name tensorflow-inference --mount type=bind,source=$(pwd)/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_cpu,target=/models/saved_model_half_plus_two -e MODEL_NAME=saved_model_half_plus_two -d <cpu inference container>

    例如:

    $ docker run -p 8500:8500 -p 8501:8501 --name tensorflow-inference --mount type=bind,source=$(pwd)/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_cpu,target=/models/saved_model_half_plus_two -e MODEL_NAME=saved_model_half_plus_two -d 763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference:1.15.0-cpu-py36-ubuntu18.04
  • 对于 GPU 实例:

    $ nvidia-docker run -p 8500:8500 -p 8501:8501 --name tensorflow-inference --mount type=bind,source=$(pwd)/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_gpu,target=/models/saved_model_half_plus_two -e MODEL_NAME=saved_model_half_plus_two -d <gpu inference container>

    例如:

    $ nvidia-docker run -p 8500:8500 -p 8501:8501 --name tensorflow-inference --mount type=bind,source=$(pwd)/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_gpu,target=/models/saved_model_half_plus_two -e MODEL_NAME=saved_model_half_plus_two -d 763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference:1.15.0-gpu-py36-cu100-ubuntu18.04
  • 对于 Inf1 实例:

    $ docker run -id --name tensorflow-inference -p 8500:8500 --device=/dev/neuron0 --cap-add IPC_LOCK --mount type=bind,source={model_path},target=/models/{model_name} -e MODEL_NAME={model_name} <neuron inference container>

    例如:

    $ docker run -id --name tensorflow-inference -p 8500:8500 --device=/dev/neuron0 --cap-add IPC_LOCK --mount type=bind,source={model_path},target=/models/{model_name} -e MODEL_NAME={model_name} 763104351884.dkr.ecr.us-west-2.amazonaws.com/tensorflow-inference-neuron:1.15.4-neuron-py37-ubuntu18.04-v1.1

接下来,使用 Deep Learning Containers 运行推理。

$ curl -d '{"instances": [1.0, 2.0, 5.0]}' -X POST http://127.0.0.1:8501/v1/models/saved_model_half_plus_two:predict

输出类似于以下内容:

{ "predictions": [2.5, 3.0, 4.5 ] }
注意

如果您想要调试容器的输出,可以使用容器名称来附加输出,可以使用容器名称来附加输出:

$ docker attach <your docker container name>

在这个例子中你使用tensorflow-inference.

TensorFlow 2 推理

为了演示如何使用 Deep Learning Containers 进行推理,本示例使用了一个简单的一半加两模型 TensorFlow 2 个服务。我们建议使用深度学习基础 AMI为了 TensorFlow 2. 登录实例后,运行以下命令。

$ git clone -b r2.0 https://github.com/tensorflow/serving.git $ cd serving

使用这里的命令开始 TensorFlow 与此模型的 Deep Learning Containers 一起服务。请注意,与用于训练的不同,模型处理将在运行容器后立即开始并且作为后台进程运行。

  • 对于 CPU 实例:

    $ docker run -p 8500:8500 -p 8501:8501 --name tensorflow-inference --mount type=bind,source=$(pwd)/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_cpu,target=/models/saved_model_half_plus_two -e MODEL_NAME=saved_model_half_plus_two -d <cpu inference container>

    例如:

    $ docker run -p 8500:8500 -p 8501:8501 --name tensorflow-inference --mount type=bind,source=$(pwd)/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_cpu,target=/models/saved_model_half_plus_two -e MODEL_NAME=saved_model_half_plus_two -d 763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference:2.0.0-cpu-py36-ubuntu18.04
  • 对于 GPU 实例:

    $ nvidia-docker run -p 8500:8500 -p 8501:8501 --name tensorflow-inference --mount type=bind,source=$(pwd)/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_gpu,target=/models/saved_model_half_plus_two -e MODEL_NAME=saved_model_half_plus_two -d <gpu inference container>

    例如:

    $ nvidia-docker run -p 8500:8500 -p 8501:8501 --name tensorflow-inference --mount type=bind,source=$(pwd)/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_gpu,target=/models/saved_model_half_plus_two -e MODEL_NAME=saved_model_half_plus_two -d 763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference:2.0.0-gpu-py36-cu100-ubuntu18.04
    注意

    加载 GPU 模型服务器可能需要一段时间。

接下来,使用 Deep Learning Containers 运行推理。

$ curl -d '{"instances": [1.0, 2.0, 5.0]}' -X POST http://127.0.0.1:8501/v1/models/saved_model_half_plus_two:predict

输出类似于以下内容。

{ "predictions": [2.5, 3.0, 4.5 ] }
注意

要调试容器的输出,可以使用名称来附加容器的输出,如以下命令所示:

$ docker attach <your docker container name>

使用此示例tensorflow-inference.

推理 Apache MXNet(孵化)

要开始使用 Apache MXNet 存储桶进行推理,此示例使用来自公有 S3 存储桶的一个预先训练好的模型。

对于 CPU 实例,运行以下命令。

$ docker run -it --name mms -p 80:8080 -p 8081:8081 <your container image id> \ mxnet-model-server --start --mms-config /home/model-server/config.properties \ --models squeezenet=https://s3.amazonaws.com/model-server/models/squeezenet_v1.1/squeezenet_v1.1.model

对于 GPU 实例,运行以下命令:

$ nvidia-docker run -it --name mms -p 80:8080 -p 8081:8081 <your container image id> \ mxnet-model-server --start --mms-config /home/model-server/config.properties \ --models squeezenet=https://s3.amazonaws.com/model-server/models/squeezenet_v1.1/squeezenet_v1.1.model

该配置文件包含在容器中。

在启动您的服务器后,现在您可以使用以下命令从不同的窗口来运行推理。

$ curl -O https://s3.amazonaws.com/model-server/inputs/kitten.jpg curl -X POST http://127.0.0.1/predictions/squeezenet -T kitten.jpg

在您使用完容器后,可以使用以下命令将其删除:

$ docker rm -f mms

GluonCV 的 MXNet 推理

要开始使用 GluonCV 进行推理,此示例使用来自公有 S3 存储桶的一个预先训练好的模型。

对于 CPU 实例,运行以下命令。

$ docker run -it --name mms -p 80:8080 -p 8081:8081 <your container image id> \ mxnet-model-server --start --mms-config /home/model-server/config.properties \ --models gluoncv_yolo3=https://dlc-samples.s3.amazonaws.com/mxnet/gluon/gluoncv_yolo3.mar

对于 GPU 实例,运行以下命令。

$ nvidia-docker run -it --name mms -p 80:8080 -p 8081:8081 <your container image id> \ mxnet-model-server --start --mms-config /home/model-server/config.properties \ --models gluoncv_yolo3=https://dlc-samples.s3.amazonaws.com/mxnet/gluon/gluoncv_yolo3.mar

该配置文件包含在容器中。

在启动您的服务器后,现在您可以使用以下命令从不同的窗口来运行推理。

$ curl -O https://dlc-samples.s3.amazonaws.com/mxnet/gluon/dog.jpg curl -X POST http://127.0.0.1/predictions/gluoncv_yolo3/predict -T dog.jpg

您的输出应与以下内容类似:

{ "bicycle": [ "[ 79.674225 87.403786 409.43515 323.12167 ]", "[ 98.69891 107.480446 200.0086 155.13412 ]" ], "car": [ "[336.61322 56.533463 499.30566 125.0233 ]" ], "dog": [ "[100.50538 156.50375 223.014 384.60873]" ] }

在您使用完容器后,可以使用此命令将其删除。

$ docker rm -f mms

PyTorch 推理

具有 Deep Learning Containers PyTorch 版本 1.6 及更高版本 TorchServe 用于推理调用。具有 Deep Learning Containers PyTorch 版本 1.5 及更低版本使用mxnet-model-server用于推理调用。

PyTorch 1.6 及更高版本

要使用 PyTorch 运行推理,此示例使用来自公有 S3 存储桶的在 Imageet 上预先训练的模型。推理是使用 TorchServe 提供的。有关更多信息,请参阅上的此博客部署 PyTorch 使用 TorchServe 进行推理.

对于 CPU 实例:

$ docker run -itd --name torchserve -p 80:8080 -p 8081:8081 <your container image id> \ torchserve --start --ts-config /home/model-server/config.properties \ --models pytorch-densenet=https://torchserve.s3.amazonaws.com/mar_files/densenet161.mar

对于 GPU 实例

$ nvidia-docker run -itd --name torchserve -p 80:8080 -p 8081:8081 <your container image id> \ torchserve --start --ts-config /home/model-server/config.properties \ --models pytorch-densenet=https://torchserve.s3.amazonaws.com/mar_files/densenet161.mar

如果您的 docker-ce 版本 19.03 或更高版本,则可以使用--gpus启动 Docker 时标记。

该配置文件包含在容器中。

在启动您的服务器后,现在您可以使用以下命令从不同的窗口来运行推理。

$ curl -O https://s3.amazonaws.com/model-server/inputs/flower.jpg curl -X POST http://127.0.0.1:80/predictions/pytorch-densenet -T flower.jpg

在您使用完容器后,可以使用以下命令将其删除。

$ docker rm -f torchserve

PyTorch 1.5 及更低版本

要使用 PyTorch 运行推理,此示例使用来自公有 S3 存储桶的在 Imageet 上预先训练的模型。与 MXNet 容器类似,使用 mxnet-model-server 提供推理,该服务器可以支持任何框架作为后端。有关更多信息,请参阅 。适用于 Apache MXNet 的模型服务器还有这个博客部署 PyTorch 推理 MXNet 模型服务器.

对于 CPU 实例:

$ docker run -itd --name mms -p 80:8080 -p 8081:8081 <your container image id> \ mxnet-model-server --start --mms-config /home/model-server/config.properties \ --models densenet=https://dlc-samples.s3.amazonaws.com/pytorch/multi-model-server/densenet/densenet.mar

对于 GPU 实例

$ nvidia-docker run -itd --name mms -p 80:8080 -p 8081:8081 <your container image id> \ mxnet-model-server --start --mms-config /home/model-server/config.properties \ --models densenet=https://dlc-samples.s3.amazonaws.com/pytorch/multi-model-server/densenet/densenet.mar

如果您的 docker-ce 版本 19.03 或更高版本,则可以使用--gpus启动 Docker 时标记。

该配置文件包含在容器中。

在启动您的服务器后,现在您可以使用以下命令从不同的窗口来运行推理。

$ curl -O https://s3.amazonaws.com/model-server/inputs/flower.jpg curl -X POST http://127.0.0.1/predictions/densenet -T flower.jpg

在您使用完容器后,可以使用以下命令将其删除。

$ docker rm -f mms

后续步骤

要了解如何在 Amazon ECS 上将自定义入口点与 Deep Learning Containers 结合使用,请参阅自定义入口点.