在 Amazon ECS 上使用推理 Inf1 实例 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

在 Amazon ECS 上使用推理 Inf1 实例

您可以将 Amazon EC2 Inf1 实例注册到您的集群,以执行机器学习推理工作负载。这些 Amazon EC2 Inf1 实例由 Amazon Inferentia 芯片提供支持,这些芯片由 Amazon Web Services 定制构建,可在云中提供高性能和最低成本的推理。机器学习模型使用 Amazon Neuron 部署到容器中,它是专门的 SDK。它由编译器、运行时和分析工具组成,可用于优化 Inferentia 芯片的机器学习推理性能。AmazonNeuron 支持常用的机器学习框架,例如 TensorFlow、PyTorch 和 Apache MXNet (孵化)。

注意事项

在 Amazon ECS 上开始部署 Neuron 之前,请注意以下事项:

  • 您的集群可以包含 Inf1 和非 Inf1 实例的组合。

  • 我们建议您在每个 Inf1 实例中仅放置一个具有推理资源需求的任务。

  • 在创建服务或运行独立任务时,您可以在配置任务放置约束时使用实例类型属性。这样可以确保在您指定的容器实例上启动任务。这样做可以帮助您优化总体资源利用率,并确保推理工作负载的任务位于 Inf1 实例上。有关更多信息,请参阅Amazon ECS 任务放置

    在以下示例中,任务在您的 default 集群上的 Inf1.xlarge 实例上运行。

    aws ecs run-task \ --cluster default \ --task-definition ecs-inference-task-def \ --placement-constraints type=memberOf,expression="attribute:ecs.instance-type == Inf1.xlarge"
  • 无法在任务定义中定义 Inferentia 资源需求。但是,您可以将容器配置为使用主机容器实例上可用的特定 Inferentia。您可以通过使用 linuxParameters 参数并指定设备详细信息来执行此操作。有关更多信息,请参阅任务定义要求

使用经 Amazon ECS 优化的 Amazon Linux 2(Inferentia)AMI

Amazon ECS 为 Inferentia 工作负载提供了一个基于 Amazon Linux 2 的经 Amazon ECS 优化的 AMI。它预先配置了 Amazon Inferentia 驱动程序和适用于 Docker 的 Amazon Neuron 运行时。此 AMI 使得在 Amazon ECS 上运行机器学习 inference 工作负载变得更加轻松。

我们建议您在启动 Amazon EC2 Inf1 实例时使用经 Amazon ECS 优化的 Amazon Linux 2(Inferentia)AMI。您可以使用 Amazon CLI 和以下命令检索当前经 Amazon ECS 优化的 Amazon Linux 2(Inferentia)AMI。

aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/inf/recommended

下表提供了按地区检索当前经 Amazon ECS 优化的 Amazon Linux 2(推理)AMI ID 的链接。

任务定义要求

要在 Amazon ECS 上部署 Neuron,您的任务定义必须包含预构建容器的容器定义,该容器服务于 TensorFlow 的 推理模型。它是由 Amazon 深度学习容器提供的。此容器包含 Amazon Neuron 运行时和 TensorFlow 服务应用程序。在启动时,此容器将从 Amazon S3 获取您的模型,用保存的模型启动 Neuron TensorFlow 服务,并等待预测请求。在以下示例中,容器映像具有 TensorFlow 1.15 和 Ubuntu 18.04。GitHub 上维护了针对 Neuron 优化的预构建 Deep Learning Containers 的完整列表。有关更多信息,请参阅 Neuron Inference Containers

763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-neuron:1.15.4-neuron-py37-ubuntu18.04

或者,您也可以构建自己的 Neuron 边车容器映像。有关更多信息,请参阅 GitHub 上的教程:Neuron TensorFlow 服务

以下是 Fargate 上的 Linux 容器的示例任务定义,显示要使用的语法。

{ "family": "ecs-neuron", "executionRoleArn": "${YOUR_EXECUTION_ROLE}", "containerDefinitions": [ { "entryPoint": [ "/usr/local/bin/entrypoint.sh", "--port=8500", "--rest_api_port=9000", "--model_name=resnet50_neuron", "--model_base_path=s3://your-bucket-of-models/resnet50_neuron/" ], "portMappings": [ { "hostPort": 8500, "protocol": "tcp", "containerPort": 8500 }, { "hostPort": 8501, "protocol": "tcp", "containerPort": 8501 }, { "hostPort": 0, "protocol": "tcp", "containerPort": 80 } ], "linuxParameters": { "devices": [ { "containerPath": "/dev/neuron0", "hostPath": "/dev/neuron0", "permissions": [ "read", "write" ] } ], "capabilities": { "add": [ "IPC_LOCK" ] } }, "cpu": 0, "memoryReservation": 1000, "image": "763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-neuron:1.15.4-neuron-py37-ubuntu18.04", "essential": true, "name": "resnet50" } ] }