View a markdown version of this page

适用于 Amazon 神经元机器学习工作负载的 Amazon ECS 任务定义 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

您可以将 Amazon EC2 Trn1Amazon EC2 Trn2Amazon EC2 Inf1(Inf1 是 EC2 启动类型支持的唯一实例)和 Amazon EC2 Inf2 实例用于您的集群,以执行机器学习工作负载。

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

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

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

注意事项

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

  • 根据启动类型,您的集群可以包含 Trn1、Trn2、Inf1、Inf2 和其他实例的组合。

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

    重要

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

  • Amazon ECS 支持两种配置 Neuron 设备访问权限的方法:

    • 托管 Neuron 设备分配:在容器定义中使用类型为 NeuronDeviceresourceRequirements 参数。Amazon ECS 会自动发现 Neuron 设备并将其分配给容器。仅适用于托管实例。有关更多信息,请参阅 托管 Neuron 设备分配

    • 手动指定 Neuron 设备:使用 linuxParameters.devices 参数明确指定 Neuron 设备路径。对 Amazon EC2 启动类型和托管实例都适用。有关更多信息,请参阅 手动指定 Neuron 设备

    重要

    始终使用一种方法以免产生冲突。

托管 Neuron 设备分配

对于托管实例,可使用容器定义中的 resourceRequirements 参数来请求 Neuron 设备。Amazon ECS 会自动发现实例上的 Neuron 设备、将其分配给任务,并将容器配置为可以访问该实例上的所有 Neuron 设备。由于该任务需要独占访问所有设备,因此每个实例仅运行一项 Neuron 任务。

注意

Inf1 是 EC2 启动类型支持的唯一实例。要使用 Inf1 实例,请参阅手动指定 Neuron 设备

Neuron 实例选择

要为您的托管实例工作负载选择选择 Neuron 的实例类型,请使用容量提供程序的启动模板中的 instanceRequirements 对象。可使用以下属性选择支持 Neuron 的实例:

  • acceleratorManufacturers:使用 amazon-web-services 选择带有 Amazon 加速器(包括 Inferentia 和 Trainium)的实例。

  • acceleratorNames:使用 inferentia2trainiumtrainium2 选择特定的加速器芯片。

  • allowedInstanceTypes:使用 inf*trn* 按名称选择 Neuron 实例类型。

以下示例使用 allowedInstanceTypes

{ "instanceRequirements": { "allowedInstanceTypes": ["inf*", "trn*"] } }

任务定义

要在任务定义中请求 Neuron 设备,需添加一个类型为 NeuronDevice 且值为 ALLresourceRequirements 条目。这为容器提供了独占访问实例上所有 Neuron 设备的权限。

以下限制适用:

  • resourceRequirements 中最多只有一个容器定义可指定 NeuronDevice

  • 在同一个任务定义中,不能将 Neuron 设备值为 NeuronDevicelinuxParameters.devicesresourceRequirements 合并起来。

任务开始后,可通过调用 DescribeTasks API 操作来验证 Neuron 设备分配。响应包括每个容器上都有一个 neuronDeviceIds 字段,显示所分配的 Neuron 设备的 ID。也可以调用 DescribeContainerInstances API 操作来查看容器实例的 registeredResourcesremainingResources 字段中的 NEURON_DEVICES

有关任务定义示例,请参阅Neuron 任务定义示例

手动指定 Neuron 设备

通过这种方法,可在任务定义中使用 linuxParameters.devices 参数手动指定 Amazon Trainium Amazon 或 Inferentia 设备路径。这种方法对 EC2 启动类型和托管实例都适用。

每个 Amazon TrainiumAmazon Inferentia 芯片上只能运行一个推理或推理训练任务。通过为每项任务分配不同的设备,就可以运行与实例上的芯片一样多的任务。

对于 EC2 启动类型,您可以在配置任务放置约束时,使用实例类型属性确保在指定的实例类型上启动任务。有关更多信息,请参阅 Amazon ECS 如何将任务放置在容器实例上

任务定义要求

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

实例类型 vCPU RAM (GiB) Amazon 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

有关任务定义示例,请参阅Neuron 任务定义示例

托管实例

托管实例会自动使用包含 Neuron 驱动程序的 AMI。无需其他 AMI 配置。

EC2 启动类型

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

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

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

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