

# Definições de tarefa do Amazon ECS para workloads de machine learning do AWS Neuron
<a name="ecs-inference"></a>

É possível usar instâncias [Amazon EC2 Trn1](https://aws.amazon.com/ec2/instance-types/trn1/), [Amazon EC2 Trn2](https://aws.amazon.com/ec2/instance-types/trn2/), [Amazon EC2 Inf1](https://aws.amazon.com/ec2/instance-types/inf1/) (Inf1 só é compatível com o tipo de inicialização do EC2) e [Amazon EC2 Inf2](https://aws.amazon.com/ec2/instance-types/inf2/) em seus clusters para workloads de machine learning.

As instâncias Trn1 e Trn2 do Amazon EC2 são executadas em chips [AWS Trainium](https://aws.amazon.com/ai/machine-learning/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 ou Trn2. Em seguida, é possível executar o modelo em uma instância Inf1 (Inf1 só é compatível com o tipo de inicialização do EC2) 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](https://aws.amazon.com/ai/machine-learning/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](https://aws.amazon.com/ai/machine-learning/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
<a name="ecs-inference-considerations"></a>

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 `resourceRequirements` com o tipo `NeuronDevice` na 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](#ecs-inference-managed).
  + **Especificação manual de dispositivos Neuron**: use o parâmetro `linuxParameters.devices` para 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](#ecs-inference-ec2).
**Importante**  
Use uma só abordagem de maneira consistente para evitar conflitos.

## Alocação gerenciada de dispositivos Neuron
<a name="ecs-inference-managed"></a>

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](#ecs-inference-ec2).

### Seleção de instâncias Neuron
<a name="ecs-inference-managed-instance-selection"></a>

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`: use `amazon-web-services` para selecionar instâncias com aceleradores AWS (inclui Inferentia e Trainium).
+ `acceleratorNames`: use `inferentia2`, `trainium` ou `trainium2` para selecionar chips aceleradores específicos.
+ `allowedInstanceTypes`: use `inf*` e `trn*` para selecionar os tipos de instância Neuron por nome.

O exemplo a seguir usa `allowedInstanceTypes`:

```
{
    "instanceRequirements": {
        "allowedInstanceTypes": ["inf*", "trn*"]
    }
}
```

### definição da tarefa
<a name="ecs-inference-managed-task-def"></a>

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 `NeuronDevice` em `resourceRequirements`.
+ Você não pode combinar `resourceRequirements` com os tipos `NeuronDevice` e `linuxParameters.devices` para 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](ecs-inference-task-def.md).

## Especificação manual de dispositivo Neuron
<a name="ecs-inference-ec2"></a>

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](https://aws.amazon.com/ai/machine-learning/trainium/) ou [AWSInferentia](https://aws.amazon.com/ai/machine-learning/inferentia/). É possível executar quantas tarefas for possível com os chips disponíveis na instância ao atribuir diferentes dispositivos a cada tarefa.

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](task-placement.md).

### Requisitos de definição de tarefa
<a name="ecs-inference-requirements"></a>

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) | AWSChips aceleradores de ML  | 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 | 2048 | 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 | 4 | 16 | 1 | /dev/neuron0 | 
| inf2.8xlarge | 32 | 128 | 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](ecs-inference-task-def.md).

### Instâncias gerenciadas
<a name="ecs-inference-manual-mi"></a>

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
<a name="ecs-inference-manual-ec2"></a>

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
```