View a markdown version of this page

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

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

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

Amazon EC2 Trn1 和 Trn2 实例由 AWS Trainium 芯片提供技术支持。这些实例在云中为机器学习提供高性能的低成本训练。您可以在 Trn1 或 Trn2 实例上使用具有 AWS Neuron 的机器学习框架训练机器学习推理模型。然后,您可以在 Inf1 实例(Inf1 是 EC2 启动类型支持的唯一实例)或 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 实例上获得性能提升。

  • 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 选择带有 AWS 加速器(包括 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 参数手动指定 AWS Trainium AWS 或 Inferentia 设备路径。这种方法对 EC2 启动类型和托管实例都适用。

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

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

任务定义要求

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

实例类型 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

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

托管实例

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

EC2 启动类型

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