本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在适用于亚马逊的 Deep Learning Containers 上运行推理 EC2
本节介绍如何使用 ApacheMXNet(孵化)、、和 AWS 2 在适用于亚马逊弹性计算云的 Deep Learning Containers 上运行推理。 PyTorch TensorFlow TensorFlow 你也可以使用 Elastic Inference 通过 Dee AWS p Learning Containers 运行推理。有关 Elastic Inference 的教程和更多信息,请参阅亚马逊上将AWS 深度学习容器与 Elastic Inference 结合使用。EC2
有关 Deep Learning Containers 的完整列表,请参阅深度学习容器图片。
注意
MKL用户:阅读AWS Deep Learning Containers 英特尔数学内核库 (MKL) 建议以获得训练或推理性能。
TensorFlow推断
为了演示如何使用 Deep Learning Containers 进行推理,此示例使用了带有 Serving 的简单半加二模型 TensorFlow 。我们建议将深度学习基础用AMI于 TensorFlow. 登录实例后,运行以下命令:
$
git clone -b r1.15 https://github.com/tensorflow/serving.git$
cd serving$
git checkout r1.15
使用此处的命令开始使用此模型的 Deep Learning Containers 进行 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 Serving 的简单半加二模型。我们建议将深度学习基础用AMI于 TensorFlow 2。登录实例后,运行以下命令。
$
git clone -b r2.0 https://github.com/tensorflow/serving.git$
cd serving
使用此处的命令开始使用此模型的 Deep Learning Containers 进行 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
。
ApacheMXNet(孵化中)推断
为了开始使用 ApacheMXNet(孵化)进行推理,此示例使用了来自公共 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
MXNet用 GluonCV 进行推断
要开始使用 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推断
1.6 及更高 PyTorch 版本的 Deep Learning Container TorchServe s 用于推理调用。1.5 及更早 PyTorch 版本的 Deep Learning Container mxnet-model-server
s 用于推理调用。
PyTorch 1.6 及更高版本
为了运行推理 PyTorch,此示例使用了公共 S3 存储桶在 Imagenet 上预训练的模型。使用 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 或更高版本,则可以在启动 Docker 时使用该--gpus
标志。
配置文件包含在容器中。
服务器启动后,您现在可以使用以下命令从不同的窗口运行推理。
$ 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 存储桶在 Imagenet 上预训练的模型。与MXNet容器类似,推理是使用的 mxnet-model-server,它可以支持任何框架作为后端。有关更多信息,请参阅适用于 Apache 的模型服务器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 或更高版本,则可以在启动 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
后续步骤
要了解如何在亚马逊的 Deep Learning Containers 中使用自定义入口点ECS,请参阅。Amazon 的自定义入口点 ECS