Uso de instancias Inf1 de inferencia en Amazon ECS - Amazon Elastic Container Service

Uso de instancias Inf1 de inferencia en Amazon ECS

Puede registrar instancias Inf1 de Amazon EC2 en los clústeres para cargas de trabajo de inferencia de machine learning. Las instancias Inf1 de Amazon EC2 están equipadas con chips de AWS Inferentia creados a medida por Amazon Web Services para proporcionar 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 SDK especializado. Consiste en un compilador, tiempo de ejecución y herramientas de perfilado que optimizan el rendimiento de inferencia de machine learning de los chips Inferentia. AWS Neuron admite marcos de machine learning populares, como TensorFlow, PyTorch y Apache MXNet (incubating).

Consideraciones

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

  • Los clústeres pueden contener instancias Inf1 y no Inf1 combinadas.

  • Le recomendamos que coloque solo una tarea con un requisito de recursos de Inferentia por cada instancia Inf1.

  • 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 Inf1. Para obtener más información, consulte Ubicación de tareas de Amazon ECS .

    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 Inferentia no se pueden definir en una definición de tareas. Sin embargo, puede configurar un contenedor para que utilice Inferentia específica disponible en la instancia de contenedor del host. Para ello, utilice el parámetro linuxParameters y especifique los detalles del dispositivo. Para obtener más información, consulte Requisitos de definición de tareas .

Uso de la AMI de Amazon Linux 2 (Inferentia) optimizada para Amazon ECS

Amazon ECS proporciona una AMI optimizada para Amazon ECS basada en Amazon Linux 2 para cargas de trabajo de Inferentia. Está preconfigurada con los controladores de AWS Inferentia y el tiempo de ejecución de AWS Neuron 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 (Inferentia) optimizada para Amazon ECS al lanzar las instancias Inf1 de Amazon EC2. Puede recuperar la AMI actual de Amazon Linux 2 (Inferentia) optimizada para Amazon ECS a través de la AWS CLI con el siguiente comando.

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

La siguiente tabla proporciona un enlace para recuperar los ID actuales de la AMI de Amazon Linux 2 (Inferentia) optimizados para Amazon ECS por región.

Nombre de la región

Región

ID de AMI

Este de EE. UU. (Norte de Virginia)

us-east-1

Consulte ID de AMI

Este de EE. UU. (Ohio)

us-east-2

Ver ID de AMI

Oeste de EE. UU. (Oregón)

us-west-2

Consulte ID de AMI

Asia-Pacífico (Bombay)

ap-south-1

Consulte ID de AMI

Asia-Pacífico (Hong Kong)

ap-east-1

Consulte ID de AMI

Asia-Pacífico (Tokio)

ap-northeast-1

Consulte ID de AMI

Asia-Pacífico (Seúl)

ap-northeast-2

Consulte ID de AMI

Asia-Pacífico (Singapur)

ap-southeast-1

Consulte ID de AMI

Asia-Pacífico (Sídney)

ap-southeast-2

Consulte ID de AMI

Asia-Pacífico (Yakarta)

ap-southeast-3

Consulte ID de AMI

Canadá (centro)

ca-central-1

Consulte ID de AMI

Europa (Fráncfort)

eu-central-1

Consulte ID de AMI

Europa (Milán)

eu-south-1

Consulte ID de AMI

Europa (Irlanda)

eu-west-1

Consulte ID de AMI

Europa (París)

eu-west-3

Consulte ID de AMI

Medio Oriente (Baréin)

me-south-1

Consulte ID de AMI

América del Sur (São Paulo)

sa-east-1

Ver ID de AMI

AWS GovCloud (Este de EE. UU.)

us-gov-east-1

Consulte ID de AMI

AWS GovCloud (Oeste de EE. UU.)

us-gov-west-1

Consulte ID de AMI

China (Pekín)

cn-north-1

Consulte ID de AMI

China (Ningxia)

cn-northwest-1

Consulte ID de AMI

Requisitos de definición de tareas

Para implementar Neuron en Amazon ECS, la definición de tareas debe contener la definición de contenedor correspondiente a un contenedor prefabricado que atienda al modelo de inferencia para TensorFlow. Este es proporcionado por AWS Deep Learning Containers. Dentro del contenedor, se incluye el tiempo de ejecución de AWS Neuron y la aplicación TensorFlow Serving. Al iniciarse, este contenedor obtiene su modelo de Amazon S3, lanza Neuron TensorFlow Serving con el modelo guardado y espera las solicitudes de predicción. En el ejemplo a continuación, la imagen de contenedor contiene TensorFlow 1.15 y Ubuntu 18.04. Se conserva una lista completa de Deep Learning Containers prefabricados optimizados para Neuron en GitHub. Para obtener más información, consulte Contenedores de Inferencia de Neuron.

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 Tutorial: Neuron TensorFlow Serving en GitHub.

A continuación, se muestra un ejemplo de definición de tarea de contenedores Linux en Fargate en el que se muestra la sintaxis que se va a utilizar.

{ "family": "ecs-neuron", "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" } ] }