适用于 AWS 神经元机器学习工作负载的 Amazon ECS 任务定义 - Amazon Elastic Container Service

适用于 AWS 神经元机器学习工作负载的 Amazon ECS 任务定义

您可以将 Amazon EC2 Trn1Amazon EC2 Trn2Amazon EC2 Inf1Amazon EC2 Inf2 实例注册到您的集群,以执行机器学习工作负载。

Amazon EC2 Trn1 和 Trn2 实例由 AWS Trainium 芯片提供技术支持。这些实例在云中为机器学习提供高性能的低成本训练。您可以在 Trn1 或 Trn2 实例上使用具有 AWS Neuron 的机器学习框架训练机器学习推理模型。然后,您可以在 Inf1 实例或 Inf2 实例上运行模型来利用 AWS Inferentia 芯片的加速。

Amazon EC2 Inf1 实例和 Inf2 实例由 AWS Inferentia 芯片提供支持,,它们可在云中提供高性能和最低成本的推理。

机器学习模型使用 AWS Neuron 部署到容器中,它是专门的软件开发工具包(SDK)。SDL 由编译器、运行时和分析工具组成,可用于优化 AWS 机器学习芯片的机器学习性能。AWSNeuron 支持常用的机器学习框架,例如 TensorFlow、PyTorch 和 Apache MXNet。

注意事项

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

  • 您的集群可以包含 Trn1、Trn2、Inf1、Inf2 和其他实例的组合。

  • 在容器中,您需要一个采用支持 AWS Neuron 的机器学习框架的 Linux 应用程序。

    重要

    使用其他框架的应用程序可能不会在 Trn1、Trn2、Inf1 和 Inf2 实例上获得性能提升。

  • 每个 AWS TrainiumAWS Inferentia 芯片上只能运行一个推理或推理训练任务。对于 Inf1,每个芯片有 4 个 NeuronCore。对于 Trn1、Trn2 和 Inf2,每个芯片有 2 个 NeuronCore。每个 Trn1、Trn2、Inf1 和 Inf2 实例都有芯片,您可以运行与之一样多的任务。

  • 在创建服务或运行独立任务时,您可以在配置任务放置约束时使用实例类型属性。这样可以确保在您指定的容器实例上启动任务。这样做可以帮助您优化总体资源利用率,并确保推理工作负载的任务位于 Trn1、Trn2、Inf1 和 Inf2 实例上。有关更多信息,请参阅 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"
  • 无法在任务定义中定义 Neuron 资源需求。但您要将容器配置为使用主机容器实例上可用的特定 AWS Trainium 或 AWSInferentia 芯片。通过使用 linuxParameters 参数并指定设备详细信息来执行此操作。有关更多信息,请参阅 任务定义要求

使用经 Amazon ECS 优化的 Amazon Linux 2023(Neuron)AMI

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

我们建议您在启动 Amazon EC2 Trn1、Inf1 和 Inf2 实例时使用经 Amazon ECS 优化的 Amazon Linux 2023(Neuron)AMI。

您可以使用 AWS CLI 和以下命令检索当前经 Amazon ECS 优化的 Amazon Linux 2023(Neuron)AMI。

aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2023/neuron/recommended

任务定义要求

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

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

或者,您也可以构建自己的 Neuron 边车容器映像。有关更多信息,请参阅《AWS Deep Learning AMIs 开发人员指南》中的教程:Neuron TensorFlow Serving

任务定义必须特定于一种实例类型。您必须将容器配置为使用主机容器实例上可用的特定 AWS Trainium 或 AWS Inferentia 设备。您还可以使用 linuxParameters 参数执行此操作。对于示例任务定义,请参阅 在 Amazon ECS 任务定义中指定 AWS Neuron 机器学习。下表详细介绍了特定于每种实例类型的芯片。

实例类型 vCPU RAM (GiB) AWS ML 加速器芯片 设备路径
trn1.2xlarge 8 32 1 /dev/neuron0
trn1.32xlarge 128 512 16 /dev/neuron0, /dev/neuron1, /dev/neuron2, /dev/neuron3, /dev/neuron4, /dev/neuron5, /dev/neuron6, /dev/neuron7, /dev/neuron8, /dev/neuron9, /dev/neuron10, /dev/neuron11, /dev/neuron12, /dev/neuron13, /dev/neuron14, /dev/neuron15
trn2.48xlarge 192 1536 16 /dev/neuron0, /dev/neuron1, /dev/neuron2, /dev/neuron3, /dev/neuron4, /dev/neuron5, /dev/neuron6, /dev/neuron7, /dev/neuron8, /dev/neuron9, /dev/neuron10, /dev/neuron11, /dev/neuron12, /dev/neuron13, /dev/neuron14, /dev/neuron15
inf1.xlarge 4 8 1 /dev/neuron0
inf1.2xlarge 8 16 1 /dev/neuron0
inf1.6xlarge 24 48 4 /dev/neuron0, /dev/neuron1, /dev/neuron2, /dev/neuron3
inf1.24xlarge 96 192 16 /dev/neuron0, /dev/neuron1, /dev/neuron2, /dev/neuron3, /dev/neuron4, /dev/neuron5, /dev/neuron6, /dev/neuron7, /dev/neuron8, /dev/neuron9, /dev/neuron10, /dev/neuron11, /dev/neuron12, /dev/neuron13, /dev/neuron14, /dev/neuron15
inf2.xlarge 8 16 1 /dev/neuron0
inf2.8xlarge 32 64 1 /dev/neuron0
inf2.24xlarge 96 384 6 /dev/neuron0, /dev/neuron1, /dev/neuron2, /dev/neuron3, /dev/neuron4, /dev/neuron5,
inf2.48xlarge 192 768 12 /dev/neuron0, /dev/neuron1, /dev/neuron2, /dev/neuron3, /dev/neuron4, /dev/neuron5, /dev/neuron6, /dev/neuron7, /dev/neuron8, /dev/neuron9, /dev/neuron10, /dev/neuron11