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

推理

本部分指导您如何使用 MXNet、PyTorch、TensorFlow 和 TensorFlow 2 在适用于 Amazon Elastic Compute Cloud 的 AWS Deep Learning Containers 上运行推理。您也可以使用 Elastic Inference 通过 AWS Deep Learning Containers 运行推理。有关教程以及 Elastic Inference 的更多信息,请参阅在 Amazon EC2 上将 AWS Deep Learning Containers 与 Elastic Inference 配合使用

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

注意

MKL 用户:阅读AWS Deep Learning Containers Intel 数学内核库 (MKL) 建议以获得最佳训练或推理性能。

TensorFlow 推理

为了演示如何将 Deep Learning Containers 用于推理,此示例将一个简单的 half plus two 模型用于 TensorFlow Serving。我们建议将深度学习基础 AMI 用于 TensorFlow。登录实例后,运行以下命令:

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

使用此处的命令针对此模型通过 Deep Learning Containers 启动 TensorFlow Serving。与用于训练的 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/sad_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

接下来,使用 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 用于推理,此示例将一个简单的 half plus two 模型用于 TensorFlow 2 Serving。我们建议将深度学习基础 AMI 用于 TensorFlow 2。登录实例后,运行以下命令。

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

使用此处的命令针对此模型通过 Deep Learning Containers 启动 TensorFlow Serving。与用于训练的 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/sad_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

MXNet 推理

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

对于 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 squeezenet=https://s3.amazonaws.com/model-server/models/squeezenet_v1.1/squeezenet_v1.1.model

对于 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 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

PyTorch 推理

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

对于 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 或更高,则启动 Docker 时可以使用 --gpus 标志。

配置文件包含在容器中。

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

$ 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 结合使用,请参阅自定义入口点