适用于 AWS 神经元机器学习工作负载的 Amazon ECS 任务定义
您可以将 Amazon EC2 Trn1
Amazon EC2 Trn1 实例由 AWS Trainium
Amazon EC2 Inf1 实例和 Inf2 实例由 AWS Inferentia
机器学习模型使用 AWS Neuron
注意事项
在 Amazon ECS 上开始部署 Neuron 之前,请注意以下事项:
-
您的集群可以包含 Trn1、Inf1、Inf2 和其他实例的组合。
-
在容器中,您需要一个采用支持 AWS Neuron 的机器学习框架的 Linux 应用程序。
重要
使用其他框架的应用程序可能不会在 Trn1、Inf1 和 Inf2 实例上获得性能提升。
-
每个 AWS Trainium
或 AWS Inferentia 芯片上只能运行一个推理或推理训练任务。对于 Inf1,每个芯片有 4 个 NeuronCore。对于 Trn1 和 Inf2,每个芯片有 2 个 NeuronCore。每个 Trn1、Inf1 和 Inf2 实例都有芯片,您可以运行与之一样多的任务。 -
在创建服务或运行独立任务时,您可以在配置任务放置约束时使用实例类型属性。这样可以确保在您指定的容器实例上启动任务。这样做可以帮助您优化总体资源利用率,并确保推理工作负载的任务位于 Trn1、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 优化的 Amazon Linux 2023(Neuron)AMI:
-
美国东部(弗吉尼亚州北部)
-
美国东部(俄亥俄州)
-
美国西部(加利福尼亚北部)
-
美国西部(俄勒冈州)
-
亚太地区(孟买)
-
亚太地区(大阪)
-
亚太地区(首尔)
-
Asia Pacific (Tokyo)
-
亚太地区(新加坡)
-
亚太地区(悉尼)
-
加拿大(中部)
-
欧洲地区(法兰克福)
-
欧洲地区(爱尔兰)
-
欧洲地区(伦敦)
-
欧洲地区(巴黎)
-
欧洲(斯德哥尔摩)
-
南美洲(圣保罗)
使用经 Amazon ECS 优化的 Amazon Linux 2(Neuron)AMI
Amazon ECS 为 AWS Trainium 和 AWS Inferentia 工作负载提供了一个基于 Amazon Linux 2 的经 Amazon ECS 优化的 AMI。它附带适用于 Docker 的 AWS Neuron 驱动程序和运行时。此 AMI 使得在 Amazon ECS 上运行机器学习 inference 工作负载变得更加轻松。
建议您在启动 Amazon EC2 Trn1、Inf1 和 Inf2 实例时使用经 Amazon ECS 优化的 Amazon Linux 2(Neuron)AMI。
您可以使用 AWS CLI 和以下命令检索当前经 Amazon ECS 优化的 Amazon Linux 2(Neuron)AMI。
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/inf/recommended
以下区域支持经 Amazon ECS 优化的 Amazon Linux 2(Neuron)AMI:
-
美国东部(弗吉尼亚州北部)
-
美国东部(俄亥俄州)
-
美国西部(加利福尼亚北部)
-
美国西部(俄勒冈州)
-
亚太地区(孟买)
-
亚太地区(大阪)
-
亚太地区(首尔)
-
Asia Pacific (Tokyo)
-
亚太地区(新加坡)
-
亚太地区(悉尼)
-
加拿大(中部)
-
欧洲地区(法兰克福)
-
欧洲地区(爱尔兰)
-
欧洲地区(伦敦)
-
欧洲地区(巴黎)
-
欧洲(斯德哥尔摩)
-
南美洲(圣保罗)
任务定义要求
要在 Amazon ECS 上部署 Neuron,您的任务定义必须包含预构建容器的容器定义,该容器服务于 TensorFlow 的 推理模型。它是由 AWS 深度学习容器提供的。此容器包含 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
参数执行此操作。下表详细介绍了特定于每种实例类型的芯片。
实例类型 | 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
|
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 |