Definições de tarefa do Amazon ECS para workloads de machine learning do AWS Neuron
É possível usar instâncias Amazon EC2 Trn1
As instâncias Trn1 e Trn2 do Amazon EC2 são executadas em chips AWS Trainium
As instâncias Inf1 e as instâncias Inf2 do Amazon EC2 são executadas em chips AWS Inferentia
Modelos de machine learning são implantados em contêineres com o uso do AWS Neuron
Considerações
Antes de começar a implantar o Neuron no Amazon ECS, considere o seguinte:
-
Dependendo do tipo de inicialização, seus clusters podem conter uma combinação de instâncias Trn1, Trn2, Inf1, Inf2 e outras instâncias.
-
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, Trn2, Inf1 e Inf2.
-
O Amazon ECS oferece duas abordagens para configurar o acesso a dispositivos Neuron:
-
Alocação gerenciada de dispositivos Neuron: use o parâmetro
resourceRequirementscom o tipoNeuronDevicena definição do seu contêiner. O Amazon ECS descobre e atribui automaticamente dispositivos Neuron aos seus contêineres. Disponível somente em instâncias gerenciadas. Para obter mais informações, consulte Alocação gerenciada de dispositivos Neuron. -
Especificação manual de dispositivos Neuron: use o parâmetro
linuxParameters.devicespara especificar explicitamente os caminhos do dispositivo Neuron. Disponível tanto no tipo de inicialização do EC2 como para instâncias gerenciadas. Para obter mais informações, consulte Especificação manual de dispositivo Neuron.
Importante
Use uma só abordagem de maneira consistente para evitar conflitos.
-
Alocação gerenciada de dispositivos Neuron
Com as instâncias gerenciadas, você pode usar o parâmetro resourceRequirements na definição do contêiner para solicitar dispositivos Neuron. O Amazon ECS descobre automaticamente os dispositivos Neuron na instância, os atribui à sua tarefa e configura o contêiner com acesso a todos os dispositivos Neuron na instância. Como a tarefa requer acesso exclusivo a todos os dispositivos, apenas uma tarefa do Neuron é executada por instância.
nota
As instâncias Inf1 são compatíveis somente com o tipo de inicialização do EC2. Para usar instâncias Inf1, consulte Especificação manual de dispositivo Neuron.
Seleção de instâncias Neuron
Para selecionar tipos de instância habilitados para Neuron para suas workloads de instâncias gerenciadas, use o objeto instanceRequirements no modelo de inicialização do provedor de capacidade. É possível usar os seguintes atributos para selecionar instâncias habilitadas para Neuron:
-
acceleratorManufacturers: useamazon-web-servicespara selecionar instâncias com aceleradores AWS (inclui Inferentia e Trainium). -
acceleratorNames: useinferentia2,trainiumoutrainium2para selecionar chips aceleradores específicos. -
allowedInstanceTypes: useinf*etrn*para selecionar os tipos de instância Neuron por nome.
O exemplo a seguir usa allowedInstanceTypes:
{ "instanceRequirements": { "allowedInstanceTypes": ["inf*", "trn*"] } }
definição da tarefa
Para solicitar dispositivos Neuron na definição da sua tarefa, adicione uma entrada resourceRequirements com o tipo NeuronDevice e o valor ALL. Isso permite que o contêiner tenha acesso exclusivo a todos os dispositivos Neuron na instância.
As limitações a seguir aplicam-se:
-
É possível ter no máximo uma definição de contêiner especificando
NeuronDeviceemresourceRequirements. -
Você não pode combinar
resourceRequirementscom os tiposNeuronDeviceelinuxParameters.devicespara dispositivos Neuron na mesma definição de tarefa.
Após sua tarefa começar, você poderá verificar a atribuição do dispositivo Neuron chamando a operação DescribeTasks da API. A resposta inclui um campo neuronDeviceIds em cada contêiner mostrando os IDs dos dispositivos Neuron atribuídos. Você também pode chamar a operação DescribeContainerInstances da API para visualizar NEURON_DEVICES nos campos registeredResources e remainingResources da instância de contêiner.
Para um exemplo de definição de tarefa, consulte Exemplo de definições de tarefas do Neuron.
Especificação manual de dispositivo Neuron
Com essa abordagem, você especifica manualmente os caminhos dos dispositivos AWS Trainium ou AWS Inferentia na definição da tarefa usando o parâmetro linuxParameters.devices. Essa abordagem funciona tanto no tipo de inicialização do EC2 como em instâncias gerenciadas.
Apenas uma tarefa de inferência ou de treinamento de inferência pode ser executada em cada chip AWSTrainium
Para o tipo de inicialização do EC2, você pode usar atributos de tipo de instância ao configurar restrições de posicionamento de tarefas para garantir que a tarefa seja iniciada no tipo de instância que você especificar. Para obter mais informações, consulte Como o Amazon ECS posiciona tarefas em instâncias de contêineres.
Requisitos de definição de tarefa
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
|
| trn2.48xlarge | 192 | 1536 | 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 |
Para um exemplo de definição de tarefa, consulte Exemplo de definições de tarefas do Neuron.
Instâncias gerenciadas
As instâncias gerenciadas usam automaticamente uma AMI que inclui o driver Neuron. Não é necessário nenhuma configuração adicional de AMI.
Tipo de inicialização do EC2
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