Uso de AWS Neuron en Amazon Linux 2 en Amazon ECS - Amazon Elastic Container Service

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de AWS Neuron en Amazon Linux 2 en Amazon ECS

Puede registrar instancias Trn1 de Amazon EC2, Inf1 de Amazon EC2 e Inf2 de Amazon EC2 en los clústeres para cargas de trabajo de machine learning.

Las instancias Trn1 de Amazon EC2 funcionan con chips de AWS Trainium. Estas instancias proporcionan capacitación de alto rendimiento y bajo costo para el machine learning en la nube. Puede entrenar un modelo de inferencia de machine learning mediante un marco de machine learning con AWS Neuron en una instancia de Trn1. A continuación, puede ejecutar el modelo en una instancia Inf1 o en una instancia Inf2 para utilizar la aceleración de los chips Inferentia. AWS

Las instancias Inf1 e Inf2 de Amazon EC2 funcionan con chips de AWS Inferentia, que proporcionan un alto rendimiento y una inferencia de menor costo en la nube.

Los modelos de machine learning se implementan en contenedores mediante AWS Neuron, que es un kit de desarrollo de software (SDK) especializado. El SDK consta de un compilador, un tiempo de ejecución y herramientas de creación de perfiles que optimizan el rendimiento de aprendizaje automático de los chips de aprendizaje automático. AWS AWS Neuron es compatible con marcos de aprendizaje automático populares como TensorFlow PyTorch, y Apache MXNet.

Consideraciones

Antes de comenzar a implementar Neuron en Amazon ECS, tenga en cuenta lo siguiente:

  • Los clústeres pueden contener una combinación de instancias Trn1, Inf1, Inf2 y otras instancias.

  • Necesita una aplicación de Linux en un contenedor que utilice un marco de aprendizaje automático compatible con AWS Neuron.

    importante

    Es posible que las aplicaciones que utilizan otros marcos no tengan un rendimiento mejorado en las instancias Trn1, Inf1 e Inf2.

  • Solo se puede ejecutar una tarea de inferencia o entrenamiento de inferencias en cada chip AWS Trainium o AWS Inferentia. Para Inf1, cada chip tiene 4. NeuronCores Para Trn1 e Inf2, cada chip tiene 2. NeuronCores Puede ejecutar tantas tareas como chips haya para cada instancia de Trn1, Inf1 e Inf2.

  • Cuando cree un servicio o ejecute una tarea independiente, puede utilizar los atributos de tipo de instancia al configurar las restricciones de ubicación de tareas. Esto garantiza que la tarea se lance en la instancia de contenedor que especifique. Al hacerlo, puede optimizar la utilización general de los recursos y garantizar que las tareas de las cargas de trabajo de inferencia se encuentren en las instancias Trn1, Inf1 e Inf2. Para obtener más información, consulte Cómo coloca Amazon ECS las tareas en las instancias de contenedor.

    En el ejemplo siguiente, se ejecuta una tarea en una instancia Inf1.xlarge del clúster default.

    aws ecs run-task \ --cluster default \ --task-definition ecs-inference-task-def \ --placement-constraints type=memberOf,expression="attribute:ecs.instance-type == Inf1.xlarge"
  • Los requisitos de recursos de Neuron no se pueden definir en una definición de tareas. En su lugar, debe configurar un contenedor para usar chips AWS Trainium o AWS Inferentia específicos disponibles en la instancia del contenedor anfitrión. Para ello, use el parámetro linuxParameters y especifique los detalles del dispositivo. Para obtener más información, consulte Requisitos de definición de tareas.

Utilizar la AMI de Amazon Linux 2 (Neuron) optimizada para Amazon ECS

Amazon ECS proporciona una AMI optimizada para Amazon ECS que se basa en Amazon Linux 2 para las cargas de trabajo de AWS Trainium e AWS Inferentia. Incluye los controladores AWS Neuron y el tiempo de ejecución para Docker. Esta AMI facilita la ejecución de cargas de trabajo de inferencia de machine learning en Amazon ECS.

Recomendamos utilizar la AMI de Amazon Linux 2 (Neuron) optimizada para Amazon ECS cuando se lanzan las instancias Trn1, Inf1 e Inf2 de Amazon EC2.

Puede recuperar la AMI Amazon Linux 2 (Neuron) optimizada para Amazon ECS actual AWS CLI mediante el siguiente comando.

aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/inf/recommended

La AMI Amazon Linux 2 (Neuron) optimizada para Amazon ECS es compatible con las siguientes regiones:

  • Este de EE. UU. (Norte de Virginia)

  • Este de EE. UU. (Ohio)

  • Oeste de EE.UU. (Norte de California)

  • Oeste de EE. UU. (Oregón)

  • Asia-Pacífico (Bombay)

  • Asia-Pacífico (Osaka)

  • Asia-Pacífico (Seúl)

  • Asia-Pacífico (Tokio)

  • Asia-Pacífico (Singapur)

  • Asia-Pacífico (Sídney)

  • Canadá (centro)

  • Europa (Fráncfort)

  • Europa (Irlanda)

  • Europa (Londres)

  • Europa (París)

  • Europa (Estocolmo)

  • América del Sur (São Paulo)

Requisitos de definición de tareas

Para implementar Neuron en Amazon ECS, la definición de la tarea debe contener la definición de contenedor de un contenedor prediseñado que sirva como modelo de inferencia. TensorFlow Lo proporciona AWS Deep Learning Containers. Este contenedor contiene el entorno de ejecución de AWS Neuron y la aplicación TensorFlow Serving. Al iniciarse, este contenedor recupera el modelo de Amazon S3, lanza Neuron TensorFlow Serving con el modelo guardado y espera las solicitudes de predicción. En el siguiente ejemplo, la imagen del contenedor tiene la versión TensorFlow 1.15 y Ubuntu la versión 18.04. En encontrará una lista completa de Deep Learning Containers prediseñados y optimizados para Neuron. GitHub Para obtener más información, consulte Uso de AWS TensorFlow Neuron Serving.

763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-neuron:1.15.4-neuron-py37-ubuntu18.04

Como alternativa, puede crear su propia imagen de contenedor de sidecar de Neuron. Para obtener más información, consulte el Tutorial: Neuron TensorFlow Serving en la Guía AWS Deep Learning AMI para desarrolladores.

La definición de la tarea debe ser específica para un único tipo de instancia. Debe configurar un contenedor para usar dispositivos AWS Trainium o AWS Inferentia específicos que estén disponibles en la instancia del contenedor anfitrión. Para ello, utilice el parámetro linuxParameters. En la tabla que se muestra a continuación se detallan los chips específicos de cada tipo de instancia.

Tipo de instancia vCPU RAM (GiB) AWS Chips aceleradores de ML Rutas del dispositivo
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

A continuación, se muestra un ejemplo de definición de tarea de Linux para inf1.xlarge en el que se muestra la sintaxis que se va a usar.

{ "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" } ] }