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

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

在 上使用推理工作负载 Amazon ECS

Amazon ECS 通过使您能够将 Amazon EC2 Inf1 实例注册到 集群来支持机器学习推理工作负载。 Amazon EC2Inf1 实例由 AWS Inferentia 芯片提供支持,这些芯片由 自定义构建AWS,可在云中提供高性能和最低成本的推理。机器学习模型使用 AWS Neuron 部署到容器中,Neuron 是一种专用的软件开发工具包 (SDK),由编译器、运行时和分析工具组成,用于优化 Inferentia 芯片的机器学习推理性能。 AWSNeuron 支持常用的机器学习框架TensorFlow,例如 PyTorch、 和 Apache MXNet孵化版)。

Considerations

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

  • 您的集群可以包含 Inf1 non-Inf1 实例的组合。

  • 我们建议您仅为每个 Inf1 实例放置一个具有 Inferentia 资源要求的 任务。

  • 在创建服务或运行独立任务时,您可以在配置任务放置约束时使用实例类型属性,以确保任务启动时使用的是哪个容器实例。通过这样做,您可以更高效地使用您的资源,同时确保您的推理工作负载的任务位于 Inf1 实例上。有关更多信息,请参阅Amazon ECS 任务放置.

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

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

使用 Amazon ECS-optimized Amazon Linux 2 (Inferentia) AMI

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

我们建议Amazon ECS-optimized Amazon Linux 2 (Inferentia) AMI在启动 Amazon EC2 Inf1 实例时使用 。您可以将 Amazon ECS-optimized Amazon Linux 2 (Inferentia) AMI 与以下命令结合使用来检索当前 AWS CLI

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

下表提供了一个按区域检索当前 Amazon ECS-optimized Amazon Linux 2 (Inferentia) AMI ID 的链接。

任务定义要求

要在 上部署 Amazon ECSNeuron,您的任务定义必须包含为 TensorFlow 提供的推理模型提供服务的预构建容器的容器定义AWS Deep Learning Containers。此容器包含 AWS Neuron 运行时和 TensorFlow Serving 应用程序。在启动时,此容器将从 提取您的模型Amazon S3,使用保存的模型启动 Neuron TensorFlow Serving,并等待预测请求。以下容器映像具有 TensorFlow 1.15 和 Ubuntu 18.04。在 上维护针对 Neuron 预先构建Deep Learning 容器的优化 的完整列表GitHub。 有关更多信息,请参阅 Neuron 推理容器

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

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

目前,无法在任务定义中定义 Inferentia 资源要求。但是,您可以使用 linuxParameters 参数将容器配置为使用主机容器实例上可用的特定 Inferentia。下面是一个示例任务定义,其中显示要使用的语法。

{ "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" } ] }