在 Amazon ECS 的 Amazon Linux 2 上使用 Trn1 和 Inf1 实例
您可以将 Amazon EC2 Trn1
Amazon EC2 Trn1 实例由 Amazon Web Services 自定义构建的 Amazon Trainium
Amazon EC2 Inf1 实例由 Amazon Web Services 自定义构建的 Amazon Inferentia
机器学习模型使用 Amazon Neuron
注意事项
在 Amazon ECS 上开始部署 Neuron 之前,请注意以下事项:
-
您的集群可以包含 Trn1、Inf1 和其他实例的组合。
-
在容器中,您需要一个采用支持 Amazon Neuron 的机器学习框架的 Linux 应用程序。
重要
使用其他框架的应用程序可能不会在 Trn1 和 Inf1 实例上获得性能提升。
-
每个 Amazon Trainium
或 Amazon Inferentia 芯片上只能运行一个推理或推理训练任务。每个芯片都有两个与之关联的内核。每个 Trn1 和 Inf1 实例都有芯片,您可以运行与之一样多的任务。 -
在创建服务或运行独立任务时,您可以在配置任务放置约束时使用实例类型属性。这样可以确保在您指定的容器实例上启动任务。这样做可以帮助您优化总体资源利用率,并确保推理工作负载的任务位于 Trn1 或 Inf1 实例上。有关更多信息,请参阅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 或 AmazonInferentia 芯片。通过使用
linuxParameters
参数并指定设备详细信息来执行此操作。有关更多信息,请参阅任务定义要求。
使用经 Amazon ECS 优化的 Amazon Linux 2(Inferentia)AMI
Amazon ECS 为 Amazon Trainium 和 Amazon Inferentia 工作负载提供了一个基于 Amazon Linux 2 的经 Amazon ECS 优化的 AMI。它附带适用于 Docker 的 Amazon Neuron 驱动程序和运行时。此 AMI 使得在 Amazon ECS 上运行机器学习 inference 工作负载变得更加轻松。
我们建议您在启动 Amazon EC2 Trn1 和 Inf1 实例时使用经 Amazon ECS 优化的 Amazon Linux 2(Inferentia)AMI。您可以使用 Amazon CLI 和以下命令检索当前经 Amazon ECS 优化的 Amazon Linux 2(Inferentia)AMI。
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/inf/recommended
下表提供了按地区检索当前经 Amazon ECS 优化的 Amazon Linux 2(Inferentia)AMI ID 的链接。
任务定义要求
要在 Amazon ECS 上部署 Neuron,您的任务定义必须包含预构建容器的容器定义,该容器服务于 TensorFlow 的 推理模型。它是由 Amazon 深度学习容器提供的。此容器包含 Amazon Neuron 运行时和 TensorFlow 服务应用程序。在启动时,此容器将从 Amazon S3 获取您的模型,用保存的模型启动 Neuron TensorFlow 服务,并等待预测请求。在以下示例中,容器映像具有 TensorFlow 1.15 和 Ubuntu 18.04。GitHub 上维护了针对 Neuron 优化的预构建 Deep Learning Containers 的完整列表。有关更多信息,请参阅 Neuron Inference Containers
763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-neuron:1.15.4-neuron-py37-ubuntu18.04
或者,您也可以构建自己的 Neuron 边车容器映像。有关更多信息,请参阅 GitHub 上的教程:Neuron TensorFlow 服务
任务定义必须特定于一种实例类型。您必须将容器配置为使用主机容器实例上可用的特定 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
|
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
|
以下是 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" } ] }