Definições de tarefa do Amazon ECS para workloads de machine learning do AWS Neuron - Amazon Elastic Container Service

Definições de tarefa do Amazon ECS para workloads de machine learning do AWS Neuron

É possível registar as instâncias Amazon EC2 Trn1, Amazon EC2 Inf1 e Amazon EC2 Inf2 nos seus clusters para workloads de machine learning.

As instâncias Trn1 do Amazon EC2 são executadas em chips AWS Trainium. Essas instâncias oferecem treinamento de alta performance e baixo custo para machine learning na nuvem. É possível treinar um modelo de inferência de machine learning usando um framework de machine learning com o AWS Neuron em uma instância Trn1. Em seguida, é possível executar o modelo em uma instância Inf1 ou uma instância Inf2 para usar a aceleração dos chips AWS Inferentia.

As instâncias Inf1 e as instâncias Inf2 do Amazon EC2 são executadas em chips AWS Inferentia. Eles fornecem alta performance e inferência de menor custo na nuvem.

Modelos de machine learning são implantados em contêineres com o uso do AWS Neuron, um kit de desenvolvimento de software (SDK)especializado. O SDK consiste em um compilador, runtime e ferramentas de criação de perfil que otimizam a performance de machine learning dos chips de machine learning da AWS. AWS O Neuron é compatível com frameworks de machine learning conhecidos, como TensorFlow, PyTorch e Apache MXNet.

Considerações

Antes de começar a implantar o Neuron no Amazon ECS, considere o seguinte:

  • Seus clusters podem conter uma combinação de instâncias Trn1, Inf1, Inf2 e outras.

  • Você precisa de uma aplicação do Linux em um contêiner que use um framework de machine learning compatível com o AWS Neuron.

    Importante

    Aplicações que usem outros frameworks podem não apresentar uma melhoria de performance nas instâncias Trn1, Inf1 e Inf2.

  • Apenas uma tarefa de inferência ou de treinamento de inferência pode ser executada em cada chip AWS Trainium ou AWS Inferentia. Para a Inf1, cada chip possui 4 NeuronCores. Para a Trn1 e a Inf2, cada chip possui 2 NeuronCores. É possível executar tantas tarefas quantos forem os chips para cada uma de suas instâncias Trn1, Inf1 e Inf2.

  • Ao criar um serviço ou executar uma tarefa autônoma, você pode usar atributos de tipo de instância ao configurar as restrições de posicionamento de tarefas. Assim, você se certifica de que a tarefa será iniciada na instância de contêiner que você especificar. Isso pode ajudar você a otimizar o uso dos recursos em geral e garantir que as tarefas para workloads de inferência ocorram nas instâncias Trn, Inf1 e Inf2. Para ter mais informações, consulte Como o Amazon ECS posiciona tarefas em instâncias de contêineres.

    No exemplo a seguir, uma tarefa é executada em uma instância Inf1.xlarge do cluster default.

    aws ecs run-task \ --cluster default \ --task-definition ecs-inference-task-def \ --placement-constraints type=memberOf,expression="attribute:ecs.instance-type == Inf1.xlarge"
  • Os requisitos de recursos do Neuron não podem ser definidos em uma definição de tarefa. Em vez disso, você configura um contêiner para usar os chips AWS Trainium ou AWS Inferentia específicos, disponíveis na instância de contêiner host. É possível fazer isso usando o parâmetro linuxParameters e especificando os detalhes do dispositivo. Para ter mais informações, consulte Requisitos de definição de tarefa.

Usar a AMI do Amazon Linux 2023 (Neuron) otimizada para o Amazon ECS

O Amazon ECS fornece uma AMI otimizada para o Amazon ECS que se baseia no Amazon Linux 2023 para workloads do AWS Trainium e do AWS Inferentia. Ela vem com drivers do AWS Neuron e runtime para Docker. Essa AMI facilita a execução de workloads de inferência de machine learning no Amazon ECS.

Recomendamos usar a AMI do Amazon Linux 2023 (Neuron) otimizada para o Amazon ECS ao iniciar as instâncias Trn1, Inf1 e Inf2 do Amazon EC2.

