本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在亚马逊 ECS Amazon 上的 Amazon Linux 2 上使用 Neuron
您可以将 Amazon EC2 Trn1
Amazon EC2 Trn1 实例由 Amazon Trainium
Amazon EC2 Inf1 实例和 Inf2 实例由 Amazon Inferentia
机器学习模型使用 Amazon Neuron
注意事项
在 Amazon ECS 上开始部署 Neuron 之前,请注意以下事项:
-
您的集群可以包含 Trn1、Inf1、Inf2 和其他实例的组合。
-
您需要在容器中使用支持 Amazon Neuron 的机器学习框架的 Linux 应用程序。
重要
使用其他框架的应用程序可能不会在 Trn1、Inf1 和 Inf2 实例上获得性能提升。
-
每个 Amazon Trainium
或 Amazon Inferentia 芯片上只能运行一个推理或推理训练任务。对于 Inf1,每个芯片有 4 NeuronCores 个。对于 Trn1 和 Inf2,每个芯片有 2 个。 NeuronCores每个 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 资源需求。相反,您可以将容器配置为使用主机容器实例上可用的特定 Amazon Trainium 或 Amazon Inferentia 芯片。通过使用
linuxParameters
参数并指定设备详细信息来执行此操作。有关更多信息,请参阅 任务定义要求。
使用经 Amazon ECS 优化的 Amazon Linux 2(Neuron)AMI
Amazon ECS 提供了经亚马逊 ECS 优化的 AMI,该AMI基于亚马逊 Linux 2,用于 Amazon Trainium 和 Amazon Inferentia 工作负载。它附带了 Docker 的 Amazon Neuron 驱动程序和 Runtime。此 AMI 使得在 Amazon ECS 上运行机器学习 inference 工作负载变得更加轻松。
建议您在启动 Amazon EC2 Trn1、Inf1 和 Inf2 实例时使用经 Amazon ECS 优化的 Amazon Linux 2(Neuron)AMI。
您可以使用以下命令检索当前经过亚马逊 ECS 优化的 Amazon Linux 2(Neuro Amazon CLI n)AMI。
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/inf/recommended
以下区域支持亚马逊 ECS 优化的 Amazon Linux 2 (Neuron) AMI:
-
美国东部(弗吉尼亚州北部)
-
美国东部(俄亥俄州)
-
美国西部(北加利福尼亚)
-
美国西部(俄勒冈)
-
亚太地区(孟买)
-
亚太地区(大阪)
-
亚太地区(首尔)
-
亚太地区(东京)
-
亚太地区(新加坡)
-
亚太地区(悉尼)
-
加拿大(中部)
-
欧洲地区(法兰克福)
-
欧洲地区(爱尔兰)
-
欧洲地区(伦敦)
-
欧洲地区(巴黎)
-
欧洲(斯德哥尔摩)
-
South America(São Paulo)
任务定义要求
要在 Amazon ECS 上部署 Neuron,您的任务定义必须包含为其提供推理模型的预构建容器的容器定义。 TensorFlow它由 Dee Amazon p Learning Containers 提供。此容器包含 Amazon Neuron 运行时和 Servin TensorFlow g 应用程序。启动时,此容器会从 Amazon S3 获取您的模型,使用保存的模型启动 Neuron TensorFlow Servicing,然后等待预测请求。在以下示例中,容器镜像有 TensorFlow 1.15 和 Ubuntu 18.04。中保留了针对神经元优化的预建的 Deep Learning Containers 的完整列表。 GitHub有关更多信息,请参阅使用 Amazon 神经元 TensorFlow 服务。
763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-neuron:1.15.4-neuron-py37-ubuntu18.04
或者,您也可以构建自己的 Neuron 边车容器映像。有关更多信息,请参阅《Amazon Deep Learning AMI 开发者指南》中的教程:神经元 TensorFlow 服务
任务定义必须特定于一种实例类型。您必须将容器配置为使用主机容器实例上可用的特定 Amazon Train Amazon ium 或 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
|
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 |
以下是 inf1.xlarge
的示例 Linux 任务定义,显示要使用的语法。
{ "family": "ecs-neuron", "requiresCompatibilities": ["EC2"], "placementConstraints": [ { "type": "memberOf", "expression": "attribute:ecs.os-type == linux" }, { "type": "memberOf", "expression": "attribute:ecs.instance-type ==
inf1.xlarge
" } ], "executionRoleArn": "${YOUR_EXECUTION_ROLE}
", "containerDefinitions": [ { "entryPoint": [ "/usr/local/bin/entrypoint.sh", "--port=8500", "--rest_api_port=9000", "--model_name=resnet50_neuron", "--model_base_path=s3://your-bucket-of-models/resnet50_neuron/
" ], "portMappings": [ { "hostPort": 8500, "protocol": "tcp", "containerPort": 8500 }, { "hostPort": 8501, "protocol": "tcp", "containerPort": 8501 }, { "hostPort": 0, "protocol": "tcp", "containerPort": 80 } ], "linuxParameters": { "devices": [ { "containerPath": "/dev/neuron0", "hostPath": "/dev/neuron0", "permissions": [ "read", "write" ] } ], "capabilities": { "add": [ "IPC_LOCK" ] } }, "cpu": 0, "memoryReservation": 1000, "image": "763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-neuron:1.15.4-neuron-py37-ubuntu18.04
", "essential": true, "name": "resnet50" } ] }