适用于 AWS 神经元机器学习工作负载的 Amazon ECS 任务定义
您可以将 Amazon EC2 Trn1
Amazon EC2 Trn1 和 Trn2 实例由 AWS Trainium
Amazon EC2 Inf1 实例和 Inf2 实例由 AWS Inferentia
机器学习模型使用 AWS Neuron
注意事项
在 Amazon ECS 上开始部署 Neuron 之前,请注意以下事项:
-
根据启动类型,您的集群可以包含 Trn1、Trn2、Inf1、Inf2 和其他实例的组合。
-
在容器中,您需要一个采用支持 AWS Neuron 的机器学习框架的 Linux 应用程序。
重要
使用其他框架的应用程序可能不会在 Trn1、Trn2、Inf1 和 Inf2 实例上获得性能提升。
-
Amazon ECS 支持两种配置 Neuron 设备访问权限的方法:
-
托管 Neuron 设备分配:在容器定义中使用类型为
NeuronDevice的resourceRequirements参数。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:使用inferentia2、trainium或trainium2选择特定的加速器芯片。 -
allowedInstanceTypes:使用inf*和trn*按名称选择 Neuron 实例类型。
以下示例使用 allowedInstanceTypes:
{ "instanceRequirements": { "allowedInstanceTypes": ["inf*", "trn*"] } }
任务定义
要在任务定义中请求 Neuron 设备,需添加一个类型为 NeuronDevice 且值为 ALL 的 resourceRequirements 条目。这为容器提供了独占访问实例上所有 Neuron 设备的权限。
以下限制适用:
-
resourceRequirements中最多只有一个容器定义可指定NeuronDevice。 -
在同一个任务定义中,不能将 Neuron 设备值为
NeuronDevice和linuxParameters.devices的resourceRequirements合并起来。
任务开始后,可通过调用 DescribeTasks API 操作来验证 Neuron 设备分配。响应包括每个容器上都有一个 neuronDeviceIds 字段,显示所分配的 Neuron 设备的 ID。也可以调用 DescribeContainerInstances API 操作来查看容器实例的 registeredResources 和 remainingResources 字段中的 NEURON_DEVICES。
有关任务定义示例,请参阅Neuron 任务定义示例。
手动指定 Neuron 设备
通过这种方法,可在任务定义中使用 linuxParameters.devices 参数手动指定 AWS Trainium AWS 或 Inferentia 设备路径。这种方法对 EC2 启动类型和托管实例都适用。
每个 AWS Trainium
对于 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