É possível recuperar a AMI atual do Amazon Linux 2023 (Neuron) otimizada para o Amazon ECS ao usar a AWS CLI com o comando a seguir.

aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2023/neuron/recommended

Há suporte para a AMI do Amazon Linux 2023 (Neuron) otimizada para o Amazon ECS nas seguintes regiões:

  • Leste dos EUA (Norte da Virgínia)

  • Leste dos EUA (Ohio)

  • Oeste dos EUA (Norte da Califórnia)

  • Oeste dos EUA (Oregon)

  • Ásia-Pacífico (Mumbai)

  • Ásia-Pacífico (Osaka)

  • Ásia-Pacífico (Seul)

  • Ásia-Pacífico (Tóquio)

  • Ásia-Pacífico (Singapura)

  • Ásia-Pacífico (Sydney)

  • Canadá (Central)

  • Europa (Frankfurt)

  • Europa (Irlanda)

  • Europa (Londres)

  • Europa (Paris)

  • Europa (Estocolmo)

  • América do Sul (São Paulo)

Usar a AMI do Amazon Linux 2 (Neuron) otimizada para o Amazon ECS

O Amazon ECS oferece uma AMI otimizada para o Amazon ECS que é baseada no Amazon Linux 2 para workloads do AWS Trainium e do AWS Inferentia. Ela vem com drivers do AWS Neuron e runtime para Docker. Essa AMI facilita a execução de workloads de inferência de machine learning no Amazon ECS.

Recomendamos o uso da AMI do Amazon Linux 2 (Neuron) otimizada para o Amazon ECS ao iniciar as instâncias Trn, Inf1 e Inf2 do Amazon EC2.

É possível recuperar a AMI atual do Amazon Linux 2 (Neuron) otimizada para o Amazon ECS usando a AWS CLI com o comando a seguir.

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

A AMI do Amazon Linux 2 (Neuron) otimizada para o Amazon ECS é compatível com as seguintes regiões:

  • Leste dos EUA (Norte da Virgínia)

  • Leste dos EUA (Ohio)

  • Oeste dos EUA (Norte da Califórnia)

  • Oeste dos EUA (Oregon)

  • Ásia-Pacífico (Mumbai)

  • Ásia-Pacífico (Osaka)

  • Ásia-Pacífico (Seul)

  • Ásia-Pacífico (Tóquio)

  • Ásia-Pacífico (Singapura)

  • Ásia-Pacífico (Sydney)

  • Canadá (Central)

  • Europa (Frankfurt)

  • Europa (Irlanda)

  • Europa (Londres)

  • Europa (Paris)

  • Europa (Estocolmo)

  • América do Sul (São Paulo)

Requisitos de definição de tarefa

Para implantar o Neuron no Amazon ECS, sua definição de tarefa deve conter a definição do contêiner para um contêiner pré-criado servindo o modelo de inferência do TensorFlow. Além disso, é fornecido por contêiners do AWS Deep Learning. O contêiner possui o runtime do AWS Neuron e a aplicação TensorFlow Serving. No startup, esse container busca o modelo no Amazon S3, inicia o serviço do Neuron TensorFlow com o modelo salvo e aguarda as solicitações de previsão. No exemplo a seguir, a imagem de contêiner tem o TensorFlow 1.15 e o Ubuntu 18.04. Uma lista completa de Deep Learning Containers pré-criados otimizados para Neuron é mantida no GitHub. Para obter mais informações, consulte Uso do AWS Neuron TensorFlow Serving.

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

Como alternativa, é possível criar sua própria imagem de contêiner de arquivo associado do Neuron. Para obter mais informações, consulte Tutorial: Neuron TensorFlow Serving no Guia do desenvolvedor do AMIs de deep learning da AWS.

A definição de tarefa deve ser específica de um único tipo de instância. É necessário configurar um contêiner para usar os dispositivos AWS Trainium ou AWS Inferentia específicos, disponíveis na instância de contêiner host. Para isso, use o parâmetro linuxParameters. A tabela a seguir detalha os chips específicos de cada tipo de instância.

Tipo de instância vCPUs RAM (GiB) Chips aceleradores de ML AWS Caminhos de dispositivos
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