

# Elastic Fabric Adapter para workloads de IA/ML e HPC no Amazon EC2
<a name="efa"></a>

Um Elastic Fabric Adapter (EFA) é um dispositivo de rede que pode ser conectado à sua instância do Amazon EC2 para acelerar aplicações de Inteligência Artificial (IA), Machine Learning (ML) e Computação de Alta Performance (HPC). O EFA permite atingir a performance da aplicação de um cluster cluster de IA/ML ou HPC on-premises, com a escalabilidade, a flexibilidade e a elasticidade fornecidas pela Nuvem AWS.

O EFA fornece latência mais baixa e mais consistente e maior throughput que o transporte de TCP tradicionalmente usado em sistemas HPC baseados em nuvem. Esse recurso aprimora a performance da comunicação entre instâncias, que é essencial para o dimensionamento de aplicações de IA/ML e HPC. Ele é otimizado para funcionar na infraestrutura de rede da AWS existente e pode ser dimensionado dependendo dos requisitos da aplicação.

O EFA se integra ao Libfabric e é compatível com a Nvidia Collective Communications Library (NCCL) e a NVIDIA Inference Xfer Library (NIXL) para aplicações de IA e ML, e com o Open MPI 4.1 e posterior e o Intel MPI 2019 Update 5 e posterior para aplicações de HPC. O NCCL e MPI se integram ao Libfabric 1.7.0 e versões posteriores. O NIXL se integra ao Libfabric 1.21.0 e versões posteriores.

O EFA oferece suporte para gravação com tecnologia RDMA (Remote Direct Memory Access) na maioria dos tipos de instância compatíveis com a versão 4 ou com versões posteriores do Nitro. A leitura com tecnologia RDMA é compatível com todas as instâncias com a versão 4 ou com versões posteriores do Nitro. Para obter mais informações, consulte [Tipos de instâncias compatíveis](#efa-instance-types).

**Topics**
+ [Conceitos básicos de EFA](#efa-basics)
+ [Interfaces e bibliotecas compatíveis](#efa-mpi)
+ [Tipos de instâncias compatíveis](#efa-instance-types)
+ [Sistemas operacionais compatíveis](#efa-os)
+ [Limitações de EFA](#efa-limits)
+ [Preços do EFA](#efa-pricing)
+ [Conceitos básicos do EFA e MPI](efa-start.md)
+ [Conceitos básicos do EFA e NCCL](efa-start-nccl.md)
+ [Conceitos básicos do EFA e NIXL](efa-start-nixl.md)
+ [Maximize a largura de banda da rede](efa-acc-inst-types.md)
+ [Criar e anexar um EFA](create-efa.md)
+ [Desanexar e excluir um EFA](detach-efa.md)
+ [Monitorar um EFA](efa-working-monitor.md)
+ [Verificar o instalador do EFA](efa-verify.md)
+ [Notas da versão](efa-changelog.md)

## Conceitos básicos de EFA
<a name="efa-basics"></a>

Um dispositivo EFA pode ser conectado a uma instância EC2 de duas formas:

1. Usando uma interface EFA tradicional, também chamada de EFA com ENA, que cria um dispositivo EFA e um dispositivo ENA.

1. Usando uma interface exclusiva do EFA, que cria apenas o dispositivo do EFA.

O dispositivo EFA fornece recursos como desvio de sistema operacional integrado e controle de congestionamento mediante o protocolo Scalable Reliable Datagram (SRD). Os atributos do dispositivo EFA permitem uma funcionalidade de transporte confiável e de baixa latência que permite que a interface EFA forneça melhor performance de aplicações de HPC e ML no Amazon EC2. Já o dispositivo ENA oferece uma rede IP tradicional.

![\[O contraste de uma pilha de software HPC tradicional com uma que usa EFA.\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/images/efa_stack.png)


Tradicionalmente, os aplicativos de IA/ML usam NCCL e NIXL (para inferência desagregada). As aplicações HPC usam a Message Passing Interface (MPI) para fazer interface com o transporte de rede do sistema. Na Nuvem AWS, isso significa que as aplicações fazem interface com NCCL, NIXL ou MPI, que usa a pilha TCP/IP do sistema operacional e o driver de dispositivo ENA para habilitar a comunicação de rede entre as instâncias.

Com uma interface tradicional EFA (EFA com ENA) ou somente EFA, as aplicações de IA/ML usam NCCL e NIXL (para inferência desagregada). As aplicações HPC usam a MPI para fazer interface diretamente com a API Libfabric. A API Libfabric ignora o kernel do sistema operacional e se comunica diretamente com o dispositivo EFA para colocar pacotes na rede. Isso reduz a sobrecarga e permite que as aplicações de IA/ML e HPC sejam executadas com mais eficiência.

**nota**  
O Libfabric é um componente central do framework OpenFabrics Interfaces (OFI), que define e exporta a API do espaço do usuário do OFI. Para obter mais informações, consulte o site [Libfabric OpenFabrics](https://ofiwg.github.io/libfabric/).

### Diferenças entre as interfaces de rede ENA, EFA e somente EFA
<a name="efa-differences"></a>

O Amazon EC2 fornece dois tipos de interfaces de rede:
+ As interfaces **ENA** fornecem todos os atributos tradicionais de rede IP e roteamento necessários para oferecer suporte à rede IP para uma VPC. Para mais informações, consulte [Habilitar redes aperfeiçoadas com o ENA em instâncias do EC2](enhanced-networking-ena.md).
+ As interfaces **EFA** (EFA com ENA) fornecem o dispositivo ENA para rede IP e o dispositivo EFA para comunicação de baixa latência e alto throughput.
+ As interfaces **exclusivamente EFA** são compatíveis apenas com os recursos do dispositivo EFA, sem o dispositivo ENA para redes IP tradicionais.

A tabela a seguir apresenta uma comparação das interfaces de rede ENA, EFA e exclusivamente EFA.


|  | ENA | EFA (EFA com ENA) | Exclusivamente EFA | 
| --- | --- | --- | --- | 
| Compatível com a funcionalidade de rede IP | Sim | Sim | Não | 
| Podem ser atribuídos endereços IPv4 ou IPv6 | Sim | Sim | Não | 
| Pode ser usado como interface de rede primária, por exemplo | Sim | Sim | Não | 
| Conta para o limite de anexos de ENI da instância | Sim | Sim | Sim | 
| Compatível com o tipo de instância | Compatível com todos os tipos de instâncias baseadas em Nitro | [Tipos de instâncias compatíveis](#efa-instance-types) | [Tipos de instâncias compatíveis](#efa-instance-types) | 
| Nomeação de parâmetro nas APIs do EC2 | interface | efa | efa-only | 
| Nomeação de campo no console do EC2 | Nenhuma seleção | EFA com ENA | Exclusivamente EFA | 

## Interfaces e bibliotecas compatíveis
<a name="efa-mpi"></a>

Os EFAs oferecem suporte às seguintes interfaces e bibliotecas:
+ Open MPI 4.1 e posteriores
+ Intel MPI 2019 Update 5 e posteriores
+ NVIDIA Collective Communications Library (NCCL) 2.4.2 e posterior
+ NVIDIA Inference Xfer Library (NIXL) 1.0.0 e posterior
+ AWS Neuron SDK versão 2.3 e posterior

## Tipos de instâncias compatíveis
<a name="efa-instance-types"></a>

Todos os tipos de instância a seguir oferecem suporte para EFA. Além disso, as tabelas indicam o suporte a leitura e gravação RDMA para os tipos de instâncias.

------
#### [ Nitro v6 ]


| Tipo de instância | Suporte para a leitura com tecnologia RDMA | Suporte para a gravação com tecnologia RDMA | 
| --- |--- |--- |
| Finalidade geral | 
| --- |
| m8a.48xlarge | Yes | Yes | 
| m8a.metal-48xl | Yes | Yes | 
| m8azn.24xlarge | Yes | Yes | 
| m8azn.metal-24xl | Yes | Yes | 
| m8gb.16xlarge | Yes | Yes | 
| m8gb.24xlarge | Yes | Yes | 
| m8gb.48xlarge | Yes | Yes | 
| m8gb.metal-24xl | Yes | Yes | 
| m8gb.metal-48xl | Yes | Yes | 
| m8gn.16xlarge | Yes | Yes | 
| m8gn.24xlarge | Yes | Yes | 
| m8gn.48xlarge | Yes | Yes | 
| m8gn.metal-24xl | Yes | Yes | 
| m8gn.metal-48xl | Yes | Yes | 
| m8i.48xlarge | Yes | Yes | 
| m8i.96xlarge | Yes | Yes | 
| m8i.metal-48xl | Yes | Yes | 
| m8i.metal-96xl | Yes | Yes | 
| m8id.48xlarge | Yes | Yes | 
| m8id.96xlarge | Yes | Yes | 
| m8id.metal-48xl | Yes | Yes | 
| m8id.metal-96xl | Yes | Yes | 
| Otimizadas para computação | 
| --- |
| c8a.48xlarge | Yes | Yes | 
| c8a.metal-48xl | Yes | Yes | 
| c8gb.16xlarge | Yes | Yes | 
| c8gb.24xlarge | Yes | Yes | 
| c8gb.48xlarge | Yes | Yes | 
| c8gb.metal-24xl | Yes | Yes | 
| c8gb.metal-48xl | Yes | Yes | 
| c8gn.16xlarge | Yes | Yes | 
| c8gn.24xlarge | Yes | Yes | 
| c8gn.48xlarge | Yes | Yes | 
| c8gn.metal-24xl | Yes | Yes | 
| c8gn.metal-48xl | Yes | Yes | 
| c8i.48xlarge | Yes | Yes | 
| c8i.96xlarge | Yes | Yes | 
| c8i.metal-48xl | Yes | Yes | 
| c8i.metal-96xl | Yes | Yes | 
| c8id.48xlarge | Yes | Yes | 
| c8id.96xlarge | Yes | Yes | 
| c8id.metal-48xl | Yes | Yes | 
| c8id.metal-96xl | Yes | Yes | 
| Otimizadas para memória | 
| --- |
| r8a.48xlarge | Yes | Yes | 
| r8a.metal-48xl | Yes | Yes | 
| r8gb.16xlarge | Yes | Yes | 
| r8gb.24xlarge | Yes | Yes | 
| r8gb.48xlarge | Yes | Yes | 
| r8gb.metal-24xl | Yes | Yes | 
| r8gb.metal-48xl | Yes | Yes | 
| r8gn.16xlarge | Yes | Yes | 
| r8gn.24xlarge | Yes | Yes | 
| r8gn.48xlarge | Yes | Yes | 
| r8gn.metal-24xl | Yes | Yes | 
| r8gn.metal-48xl | Yes | Yes | 
| r8i.48xlarge | Yes | Yes | 
| r8i.96xlarge | Yes | Yes | 
| r8i.metal-48xl | Yes | Yes | 
| r8i.metal-96xl | Yes | Yes | 
| r8id.48xlarge | Yes | Yes | 
| r8id.96xlarge | Yes | Yes | 
| r8id.metal-48xl | Yes | Yes | 
| r8id.metal-96xl | Yes | Yes | 
| x8aedz.24xlarge | Yes | Yes | 
| x8aedz.metal-24xl | Yes | Yes | 
| x8i.48xlarge | Yes | Yes | 
| x8i.64xlarge | Yes | Yes | 
| x8i.96xlarge | Yes | Yes | 
| x8i.metal-48xl | Yes | Yes | 
| x8i.metal-96xl | Yes | Yes | 
| Otimizada para armazenamento | 
| --- |
| i8ge.48xlarge | Yes | No | 
| i8ge.metal-48xl | Yes | No | 
| Computação acelerada | 
| --- |
| g7e.8xlarge | Yes | Yes | 
| g7e.12xlarge | Yes | Yes | 
| g7e.24xlarge | Yes | Yes | 
| g7e.48xlarge | Yes | Yes | 
| p6-b200.48xlarge | Yes | Yes | 
| p6-b300.48xlarge | Yes | Yes | 
| Computação de alta performance | 
| --- |
| hpc8a.96xlarge | Yes | Yes | 

------
#### [ Nitro v5 ]


| Tipo de instância | Suporte para a leitura com tecnologia RDMA | Suporte para a gravação com tecnologia RDMA | 
| --- |--- |--- |
| Finalidade geral | 
| --- |
| m8g.24xlarge | Yes | No | 
| m8g.48xlarge | Yes | No | 
| m8g.metal-24xl | Yes | No | 
| m8g.metal-48xl | Yes | No | 
| m8gd.24xlarge | No | No | 
| m8gd.48xlarge | No | No | 
| m8gd.metal-24xl | No | No | 
| m8gd.metal-48xl | No | No | 
| Otimizadas para computação | 
| --- |
| c7gn.16xlarge | Yes | No | 
| c7gn.metal | Yes | No | 
| c8g.24xlarge | Yes | No | 
| c8g.48xlarge | Yes | No | 
| c8g.metal-24xl | Yes | No | 
| c8g.metal-48xl | Yes | No | 
| c8gd.24xlarge | No | No | 
| c8gd.48xlarge | No | No | 
| c8gd.metal-24xl | No | No | 
| c8gd.metal-48xl | No | No | 
| Otimizadas para memória | 
| --- |
| r8g.24xlarge | No | No | 
| r8g.48xlarge | No | No | 
| r8g.metal-24xl | No | No | 
| r8g.metal-48xl | No | No | 
| r8gd.24xlarge | No | No | 
| r8gd.48xlarge | No | No | 
| r8gd.metal-24xl | No | No | 
| r8gd.metal-48xl | No | No | 
| x8g.24xlarge | No | No | 
| x8g.48xlarge | No | No | 
| x8g.metal-24xl | No | No | 
| x8g.metal-48xl | No | No | 
| Otimizada para armazenamento | 
| --- |
| i7ie.48xlarge | Yes | No | 
| i7ie.metal-48xl | Yes | No | 
| i8g.48xlarge | No | No | 
| i8g.metal-48xl | No | No | 
| Computação acelerada | 
| --- |
| p5en.48xlarge | Yes | Yes | 
| p6e-gb200.36xlarge | Yes | Yes | 
| trn2.3xlarge | Yes | Yes | 
| trn2.48xlarge | Yes | Yes | 
| trn2u.48xlarge | Yes | Yes | 
| Computação de alta performance | 
| --- |
| hpc7g.4xlarge | Yes | No | 
| hpc7g.8xlarge | Yes | No | 
| hpc7g.16xlarge | Yes | No | 

------
#### [ Nitro v4 ]


| Tipo de instância | Suporte para a leitura com tecnologia RDMA | Suporte para a gravação com tecnologia RDMA | 
| --- |--- |--- |
| Finalidade geral | 
| --- |
| m6a.48xlarge | Yes | Yes | 
| m6a.metal | Yes | Yes | 
| m6i.32xlarge | Yes | Yes | 
| m6i.metal | Yes | Yes | 
| m6id.32xlarge | Yes | Yes | 
| m6id.metal | Yes | Yes | 
| m6idn.32xlarge | Yes | Yes | 
| m6idn.metal | Yes | Yes | 
| m6in.32xlarge | Yes | Yes | 
| m6in.metal | Yes | Yes | 
| m7a.48xlarge | Yes | No | 
| m7a.metal-48xl | Yes | No | 
| m7g.16xlarge | Yes | No | 
| m7g.metal | Yes | No | 
| m7gd.16xlarge | Yes | No | 
| m7gd.metal | Yes | No | 
| m7i.48xlarge | Yes | No | 
| m7i.metal-48xl | Yes | No | 
| Otimizadas para computação | 
| --- |
| c6a.48xlarge | Yes | Yes | 
| c6a.metal | Yes | Yes | 
| c6gn.16xlarge | Yes | Yes | 
| c6i.32xlarge | Yes | Yes | 
| c6i.metal | Yes | Yes | 
| c6id.32xlarge | Yes | Yes | 
| c6id.metal | Yes | Yes | 
| c6in.32xlarge | Yes | Yes | 
| c6in.metal | Yes | Yes | 
| c7a.48xlarge | Yes | No | 
| c7a.metal-48xl | Yes | No | 
| c7g.16xlarge | Yes | Yes | 
| c7g.metal | Yes | Yes | 
| c7gd.16xlarge | Yes | No | 
| c7gd.metal | Yes | No | 
| c7i.48xlarge | Yes | No | 
| c7i.metal-48xl | Yes | No | 
| Otimizadas para memória | 
| --- |
| r6a.48xlarge | Yes | Yes | 
| r6a.metal | Yes | Yes | 
| r6i.32xlarge | Yes | Yes | 
| r6i.metal | Yes | Yes | 
| r6id.32xlarge | Yes | Yes | 
| r6id.metal | Yes | Yes | 
| r6idn.32xlarge | Yes | Yes | 
| r6idn.metal | Yes | Yes | 
| r6in.32xlarge | Yes | Yes | 
| r6in.metal | Yes | Yes | 
| r7a.48xlarge | No | No | 
| r7a.metal-48xl | No | No | 
| r7g.16xlarge | No | No | 
| r7g.metal | No | No | 
| r7gd.16xlarge | No | No | 
| r7gd.metal | No | No | 
| r7i.48xlarge | No | No | 
| r7i.metal-48xl | No | No | 
| r7iz.32xlarge | No | No | 
| r7iz.metal-32xl | No | No | 
| u7i-6tb.112xlarge | Yes | Yes | 
| u7i-8tb.112xlarge | Yes | Yes | 
| u7i-12tb.224xlarge | Yes | Yes | 
| u7in-16tb.224xlarge | Yes | Yes | 
| u7in-24tb.224xlarge | Yes | Yes | 
| u7in-32tb.224xlarge | Yes | Yes | 
| u7inh-32tb.480xlarge | Yes | Yes | 
| x2idn.32xlarge | Yes | Yes | 
| x2idn.metal | Yes | Yes | 
| x2iedn.32xlarge | Yes | Yes | 
| x2iedn.metal | Yes | Yes | 
| Otimizada para armazenamento | 
| --- |
| i4g.16xlarge | Yes | Yes | 
| i4i.32xlarge | Yes | Yes | 
| i4i.metal | Yes | Yes | 
| i7i.24xlarge | Yes | No | 
| i7i.48xlarge | Yes | No | 
| i7i.metal-48xl | Yes | No | 
| im4gn.16xlarge | Yes | Yes | 
| Computação acelerada | 
| --- |
| f2.48xlarge | Yes | Yes | 
| g6.8xlarge | Yes | Yes | 
| g6.12xlarge | Yes | Yes | 
| g6.16xlarge | Yes | Yes | 
| g6.24xlarge | Yes | Yes | 
| g6.48xlarge | Yes | Yes | 
| g6e.8xlarge | Yes | Yes | 
| g6e.12xlarge | Yes | Yes | 
| g6e.16xlarge | Yes | Yes | 
| g6e.24xlarge | Yes | Yes | 
| g6e.48xlarge | Yes | Yes | 
| gr6.8xlarge | Yes | Yes | 
| p5.4xlarge | Yes | Yes | 
| p5.48xlarge | Yes | Yes | 
| p5e.48xlarge | Yes | Yes | 
| trn1.32xlarge | Yes | Yes | 
| trn1n.32xlarge | Yes | Yes | 
| Computação de alta performance | 
| --- |
| hpc6a.48xlarge | Yes | Yes | 
| hpc6id.32xlarge | Yes | Yes | 
| hpc7a.12xlarge | Yes | No | 
| hpc7a.24xlarge | Yes | No | 
| hpc7a.48xlarge | Yes | No | 
| hpc7a.96xlarge | Yes | No | 

------
#### [ Nitro v3 ]


| Tipo de instância | Suporte para a leitura com tecnologia RDMA | Suporte para a gravação com tecnologia RDMA | 
| --- |--- |--- |
| Finalidade geral | 
| --- |
| m5dn.24xlarge | No | No | 
| m5dn.metal | No | No | 
| m5n.24xlarge | No | No | 
| m5n.metal | No | No | 
| m5zn.12xlarge | No | No | 
| m5zn.metal | No | No | 
| Otimizadas para computação | 
| --- |
| c5n.9xlarge | No | No | 
| c5n.18xlarge | No | No | 
| c5n.metal | No | No | 
| Otimizadas para memória | 
| --- |
| r5dn.24xlarge | No | No | 
| r5dn.metal | No | No | 
| r5n.24xlarge | No | No | 
| r5n.metal | No | No | 
| x2iezn.12xlarge | No | No | 
| x2iezn.metal | No | No | 
| Otimizada para armazenamento | 
| --- |
| i3en.12xlarge | No | No | 
| i3en.24xlarge | No | No | 
| i3en.metal | No | No | 
| Computação acelerada | 
| --- |
| dl1.24xlarge | Yes | No | 
| dl2q.24xlarge | No | No | 
| g4dn.8xlarge | No | No | 
| g4dn.12xlarge | No | No | 
| g4dn.16xlarge | No | No | 
| g4dn.metal | No | No | 
| g5.8xlarge | No | No | 
| g5.12xlarge | No | No | 
| g5.16xlarge | No | No | 
| g5.24xlarge | No | No | 
| g5.48xlarge | No | No | 
| inf1.24xlarge | No | No | 
| p3dn.24xlarge | No | No | 
| p4d.24xlarge | Yes | No | 
| p4de.24xlarge | Yes | No | 
| vt1.24xlarge | No | No | 
| Geração anterior | 
| --- |
| p3dn.24xlarge | No | No | 

------

**Para ver os tipos de instância disponíveis com suporte a EFAs em uma região específica**  
Os tipos de instância disponíveis variam de acordo com a região. Para ver os tipos de instâncias disponíveis com suporte a EFAs em uma região, use o comando [describe-instance-types](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-types.html) com o parâmetro `--region`. Inclua o parâmetro `--filters` para definir o escopo dos resultados para os tipos de instância com suporte a EFA e o parâmetro `--query` para definir o escopo da saída para o valor de `InstanceType`.

```
aws ec2 describe-instance-types \
    --region us-east-1  \
    --filters Name=network-info.efa-supported,Values=true \
    --query "InstanceTypes[*].[InstanceType]"  \
    --output text | sort
```

## Sistemas operacionais compatíveis
<a name="efa-os"></a>

O suporte ao sistema operacional varia dependendo do tipo de processador. A tabela a seguir mostra os sistemas operacionais compatíveis.


| Sistema operacional | Tipos de instância Intel/AMD (`x86_64`) | Tipos de instância AWS Graviton (`arm64`) | 
| --- | --- | --- | 
| Amazon Linux 2023 | ✓ | ✓ | 
| Amazon Linux 2 | ✓ | ✓ | 
| RHEL 8 e 9 | ✓ | ✓ | 
| Debian 11, 12 e 13 | ✓ | ✓ | 
| Rocky Linux 8 e 9 | ✓ | ✓ | 
| Ubuntu 22.04 e 24.04 | ✓ | ✓ | 
| SUSE Linux Enterprise 15 SP2 e posterior | ✓ | ✓ | 
| OpenSUSE Leap 15.5 e posterior | ✓ |  | 

**nota**  
Alguns dos sistemas operacionais listados podem não ser compatíveis com a Intel MPI. Se você estiver usando a Intel MPI, consulte a [documentação da Intel MPI](https://www.intel.com/content/www/us/en/developer/articles/system-requirements/mpi-library-system-requirements.html) para verificar a compatibilidade com seu sistema operacional.

## Limitações de EFA
<a name="efa-limits"></a>

Os EFAs têm as seguintes limitações:
+ A gravação com a tecnologia RDMA não é compatível com todos os tipos de instância. Para obter mais informações, consulte [Tipos de instâncias compatíveis](#efa-instance-types).
+ Atualmente, o tráfego1 EFA entre instâncias P4d/P4de/DL1 e outros tipos de instância não é compatível.
+ [Os tipos de instância compatíveis com várias placas de rede](using-eni.md#network-cards) podem ser configurados com um EFA por placa de rede. Todos os outros tipos de instância compatíveis oferecem suporte a apenas um EFA por instância.
+ Instâncias dedicadas `c7g.16xlarge`, `m7g.16xlarge` e `r7g.16xlarge` e hosts dedicados não são compatíveis quando um EFA está anexado.
+ O tráfego1 EFA não pode cruzar zonas de disponibilidade ou VPCs. Isso não se aplica ao tráfego IP normal do dispositivo ENA de uma interface EFA.
+ O tráfego1 EFA não é roteável. O tráfego IP normal do dispositivo ENA de uma interface EFA permanece roteável.
+ EFA não é compatível com o AWS Outposts.
+ O dispositivo EFA de uma interface EFA (EFA com ENA) é compatível com instâncias do Windows somente para aplicações AWS Cloud Digital Interface baseadas no Kit de Desenvolvimento de Software (AWS CDI SDK). Ao anexar uma interface EFA (EFA com ENA) a uma instância do Windows para aplicações não baseadas no SDK do CDI, ela funcionará como uma interface ENA, sem os recursos adicionais do dispositivo EFA. A interface exclusiva do EFA não é compatível com aplicações AWS CDI baseadas em Windows ou Linux. Para obter mais informações, consulte o Guia do Usuário do [AWS Cloud Digital Interface Kit de Desenvolvimento de Software (AWS CDI SDK)](https://docs.aws.amazon.com/CDI-SDK/latest/ug/what-is.html).

1 O *tráfego EFA* se refere ao tráfego transmitido pelo dispositivo EFA de uma interface EFA (EFA com ENA) ou exclusivamente EFA.

## Preços do EFA
<a name="efa-pricing"></a>

O EFA está disponível como um recurso de rede opcional do Amazon EC2 que pode ser habilitado em qualquer instância compatível sem nenhum custo adicional.

# Conceitos básicos do EFA e MPI para workloads de HPC no Amazon EC2
<a name="efa-start"></a>

Este tutorial ajuda a executar um cluster de instância habilitado para MPI e EFA para workloads de HPC.

**nota**  
As instâncias `u7i-12tb.224xlarge`, `u7in-16tb.224xlarge`, `u7in-24tb.224xlarge` e `u7in-32tb.224xlarge` podem executar até 128 processos MPI paralelos com o Open MPI ou até 256 processos MPI paralelos com o Intel MPI.

**Topics**
+ [Etapa 1: Preparar um grupo de segurança habilitado para EFA](#efa-start-security)
+ [Etapa 2: Iniciar uma instância temporária](#efa-start-tempinstance)
+ [Etapa 3: Instalar o software EFA](#efa-start-enable)
+ [Etapa 4: (*opcional*) habilitar o Open MPI 5](#efa-start-ompi5)
+ [Etapa 5: (*opcional*) instalar o Intel MPI](#efa-start-impi)
+ [Etapa 6: desabilitar a proteção ptrace](#efa-start-ptrace)
+ [Etapa 7. Confirmar instalação](#efa-start-test)
+ [Etapa 8: instalar a aplicação de HPC](#efa-start-hpc-app)
+ [Etapa 9: criar uma AMI habilitada para EFA](#efa-start-ami)
+ [Etapa 10: executar instâncias habilitadas para EFA em um grupo de posicionamento de cluster](#efa-start-instances)
+ [Etapa 11: Encerrar a instância temporária](#efa-start-terminate)
+ [Etapa 12: habilitar SSH sem senha](#efa-start-passwordless)

## Etapa 1: Preparar um grupo de segurança habilitado para EFA
<a name="efa-start-security"></a>

Um EFA requer um grupo de segurança que permita todo o tráfego de entrada e saída do grupo de segurança e para ele próprio. O procedimento a seguir cria um grupo de segurança que permite todo o tráfego de entrada e saída de e para si mesmo e que permite tráfego SSH de entrada de qualquer endereço IPv4 para conectividade SSH.

**Importante**  
Esse grupo de segurança deve ser usado apenas para fins de teste. Para seus ambientes de produção, recomendamos que você crie uma regra SSH de entrada que permita o tráfego somente do endereço IP do qual você está se conectando, como o endereço IP do seu computador ou uma variedade de endereços IP na sua rede local.

Para outros cenários, consulte [Regras de grupo de segurança para diferentes casos de uso](security-group-rules-reference.md).

**Para criar um grupo de segurança habilitado para EFA**

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. No painel de navegação, escolha **Security Groups** (Grupos de segurança) e, em seguida, **Create Security Group** (Criar grupo de segurança).

1. Na janela **Security group** (Grupo de segurança), faça o seguinte:

   1. Em **Security group name** (Nome do grupo de segurança), insira um nome descritivo para o grupo de segurança, como `EFA-enabled security group`.

   1. (Opcional) Em **Description** (Descrição), insira uma breve descrição do grupo de segurança.

   1. Em **VPC**, selecione a VPC na qual você pretende executar suas instâncias habilitadas para EFA.

   1. Escolha **Criar grupo de segurança**.

1. Selecione o grupo de segurança que você criou e, na guia **Details** (Detalhes), copie o **Security group** (Grupo de segurança).

1. Com o grupo de segurança ainda selecionado, escolha **Actions** (Ações), **Edit inbound rules** (Editar regras de entrada), e faça o seguinte:

   1. Escolha **Adicionar regra**.

   1. Para **Tipo**, escolha **Todo o tráfego**.

   1. Para **Source type** (Tipo de origem), escolha **Custom** (Personalizado) e cole o ID do grupo de segurança que você copiou no campo.

   1. Escolha **Adicionar regra**.

   1. Para **Tipo**, escolha **SSH**.

   1. Para **Source type** (Tipo de origem), escolha **Anywhere-IPv4** (IPv4 em qualquer lugar).

   1. Selecione **Salvar regras**.

1. Na lista, selecione o grupo de segurança e escolha **Actions** (Ações), **Edit outbound rules** (Editar regras de saída), e faça o seguinte:

   1. Escolha **Adicionar regra**.

   1. Para **Tipo**, escolha **Todo o tráfego**.

   1. Para **Destination** (Destino), escolha **Custom** (Personalizado) e cole o ID do grupo de segurança que você copiou no campo.

   1. Selecione **Salvar regras**.

## Etapa 2: Iniciar uma instância temporária
<a name="efa-start-tempinstance"></a>

Execute uma instância temporária que é possível usar para instalar e configurar os componentes do software EFA. Você usa essa instância para criar um AMI habilitado para EFA a partir do qual é possível executar suas instâncias habilitadas para EFA. 

**Para executar uma instância temporária**

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. No painel de navegação, selecione **Instances** (Instâncias) e, depois, escolha **Launch Instances** (Iniciar instâncias) para abrir o novo assistente de inicialização de instância.

1. (*Opcional*) Na seção **Name and tags** (Nome e etiquetas), forneça um nome para a instância, como `EFA-instance`. O nome é atribuído à instância como uma etiqueta de recurso (`Name=EFA-instance`).

1. Na seção **Application and OS Images** (Imagens de aplicação e sistema operacional), selecione uma AMI para um dos [sistemas operacionais compatíveis](efa.md#efa-os).

1. Na seção **Instance type** (Tipo de instância), selecione um [tipo de instância compatível](efa.md#efa-instance-types).

1. Na seção **Key pair** (Par de chaves), selecione o par de chaves a ser usado na instância.

1. Na seção **Network settings** (Configurações da rede), escolha **Edit** (Editar) e faça o seguinte:

   1. Em **Subnet (Sub-rede)**, escolha a sub-rede na qual deseja iniciar a instância. Se você não selecionar uma sub-rede, não será possível habilitar a instância para o EFA.

   1. Para **Firewall (security groups)** (Firewall/grupos de segurança), escolha **Select existing security group** (Selecione grupo de segurança existente) e, em seguida, selecione o grupo de segurança que você criou na etapa anterior.

   1. Expanda a seção **Configuração de rede avançada**.

      Para **Interface de rede 1**, selecione **Índice da placa de rede = 0**, **Índice do dispositivo = 0** e **Tipo de interface = EFA com ENA**.

      (Opcional) Caso esteja usando um tipo de instância com várias placas, como `p4d.24xlarge` ou `p5.48xlarge`, para cada interface de rede adicional necessária, selecione **Adicionar interface de rede**, em **Índice da placa de rede** selecione o próximo índice não utilizado e, em seguida, selecione **Índice do dispositivo = 1** e **Tipo de interface = EFA com ENA** ou **exclusivamente EFA**.

1. Na seção **Storage** (Armazenamento), configure os volumes conforme necessário.

1. No painel **Summary** (Resumo) painel, escolha **Launch instance** (Iniciar instância).

**nota**  
Considere exigir o uso do IMDSv2 para a instância temporária, bem como para a AMI que você criará na [Etapa 9](#efa-start-ami), a menos que já tenha [definido o IMDSv2 como padrão para a conta](configuring-IMDS-new-instances.md#set-imdsv2-account-defaults). Para obter mais informações sobre as etapas da configuração do IMDSv2, consulte [Configurar opções de metadados da instância para novas instâncias](configuring-IMDS-new-instances.md). 

## Etapa 3: Instalar o software EFA
<a name="efa-start-enable"></a>

Instale o kernel habilitado para EFA, drivers EFA, Libfabric e pilha Open MPI que é necessário para oferecer compatibilidade com EFA em sua instância temporária.

As etapas diferem dependendo de como você planeja usar o EFA com Open MPI, com Intel MPI ou com Open MPI e Intel MPI.

**nota**  
Alguns dos sistemas operacionais podem não ser compatíveis com a Intel MPI. Se você estiver usando a Intel MPI, consulte a [documentação da Intel MPI](https://www.intel.com/content/www/us/en/developer/articles/system-requirements/mpi-library-system-requirements.html) para verificar a compatibilidade com seu sistema operacional.

**Como instalar o software EFA**

1. Conecte à instância que você iniciou. Para obter mais informações, consulte [Conectar-se à instância do Linux usando SSH](connect-to-linux-instance.md).

1. Para garantir que todos os pacotes de software estejam atualizados, execute uma atualização rápida de software em sua instância. esse processo pode demorar alguns minutos.
   + Amazon Linux 2023, Amazon Linux 2, RHEL 8/9, Rocky Linux 8/9

     ```
     $ sudo yum update -y
     ```
   + Ubuntu e Debian

     ```
     $ sudo apt-get update && sudo apt-get upgrade -y
     ```
   + SUSE Linux Enterprise

     ```
     $ sudo zypper update -y
     ```

1. Reinicialize a instância e reconecte-se a ela.

1. Faça download dos arquivos de instalação do software do EFA. Os arquivos de instalação do software são empacotados em um arquivo compactado tarball (`.tar.gz`). Para fazer download da última versão *estável*, use o seguinte comando:

   Também é possível obter a versão mais recente substituindo o número da versão por `latest` no comando acima.

   ```
   $ curl -O https://efa-installer.amazonaws.com/aws-efa-installer-1.47.0.tar.gz
   ```

1. (*Opcional*) Verifique a autenticidade e a integridade do arquivo do EFA tarball (`.tar.gz`).

   Recomendamos que você faça isso para verificar a identidade do fornecedor do software e para verificar se a aplicação não foi alterada ou corrompida desde que foi publicada. Se você não deseja verificar o arquivo tarball, ignore esta etapa.
**nota**  
Como alternativa, se você preferir verificar o arquivo tarball usando uma soma de verificação MD5 ou SHA256, consulte [Verificar o instalador EFA usando uma soma de verificação](efa-verify.md).

   1. Faça download da chave GPG pública e importe-a para seu pen-drive.

      ```
      $ wget https://efa-installer.amazonaws.com/aws-efa-installer.key && gpg --import aws-efa-installer.key
      ```

      O comando deve retornar um valor de chave. Anote o valor da chave, pois ele será necessário na próxima etapa.

   1. Verifique a impressão digital da chave GPG. Execute o seguinte comando e especifique o valor de chave da etapa anterior.

      ```
      $ gpg --fingerprint key_value
      ```

      O comando deve retornar uma impressão digital idêntica a `4E90 91BC BB97 A96B 26B1 5E59 A054 80B1 DD2D 3CCC`. Se a impressão digital não corresponder, não execute o script de instalação do EFA e entre em contato com o Suporte.

   1. Faça download do arquivo de assinatura e verifique a assinatura do arquivo tarball EFA.

      ```
      $ wget https://efa-installer.amazonaws.com/aws-efa-installer-1.47.0.tar.gz.sig && gpg --verify ./aws-efa-installer-1.47.0.tar.gz.sig
      ```

      Veja a seguir um exemplo de saída.

      ```
      gpg: Signature made Wed 29 Jul 2020 12:50:13 AM UTC using RSA key ID DD2D3CCC
      gpg: Good signature from "Amazon EC2 EFA <ec2-efa-maintainers@amazon.com>"
      gpg: WARNING: This key is not certified with a trusted signature!
      gpg:          There is no indication that the signature belongs to the owner.
      Primary key fingerprint: 4E90 91BC BB97 A96B 26B1  5E59 A054 80B1 DD2D 3CCC
      ```

      Se o resultado incluir `Good signature` e a impressão digital corresponder à impressão digital retornada na etapa anterior, passe para a próxima etapa. Caso contrário, não execute o script de instalação do EFA e entre em contato com o Suporte.

1. Extraia os arquivos do arquivo compactado `.tar.gz` e navegue para o diretório extraído.

   ```
   $ tar -xf aws-efa-installer-1.47.0.tar.gz && cd aws-efa-installer
   ```

1. Instale o software EFA. Dependendo de seu caso de uso, faça o seguinte.
**nota**  
**O EFA não oferece suporte ao NVIDIA GPUDirect com o SUSE Linux**. Caso esteja usando SUSE Linux, você deverá especificar também a opção `--skip-kmod` para impedir a instalação do kmod. Por padrão, o SUSE Linux não permite módulos fora da árvore do kernel.

------
#### [ Open MPI and Intel MPI ]

   Se planeja usar o EFA com Open MPI e Intel MPI, é necessário instalar o software EFA com Libfabric e Open MPI e **concluir a Etapa 5: instalar o Intel MPI**.

   Para instalar o software EFA com Libfabric e Open MPI, execute o comando a seguir.

**nota**  
A partir do EFA 1.30.0, tanto a Open MPI 4.1 quanto a Open MPI 5 são instaladas por padrão. Opcionalmente, você pode especificar a versão do Open MPI que deseja instalar. Para instalar apenas a Open MPI 4.1, inclua `--mpi=openmpi4`. Para instalar somente o Open MPI 5, inclua `--mpi=openmpi5`. Para instalar os dois, omita a opção `--mpi`.

   ```
   $ sudo ./efa_installer.sh -y
   ```

   O Libfabric está instalado em `/opt/amazon/efa`. A Open MPI 4.1 é instalada em `/opt/amazon/openmpi`. O Open MPI 5 está instalado em `/opt/amazon/openmpi5`.

------
#### [ Open MPI only ]

   Se planeja usar o EFA somente com Open MPI, é necessário instalar o software EFA com Libfabric e Open MPI, podendo **ignorar a Etapa 5: instalar o Intel MPI**. Para instalar o software EFA com Libfabric e Open MPI, execute o comando a seguir.

**nota**  
A partir do EFA 1.30.0, tanto a Open MPI 4.1 quanto a Open MPI 5 são instaladas por padrão. Opcionalmente, você pode especificar a versão do Open MPI que deseja instalar. Para instalar apenas a Open MPI 4.1, inclua `--mpi=openmpi4`. Para instalar somente o Open MPI 5, inclua `--mpi=openmpi5`. Para instalar os dois, omita a opção `--mpi`.

   ```
   $ sudo ./efa_installer.sh -y
   ```

   O Libfabric está instalado em `/opt/amazon/efa`. A Open MPI 4.1 é instalada em `/opt/amazon/openmpi`. O Open MPI 5 está instalado em `/opt/amazon/openmpi5`.

------
#### [ Intel MPI only ]

   Se você pretende usar o EFA somente com Intel MPI, instale o software EFA sem Libfabric e Open MPI. Nesse caso, o Intel MPI usa o Libfabric incorporado. Se você optar por fazer isso, **deverá concluir a Etapa 5: instalar o Intel MPI**. 

   Para instalar o software EFA sem Libfabric e Open MPI, execute o comando a seguir.

   ```
   $ sudo ./efa_installer.sh -y --minimal
   ```

------

1. Se o instalador do EFA solicitar que você reinicialize a instância, faça-o e, em seguida, reconecte-se à instância. Caso contrário, faça logout da instância e faça login novamente para concluir a instalação.

1. Exclua o tarball descompactado e o tarball propriamente dito. Caso contrário, eles serão incluídos na AMI habilitada para EFA criada, aumentando seu tamanho.

## Etapa 4: (*opcional*) habilitar o Open MPI 5
<a name="efa-start-ompi5"></a>

**nota**  
Execute esta etapa somente se planeja usar o Open MPI 5.

A partir do EFA 1.30.0, tanto a Open MPI 4.1 quanto a Open MPI 5 são instaladas por padrão. Como alternativa, você pode escolher instalar apenas a Open MPI 4.1 ou a Open MPI 5.

Se você optou por instalar o Open MPI 5 na **Etapa 3: instalar o software EFA** e pretende usá-lo, execute as etapas a seguir para habilitá-lo.

**Para habilitar o Open MPI 5**

1. Adicione o Open MPI 5 à variável de ambiente PATH.

   ```
   $ module load openmpi5
   ```

1. Verifique se o Open MPI 5 está habilitado para uso.

   ```
   $ which mpicc
   ```

   O comando deve retornar o diretório de instalação do Open MPI 5: `/opt/amazon/openmpi5`.

1. (*Opcional*) Para garantir que o Open MPI 5 seja adicionado à variável de ambiente PATH sempre que a instância for iniciada, faça o seguinte:

------
#### [ bash shell ]

   Adicione `module load openmpi5` a `/home/username/.bashrc` e `/home/username/.bash_profile`.

------
#### [ csh and tcsh shells ]

   Adicione `module load openmpi5` a `/home/username/.cshrc`.

------

Se você precisar remover o Open MPI 5 da variável de ambiente PATH, execute o comando a seguir e remova o comando dos scripts de inicialização do shell.

```
$ module unload openmpi5
```

## Etapa 5: (*opcional*) instalar o Intel MPI
<a name="efa-start-impi"></a>

**Importante**  
Execute esta etapa se planejar usar a Intel MPI. Se você planejar usa apenas Open MPI, ignore esta etapa. 

A Intel MPI exige uma instalação adicional e a configuração de uma variável de ambiente.

**Pré-requisito**  
Verifique se o usuário que executa as etapas a seguir tem permissões de sudo.

**Para instalar a Intel MPI**

1. Para baixar o script de instalação do Intel MPI, faça o seguinte

   1. Visite o [site da Intel](https://www.intel.com/content/www/us/en/developer/articles/tool/oneapi-standalone-components.html#mpi).

   1. Na seção da página da Web **Intel MPI Library** (Biblioteca Intel MPI), escolha o link para o instalador **Intel MPI Library for Linux** (Biblioteca MPI Intel para Linux) **Offline**.

1. Execute o script de instalação que você baixou na etapa anterior.

   ```
   $ sudo bash installation_script_name.sh
   ```

1. No instalador, escolha **Accept & install** (Aceitar e instalar).

1. Leia o Intel Improvement Program (Programa de melhoria da Intel), escolha a opção apropriada e, em seguida, escolha **Begin Installation** (Começar a instalação).

1. Quando a instalação terminar, escolha **Fechar**.

1. Por padrão, o Intel MPI usa o Libfabric integrado (interno). É possível configurar o Intel MPI para usar o Libfabric que acompanha o instalador do EFA. Normalmente, o instalador do EFA acompanha uma versão mais recente do Libfabric que o Intel MPI. Em alguns casos, o Libfabric que acompanha o instalador do EFA tem mais performance do que o Intel MPI. Para configurar o Intel MPI para usar o Libfabric que acompanha o instalador do EFA, siga um destes procedimentos, conforme o shell.

------
#### [ bash shells ]

   Adicione a instrução a seguir a `/home/username/.bashrc` e `/home/username/.bash_profile`.

   ```
   export I_MPI_OFI_LIBRARY_INTERNAL=0
   ```

------
#### [ csh and tcsh shells ]

   Adicione a instrução a seguir a `/home/username/.cshrc`.

   ```
   setenv I_MPI_OFI_LIBRARY_INTERNAL 0
   ```

------

1. Adicione o comando **source** a seguir ao script shell para obter o script `vars.sh` do diretório de instalação para configurar o ambiente do compilador sempre que a instância for iniciada. Dependendo de seu shell, faça o seguinte.

------
#### [ bash shells ]

   Adicione a instrução a seguir a `/home/username/.bashrc` e `/home/username/.bash_profile`.

   ```
   source /opt/intel/oneapi/mpi/latest/env/vars.sh
   ```

------
#### [ csh and tcsh shells ]

   Adicione a instrução a seguir a `/home/username/.cshrc`.

   ```
   source /opt/intel/oneapi/mpi/latest/env/vars.csh
   ```

------

1. Por padrão, se o EFA não estiver disponível devido a uma configuração incorreta, o Intel MPI assumirá como padrão a pilha de rede TCP/IP, podendo resultar em uma performance mais lenta da aplicação. É possível evitar isso definindo `I_MPI_OFI_PROVIDER` como `efa`. Isso fará com que o Intel MPI apresente o seguinte erro, se o EFA não estiver disponível:

   ```
   Abort (XXXXXX) on node 0 (rank 0 in comm 0): Fatal error in PMPI_Init: OtherMPI error,
   MPIR_Init_thread (XXX)........:	
   MPID_Init (XXXX)..............:
   MPIDI_OFI_mpi_init_hook (XXXX):
   open_fabric (XXXX)............:
   find_provider (XXXX)..........:
   OFI fi_getinfo() failed (ofi_init.c:2684:find_provider:
   ```

   Dependendo de seu shell, faça o seguinte.

------
#### [ bash shells ]

   Adicione a instrução a seguir a `/home/username/.bashrc` e `/home/username/.bash_profile`.

   ```
   export I_MPI_OFI_PROVIDER=efa
   ```

------
#### [ csh and tcsh shells ]

   Adicione a instrução a seguir a `/home/username/.cshrc`.

   ```
   setenv I_MPI_OFI_PROVIDER efa
   ```

------

1. Por padrão, o Intel MPI não imprime informações de depuração. É possível especificar diferentes níveis de detalhamento para controlar as informações de depuração. Os valores possíveis (organizados em ordem pela quantidade de detalhes que fornecem) são: `0` (padrão), `1`, `2`, `3`, `4`, `5`. O nível `1` e superiores imprimem `libfabric version` e `libfabric provider`. Use `libfabric version` para verificar se o Intel MPI está usando o Libfabric interno ou o Libfabric que acompanha o instalador do EFA. Se estiver usando o Libfabric interno, a versão terá o sufixo `impi`. Use `libfabric provider` para verificar se o Intel MPI está usando o EFA ou a rede TCP/IP. Se estiver usando o EFA, o valor será `efa`. Se estiver usando TCP/IP, o valor será `tcp;ofi_rxm`.

   Para habilitar as informações de depuração, siga um destes procedimentos, conforme seu shell.

------
#### [ bash shells ]

   Adicione a instrução a seguir a `/home/username/.bashrc` e `/home/username/.bash_profile`.

   ```
   export I_MPI_DEBUG=value
   ```

------
#### [ csh and tcsh shells ]

   Adicione a instrução a seguir a `/home/username/.cshrc`.

   ```
   setenv I_MPI_DEBUG value
   ```

------

1. Por padrão, o Intel MPI usa a memória compartilhada do sistema operacional (`shm`) para comunicação intranós e usa Libfabric (`ofi`) somente para comunicação entre nós. Em geral, essa configuração fornece a melhor performance. Porém, em alguns casos, a malha Intel MPI shm pode fazer com que certas aplicações travem por tempo indeterminado.

   Para resolver esse problema, você pode forçar o Intel MPI a usar o Libfabric para comunicação intranós e entre nós. Para isso, faça o seguinte, de acordo com seu shell.

------
#### [ bash shells ]

   Adicione a instrução a seguir a `/home/username/.bashrc` e `/home/username/.bash_profile`.

   ```
   export I_MPI_FABRICS=ofi
   ```

------
#### [ csh and tcsh shells ]

   Adicione a instrução a seguir a `/home/username/.cshrc`.

   ```
   setenv I_MPI_FABRICS ofi
   ```

------
**nota**  
O provedor de Libfabric do EFA usa a memória compartilhada do sistema operacional para comunicação intranós. Isso significa que a configuração `I_MPI_FABRICS` em `ofi` fornece uma performance semelhante à configuração `shm:ofi`.

1. Saia da instância e faça login novamente.

Se você não usar mais a Intel MPI, remova as variáveis de ambiente dos scripts shell de startup.

## Etapa 6: desabilitar a proteção ptrace
<a name="efa-start-ptrace"></a>

Para melhorar a performance da aplicação HPC, o Libfabric usa a memória local da instância para comunicações entre processos quando os processos estão sendo executados na mesma instância. 

O recurso de memória compartilhada usa CMA (Cross Memory Attach), que não é compatível com a *proteção ptrace*. Se estiver usando uma distribuição Linux que tenha a proteção ptrace habilitada por padrão, como o Ubuntu, desabilite-a. Se a sua distribuição Linux não tiver a proteção ptrace habilitada por padrão, ignore esta etapa.

**Como desabilitar a proteção ptrace**  
Execute um destes procedimentos:
+ Para desabilitar temporariamente a proteção ptrace para fins de teste, execute o seguinte comando.

  ```
  $ sudo sysctl -w kernel.yama.ptrace_scope=0
  ```
+ Para desabilitar permanentemente a proteção ptrace, adicione `kernel.yama.ptrace_scope = 0` a `/etc/sysctl.d/10-ptrace.conf` e reinicialize a instância.

## Etapa 7. Confirmar instalação
<a name="efa-start-test"></a>

**Confirmar uma instalação bem-sucedida**

1. Para confirmar se a Intel MPI foi instalada com êxito, execute o seguinte comando:

   ```
   $ which mpicc
   ```
   + Para Open MPI, o caminho retornado deve incluir `/opt/amazon/`.
   + Para Intel MPI, o caminho retornado deve incluir `/opt/intel/`. Se o resultado esperado não for exibido, verifique se o script `vars.sh` da Intel MPI foi usado como origem.

1. Para confirmar se os componentes de software EFA e o Libfabric foram instalados com êxito, execute o comando a seguir.

   ```
   $ fi_info -p efa -t FI_EP_RDM
   ```

   O comando deve retornar informações sobre as interfaces EFA Libfabric. O exemplo a seguir mostra a saída do comando.

   ```
   provider: efa
       fabric: EFA-fe80::94:3dff:fe89:1b70
       domain: efa_0-rdm
       version: 2.0
       type: FI_EP_RDM
       protocol: FI_PROTO_EFA
   ```

## Etapa 8: instalar a aplicação de HPC
<a name="efa-start-hpc-app"></a>

Instale a aplicação HPC na instância temporária. O procedimento de instalação varia dependendo da aplicação HPC específica. Para obter mais informações, consulte [Manage software on your AL2 instance](https://docs.aws.amazon.com/linux/al2/ug/managing-software.html) no *Amazon Linux 2 User Guide*.

**nota**  
Pode ser necessário consultar a documentação da aplicação de HPC para obter instruções de instalação.

## Etapa 9: criar uma AMI habilitada para EFA
<a name="efa-start-ami"></a>

Depois de instalar os componentes de software necessários, crie uma AMI que possa ser reutilizada para executar suas instâncias habilitadas para o EFA.

**Para criar uma AMI a partir de sua instância temporária**

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. No painel de navegação, escolha **Instances (Instâncias)**.

1. Selecione a instância, escolha **Actions** (Ações), **Image** (Imagem), **Create image** (Criar imagem).

1. Em **Create image (Criar imagem)**, faça o seguinte:

   1. Em **Image name (Nome da imagem)**, insira um nome descritivo para a AMI.

   1. (Opcional) Em **Image description (Descrição da imagem)**, informe a descrição do propósito da AMI.

   1. Escolha **Create Image (Criar imagem)**.

1. No painel de navegação, selecione **AMIs**.

1. Encontre a AMI que você criou na lista. Aguarde até que o status mude de `pending` para `available` antes de continuar para a próxima etapa.

## Etapa 10: executar instâncias habilitadas para EFA em um grupo de posicionamento de cluster
<a name="efa-start-instances"></a>

Execute as instâncias habilitadas para EFA em um placement group de cluster usando a AMI habilitada para EFA criada na **Etapa 7** e o grupo de segurança habilitado para EFA criado na **Etapa 1**.

**nota**  
Não é um requisito absoluto executar suas instâncias habilitadas para EFA em um placement group de cluster. No entanto, recomendamos a execução de suas instâncias habilitadas para EFA em um grupo de posicionamento de cluster ao executar as instâncias em um grupo de baixa latência em uma única zona de disponibilidade.
Para garantir que a capacidade esteja disponível à medida que escala as instâncias do cluster, é possível criar uma reserva de capacidade para o grupo de posicionamento de cluster. Para obter mais informações, consulte [Usar reservas de capacidade em grupos de posicionamento de cluster](cr-cpg.md).

**Como iniciar uma instância**

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. No painel de navegação, selecione **Instances** (Instâncias) e, depois, escolha **Launch Instances** (Iniciar instâncias) para abrir o novo assistente de inicialização de instância.

1. (*Opcional*) Na seção **Name and tags** (Nome e etiquetas), forneça um nome para a instância, como `EFA-instance`. O nome é atribuído à instância como uma etiqueta de recurso (`Name=EFA-instance`).

1. Na seção **Application and OS Images** (Imagens de aplicações e SO), selecione **My AMIs** (Minhas AMIs) e, em seguida, selecione a AMI que você criou na etapa anterior.

1. Na seção **Instance type** (Tipo de instância), selecione um [tipo de instância compatível](efa.md#efa-instance-types).

1. Na seção **Key pair** (Par de chaves), selecione o par de chaves a ser usado na instância.

1. Na seção **Network settings** (Configurações da rede), escolha **Edit** (Editar) e faça o seguinte:

   1. Em **Subnet (Sub-rede)**, escolha a sub-rede na qual deseja iniciar a instância. Se você não selecionar uma sub-rede, não será possível habilitar a instância para o EFA.

   1. Para **Firewall (security groups)** (Firewall/grupos de segurança), escolha **Select existing security group** (Selecione grupo de segurança existente) e, em seguida, selecione o grupo de segurança que você criou na etapa anterior.

   1. Expanda a seção **Configuração de rede avançada**.

      Para **Interface de rede 1**, selecione **Índice da placa de rede = 0**, **Índice do dispositivo = 0** e **Tipo de interface = EFA com ENA**.

      (*Opcional*) Caso esteja usando um tipo de instância com várias placas, como `p4d.24xlarge` ou `p5.48xlarge`, para cada interface de rede adicional necessária, selecione **Adicionar interface de rede**, em **Índice da placa de rede**, selecione o próximo índice não utilizado e, em seguida, selecione **Índice do dispositivo = 1** e **Tipo de interface = EFA com ENA** ou **exclusivamente EFA**.

1. (*Opcional*) Na seção **Storage** (Armazenamento), configure os volumes conforme necessário.

1. Na seção **Advanced details** (Detalhes avançados), para **Placement group name** (Nome do grupo de posicionamento), selecione o grupo de posicionamento de cluster no qual iniciar as instâncias. Caso precise criar um novo grupo de posicionamento de cluster, escolha **Create new placement group** (Criar novo grupo de posicionamento).

1. No painel **Summary** (Resumo) à direita, em **Number of instances** (Número de instâncias), insira o número de instâncias habilitadas para EFA que você deseja iniciar e escolha **Launch instance** (Iniciar instância).

## Etapa 11: Encerrar a instância temporária
<a name="efa-start-terminate"></a>

Neste ponto, você não precisa mais da instância que iniciou na [Etapa 2](#efa-start-tempinstance). É possível encerrar a instância para não incorrer mais em cobranças desnecessárias.

**Para encerrar a instância temporária**

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. No painel de navegação, escolha **Instances (Instâncias)**.

1. Selecione a instância temporária, escolha **Ações**, selecione **Estado da instância**, **Encerrar (excluir) instância**.

1. Quando a confirmação for solicitada, escolha **Encerrar (excluir)**.

## Etapa 12: habilitar SSH sem senha
<a name="efa-start-passwordless"></a>

Para permitir que suas aplicações sejam executadas em todas as instâncias do cluster, é necessário habilitar o acesso SSH sem senha do nó líder para os nós membros. O nó líder é a instância a partir da qual você executa suas aplicações. As instâncias restantes no cluster são os nós membros.

**Para habilitar SSH sem senha entre as instâncias no cluster**

1. Selecione uma instância no cluster como o nó líder e conecte-se a ela.

1. Desabilite `strictHostKeyChecking` e habilite `ForwardAgent` no nó líder. Abra o `~/.ssh/config` usando o editor de texto de sua preferência e adicione o seguinte.

   ```
   Host *
       ForwardAgent yes
   Host *
       StrictHostKeyChecking no
   ```

1. Gere um par de chaves RSA.

   ```
   $ ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
   ```

   O par de chaves é criado no diretório do `$HOME/.ssh/`.

1. Altere as permissões da chave privada no nó líder.

   ```
   $ chmod 600 ~/.ssh/id_rsa
   chmod 600 ~/.ssh/config
   ```

1. Abra `~/.ssh/id_rsa.pub` usando seu editor de texto preferido e copie a chave.

1. Para cada nó de membro no cluster, faça o seguinte:

   1. Conecte-se à instância.

   1. Abra `~/.ssh/authorized_keys` usando o editor de texto de sua preferência e adicione a chave pública que você copiou anteriormente.

1. Para testar se o SSH sem senha está funcionando como esperado, conecte-se ao seu nó líder e execute o comando a seguir.

   ```
   $ ssh member_node_private_ip
   ```

   É necessário se conectar ao nó membro sem receber uma solicitação para inserir uma chave ou senha.

# Conceitos básicos do EFA e NCCL para workloads de ML no Amazon EC2
<a name="efa-start-nccl"></a>

A Nvidia Collective Communications Library (NCCL) é uma biblioteca de rotinas de comunicação coletiva padrão para várias GPUs em um único nó ou em vários nós. A NCCL pode ser usada com o EFA, o Libfabric e a MPI para oferecer suporte a várias workloads de machine learning. Para obter mais informações, consulte o site da [NCCL](https://developer.nvidia.com/nccl).

**Requisitos**
+ Somente os tipos de instância da série P são compatíveis. Para obter mais informações, consulte [ Instâncias com computação acelerada do Amazon EC2](https://docs.aws.amazon.com/ec2/latest/instancetypes/ac.html#ac-sizes).
+ Apenas as AMIs básicas do Amazon Linux 2023, Amazon Linux 2, Ubuntu 24.04 e Ubuntu 22.04 são compatíveis.
+ Somente a NCCL 2.4.2 e posterior são compatíveis com EFA.

Para obter mais informações sobre como executar workloads de machine learning com EFA e NCCL usando um AMIs de deep learning da AWS, consulte [Usando o EFA no DLAMI](https://docs.aws.amazon.com/dlami/latest/devguide/tutorial-efa-using.html) no *Guia do desenvolvedor do AMIs de deep learning da AWS*.

**Topics**
+ [Etapa 1: Preparar um grupo de segurança habilitado para EFA](#nccl-start-base-setup)
+ [Etapa 2: Iniciar uma instância temporária](#nccl-start-base-temp)
+ [Etapa 3: Instalar drivers de GPU Nvidia, o toolkit Nvidia CUDA e o cuDNN](#nccl-start-base-drivers)
+ [Etapa 4: instalar o GDRCopy](#nccl-start-base-gdrcopy)
+ [Etapa 5: instalar o software EFA](#nccl-start-base-enable)
+ [Etapa 6: instalar NCCL](#nccl-start-base-nccl)
+ [Etapa 7: Instalar os testes da NCCL](#nccl-start-base-tests)
+ [Etapa 8: Testar a configuração do EFA e da NCCL](#nccl-start-base-test)
+ [Etapa 9: Instalar as aplicações de machine learning](#nccl-start-base-app)
+ [Etapa 10: Criar um EFA e uma AMI habilitada para NCCL](#nccl-start-base-ami)
+ [Etapa 11: Encerrar a instância temporária](#nccl-start-base-terminate)
+ [Etapa 12: Iniciar instâncias habilitadas para EFA e para NCCL em um grupo de posicionamento de cluster](#nccl-start-base-cluster)
+ [Etapa 13: Habilitar SSH sem senha](#nccl-start-base-passwordless)

## Etapa 1: Preparar um grupo de segurança habilitado para EFA
<a name="nccl-start-base-setup"></a>

Um EFA requer um grupo de segurança que permita todo o tráfego de entrada e saída do grupo de segurança e para ele próprio. O procedimento a seguir cria um grupo de segurança que permite todo o tráfego de entrada e saída de e para si mesmo e que permite tráfego SSH de entrada de qualquer endereço IPv4 para conectividade SSH.

**Importante**  
Esse grupo de segurança deve ser usado apenas para fins de teste. Para seus ambientes de produção, recomendamos que você crie uma regra SSH de entrada que permita o tráfego somente do endereço IP do qual você está se conectando, como o endereço IP do seu computador ou uma variedade de endereços IP na sua rede local.

Para outros cenários, consulte [Regras de grupo de segurança para diferentes casos de uso](security-group-rules-reference.md).

**Para criar um grupo de segurança habilitado para EFA**

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. No painel de navegação, escolha **Security Groups** (Grupos de segurança) e, em seguida, **Create Security Group** (Criar grupo de segurança).

1. Na janela **Security group** (Grupo de segurança), faça o seguinte:

   1. Em **Security group name** (Nome do grupo de segurança), insira um nome descritivo para o grupo de segurança, como `EFA-enabled security group`.

   1. (Opcional) Em **Description** (Descrição), insira uma breve descrição do grupo de segurança.

   1. Em **VPC**, selecione a VPC na qual você pretende executar suas instâncias habilitadas para EFA.

   1. Escolha **Criar grupo de segurança**.

1. Selecione o grupo de segurança que você criou e, na guia **Details** (Detalhes), copie o **Security group** (Grupo de segurança).

1. Com o grupo de segurança ainda selecionado, escolha **Actions** (Ações), **Edit inbound rules** (Editar regras de entrada), e faça o seguinte:

   1. Escolha **Adicionar regra**.

   1. Para **Tipo**, escolha **Todo o tráfego**.

   1. Para **Source type** (Tipo de origem), escolha **Custom** (Personalizado) e cole o ID do grupo de segurança que você copiou no campo.

   1. Escolha **Adicionar regra**.

   1. Para **Tipo**, escolha **SSH**.

   1. Para **Source type** (Tipo de origem), escolha **Anywhere-IPv4** (IPv4 em qualquer lugar).

   1. Selecione **Salvar regras**.

1. Na lista, selecione o grupo de segurança e escolha **Actions** (Ações), **Edit outbound rules** (Editar regras de saída), e faça o seguinte:

   1. Escolha **Adicionar regra**.

   1. Para **Tipo**, escolha **Todo o tráfego**.

   1. Para **Destination** (Destino), escolha **Custom** (Personalizado) e cole o ID do grupo de segurança que você copiou no campo.

   1. Selecione **Salvar regras**.

## Etapa 2: Iniciar uma instância temporária
<a name="nccl-start-base-temp"></a>

Execute uma instância temporária que é possível usar para instalar e configurar os componentes do software EFA. Você usa essa instância para criar um AMI habilitado para EFA a partir do qual é possível executar suas instâncias habilitadas para EFA.

**Para executar uma instância temporária**

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. No painel de navegação, selecione **Instances** (Instâncias) e, depois, escolha **Launch Instances** (Iniciar instâncias) para abrir o novo assistente de inicialização de instância.

1. (*Opcional*) Na seção **Name and tags** (Nome e etiquetas), forneça um nome para a instância, como `EFA-instance`. O nome é atribuído à instância como uma etiqueta de recurso (`Name=EFA-instance`).

1. Na seção **Application and OS Images** (Imagens de aplicação e sistema operacional), selecione uma AMI para um dos sistemas operacionais compatíveis.

1. Na seção **Instance type** (Tipo de instância), selecione um tipo de instância compatível.

1. Na seção **Key pair** (Par de chaves), selecione o par de chaves a ser usado na instância.

1. Na seção **Network settings** (Configurações da rede), escolha **Edit** (Editar) e faça o seguinte:

   1. Em **Subnet (Sub-rede)**, escolha a sub-rede na qual deseja iniciar a instância. Se você não selecionar uma sub-rede, não será possível habilitar a instância para o EFA.

   1. Para **Firewall (security groups)** (Firewall/grupos de segurança), escolha **Select existing security group** (Selecione grupo de segurança existente) e, em seguida, selecione o grupo de segurança que você criou na etapa anterior.

   1. Expanda a seção **Configuração de rede avançada**.

      Para **Interface de rede 1**, selecione **Índice da placa de rede = 0**, **Índice do dispositivo = 0** e **Tipo de interface = EFA com ENA**.

      **(*Opcional*) Se você estiver usando um tipo de instância com várias placas, como `p4d.24xlarge` ou`p5.48xlarge`, para cada interface de rede adicional necessária, escolha **Adicionar interface de rede**, em **Índice da placa de rede, selecione o próximo índice** não utilizado e, em seguida, selecione **Índice do dispositivo = 1** e **Tipo de interface = EFA com ENA** ou somente EFA.**.

1. Na seção **Storage** (Armazenamento), configure os volumes conforme necessário.
**nota**  
É necessário provisionar um armazenamento adicional de 10 a 20 GiB para o Toolkit Nvidia CUDA. Se você não provisionar armazenamento suficiente, você receberá uma mensagem de erro `insufficient disk space` ao tentar instalar os drivers Nvidia e o Toolkit CUDA.

1. No painel **Summary** (Resumo) painel, escolha **Launch instance** (Iniciar instância).

## Etapa 3: Instalar drivers de GPU Nvidia, o toolkit Nvidia CUDA e o cuDNN
<a name="nccl-start-base-drivers"></a>

------
#### [ Amazon Linux 2023 and Amazon Linux 2 ]

**Para instalar os drivers de GPU Nvidia, o toolkit Nvidia CUDA e o cuDNN**

1. Para garantir que todos os pacotes de software estejam atualizados, execute uma atualização rápida de software em sua instância.

   ```
   $ sudo yum upgrade -y && sudo reboot
   ```

   Reconecte-se à sua instância depois de reinicializá-la.

1. Instale os utilitários necessários para instalar os drivers de GPU Nvidia e o toolkit Nvidia CUDA.

   ```
   $ sudo yum groupinstall 'Development Tools' -y
   ```

1. Desabilite os drivers de código aberto `nouveau`.

   1. Instale os utilitários necessários e o pacote de cabeçalhos kernel para a versão do kernel que está sendo executada.

      ```
      $ sudo yum install -y wget kernel-devel-$(uname -r) kernel-headers-$(uname -r)
      ```

   1. Adicione `nouveau` ao arquivo de lista de negação `/etc/modprobe.d/blacklist.conf `.

      ```
      $ cat << EOF | sudo tee --append /etc/modprobe.d/blacklist.conf
      blacklist vga16fb
      blacklist nouveau
      blacklist rivafb
      blacklist nvidiafb
      blacklist rivatv
      EOF
      ```

   1. Anexe `GRUB_CMDLINE_LINUX="rdblacklist=nouveau"` ao arquivo `grub` e recompile a configuração do Grub.

      ```
      $ echo 'GRUB_CMDLINE_LINUX="rdblacklist=nouveau"' | sudo tee -a /etc/default/grub \
      && sudo grub2-mkconfig -o /boot/grub2/grub.cfg
      ```

1. Reinicialize a instância e reconecte-se a ela.

1. Prepare os repositórios necessários

   1. Ative o repositório EPEL e defina a distribuição como `rhel7`.

      ```
      $ sudo amazon-linux-extras install epel \
      && distribution='rhel7'
      ```

   1. Configure o repositório de rede CUDA e atualize o cache do repositório.

      ```
      $ ARCH=$( /bin/arch ) \
      && sudo yum-config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/$distribution/${ARCH}/cuda-$distribution.repo \
      && sudo yum clean expire-cache
      ```

   1. (*Somente kernel versão 5.10*) Execute estas etapas somente se você estiver usando o Amazon Linux 2 com o kernel versão 5.10. Se você estiver usando o Amazon Linux 2 com o kernel versão 4.12, ignore estas etapas. Para verificar a versão do kernel, execute **uname -r**.

      1. Crie o arquivo de configuração do driver Nvidia chamado `/etc/dkms/nvidia.conf`.

         ```
         $ sudo mkdir -p /etc/dkms \
         && echo "MAKE[0]=\"'make' -j2 module SYSSRC=\${kernel_source_dir} IGNORE_XEN_PRESENCE=1 IGNORE_PREEMPT_RT_PRESENCE=1 IGNORE_CC_MISMATCH=1 CC=/usr/bin/gcc10-gcc\"" | sudo tee /etc/dkms/nvidia.conf
         ```

      1. (`p4d.24xlarge` e `p5.48xlarge` somente) Copie o arquivo de configuração do driver NVIDIA.

         ```
         $ sudo cp /etc/dkms/nvidia.conf /etc/dkms/nvidia-open.conf
         ```

1. Instale os drivers de GPU Nvidia, o toolkit Nvidia CUDA e o cuDNN.

   ```
   $ sudo yum clean all \
   && sudo yum -y install nvidia-driver-latest-dkms \
   && sudo yum -y install cuda-drivers-fabricmanager cuda libcudnn8-devel
   ```

1. Reinicialize a instância e reconecte-se a ela.

1. (`p4d.24xlarge` e `p5.48xlarge` somente) Inicie o serviço NVIDIA Fabric Manager e verifique se ele será iniciado automaticamente quando a instância for iniciada. O Nvidia Fabric Manager é necessário para o gerenciamento do NV Switch.

   ```
   $ sudo systemctl enable nvidia-fabricmanager && sudo systemctl start nvidia-fabricmanager
   ```

1. Certifique-se de que os caminhos do CUDA sejam definidos cada vez que a instância for executada.
   + Em shells *bash*, adicione as seguintes instruções a `/home/username/.bashrc` e `/home/username/.bash_profile`. 

     ```
     export PATH=/usr/local/cuda/bin:$PATH
     export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
     ```
   + Em shells *tcsh*, adicione as seguintes instruções a `/home/username/.cshrc`.

     ```
     setenv PATH=/usr/local/cuda/bin:$PATH
     setenv LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
     ```

1. Para verificar se os drivers de GPU Nvidia estão funcionando, execute o comando a seguir.

   ```
   $ nvidia-smi -q | head
   ```

   O comando deve retornar informações sobre os as GPUs Nvidia, sobre os drivers de GPU Nvidia e sobre o toolkit Nvidia CUDA.

------
#### [ Ubuntu 24.04 and Ubuntu 22.04 ]

**Para instalar os drivers de GPU Nvidia, o toolkit Nvidia CUDA e o cuDNN**

1. Para garantir que todos os pacotes de software estejam atualizados, execute uma atualização rápida de software em sua instância.

   ```
   $ sudo apt-get update && sudo apt-get upgrade -y
   ```

1. Instale os utilitários necessários para instalar os drivers de GPU Nvidia e o toolkit Nvidia CUDA.

   ```
   $ sudo apt-get update && sudo apt-get install build-essential -y
   ```

1. Para usar o driver de GPU Nvidia, é necessário primeiro desabilitar os drivers de código aberto `nouveau`.

   1. Instale os utilitários necessários e o pacote de cabeçalhos kernel para a versão do kernel que está sendo executada.

      ```
      $ sudo apt-get install -y gcc make linux-headers-$(uname -r)
      ```

   1. Adicione `nouveau` ao arquivo de lista de negação `/etc/modprobe.d/blacklist.conf `.

      ```
      $ cat << EOF | sudo tee --append /etc/modprobe.d/blacklist.conf
      blacklist vga16fb
      blacklist nouveau
      blacklist rivafb
      blacklist nvidiafb
      blacklist rivatv
      EOF
      ```

   1. Abra o `/etc/default/grub` usando o editor de texto de sua preferência e adicione o seguinte. 

      ```
      GRUB_CMDLINE_LINUX="rdblacklist=nouveau"
      ```

   1. Recompile a configuração do Grub.

      ```
      $ sudo update-grub
      ```

1. Reinicialize a instância e reconecte-se a ela.

1. Adicione o repositório CUDA e instale os drivers de GPU Nvidia, o toolkit Nvidia CUDA e o cuDNN.
   + `p3dn.24xlarge`

     ```
     $ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/7fa2af80.pub \
     && wget -O /tmp/deeplearning.deb http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/nvidia-machine-learning-repo-ubuntu2004_1.0.0-1_amd64.deb \
     && sudo dpkg -i /tmp/deeplearning.deb \
     && wget -O /tmp/cuda.pin https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin \
     && sudo mv /tmp/cuda.pin /etc/apt/preferences.d/cuda-repository-pin-600 \
     && sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub \
     && sudo add-apt-repository 'deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /' \
     && sudo apt update \
     && sudo apt install nvidia-dkms-535 \
     && sudo apt install -o Dpkg::Options::='--force-overwrite' cuda-drivers-535 cuda-toolkit-12-3 libcudnn8 libcudnn8-dev -y
     ```
   + `p4d.24xlarge` e da `p5.48xlarge`

     ```
     $ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/7fa2af80.pub \
     && wget -O /tmp/deeplearning.deb http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/nvidia-machine-learning-repo-ubuntu2004_1.0.0-1_amd64.deb \
     && sudo dpkg -i /tmp/deeplearning.deb \
     && wget -O /tmp/cuda.pin https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin \
     && sudo mv /tmp/cuda.pin /etc/apt/preferences.d/cuda-repository-pin-600 \
     && sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub \
     && sudo add-apt-repository 'deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /' \
     && sudo apt update \
     && sudo apt install nvidia-kernel-open-535 \
     && sudo apt install -o Dpkg::Options::='--force-overwrite' cuda-drivers-535 cuda-toolkit-12-3 libcudnn8 libcudnn8-dev -y
     ```

1. Reinicialize a instância e reconecte-se a ela.

1. (Somente `p4d.24xlarge` e `p5.48xlarge`) Instale o Nvidia Fabric Manager.

   1. É necessário instalar a versão do Nvidia Fabric Manager que corresponde à versão do módulo do kernel Nvidia que você instalou na etapa anterior.

      Execute o seguinte comando para determinar a versão do módulo do kernel Nvidia.

      ```
      $ cat /proc/driver/nvidia/version | grep "Kernel Module"
      ```

      A seguir está um exemplo de saída.

      ```
      NVRM version: NVIDIA UNIX x86_64 Kernel Module  450.42.01  Tue Jun 15 21:26:37 UTC 2021
      ```

      No exemplo acima, a versão principal`450`do módulo do kernel foi instalado. Isso significa que você precisa instalar a versão do Nvidia Fabric Manager `450`.

   1. Instale o Nvidia Fabric Manager. Execute o seguinte comando e especifique a versão principal identificada na etapa anterior.

      ```
      $ sudo apt install -o Dpkg::Options::='--force-overwrite' nvidia-fabricmanager-major_version_number
      ```

      Por exemplo, se a versão principal`450`do módulo do kernel foi instalado, use o seguinte comando para instalar a versão correspondente do Nvidia Fabric Manager.

      ```
      $ sudo apt install -o Dpkg::Options::='--force-overwrite' nvidia-fabricmanager-450
      ```

   1. Inicie o serviço e certifique-se de que ele seja iniciado automaticamente quando a instância for executada. O Nvidia Fabric Manager é necessário para o gerenciamento do NV Switch.

      ```
      $ sudo systemctl start nvidia-fabricmanager && sudo systemctl enable nvidia-fabricmanager
      ```

1. Certifique-se de que os caminhos do CUDA sejam definidos cada vez que a instância for executada.
   + Em shells *bash*, adicione as seguintes instruções a `/home/username/.bashrc` e `/home/username/.bash_profile`. 

     ```
     export PATH=/usr/local/cuda/bin:$PATH
     export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
     ```
   + Em shells *tcsh*, adicione as seguintes instruções a `/home/username/.cshrc`.

     ```
     setenv PATH=/usr/local/cuda/bin:$PATH
     setenv LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
     ```

1. Para verificar se os drivers de GPU Nvidia estão funcionando, execute o comando a seguir.

   ```
   $ nvidia-smi -q | head
   ```

   O comando deve retornar informações sobre os as GPUs Nvidia, sobre os drivers de GPU Nvidia e sobre o toolkit Nvidia CUDA.

------

## Etapa 4: instalar o GDRCopy
<a name="nccl-start-base-gdrcopy"></a>

Instale o GDRCopy para melhorar a performance do Libfabric. Para obter mais informações sobre a GDRCopy, consulte o [repositório do GDRCopy](https://github.com/NVIDIA/gdrcopy).

------
#### [ Amazon Linux 2023 and Amazon Linux 2 ]

**Para instalar o GDRCopy**

1. Instale as dependências necessárias.

   ```
   $ sudo yum -y install dkms rpm-build make check check-devel subunit subunit-devel
   ```

1. Baixe e extraia o pacote do GDRCopy.

   ```
   $ wget https://github.com/NVIDIA/gdrcopy/archive/refs/tags/v2.4.tar.gz \
   && tar xf v2.4.tar.gz ; cd gdrcopy-2.4/packages
   ```

1. Crie o pacote RPM do GDRCopy.

   ```
   $ CUDA=/usr/local/cuda ./build-rpm-packages.sh
   ```

1. Instale o pacote RPM do GDRCopy.

   ```
   $ sudo rpm -Uvh gdrcopy-kmod-2.4-1dkms.noarch*.rpm \
   && sudo rpm -Uvh gdrcopy-2.4-1.x86_64*.rpm \
   && sudo rpm -Uvh gdrcopy-devel-2.4-1.noarch*.rpm
   ```

------
#### [ Ubuntu 24.04 and Ubuntu 22.04 ]

**Para instalar o GDRCopy**

1. Instale as dependências necessárias.

   ```
   $ sudo apt -y install build-essential devscripts debhelper check libsubunit-dev fakeroot pkg-config dkms
   ```

1. Baixe e extraia o pacote do GDRCopy.

   ```
   $ wget https://github.com/NVIDIA/gdrcopy/archive/refs/tags/v2.4.tar.gz \
   && tar xf v2.4.tar.gz \
   && cd gdrcopy-2.4/packages
   ```

1. Crie o pacote RPM do GDRCopy.

   ```
   $ CUDA=/usr/local/cuda ./build-deb-packages.sh
   ```

1. Instale o pacote RPM do GDRCopy.

   ```
   $ sudo dpkg -i gdrdrv-dkms_2.4-1_amd64.*.deb \
   && sudo dpkg -i libgdrapi_2.4-1_amd64.*.deb \
   && sudo dpkg -i gdrcopy-tests_2.4-1_amd64.*.deb \
   && sudo dpkg -i gdrcopy_2.4-1_amd64.*.deb
   ```

------

## Etapa 5: instalar o software EFA
<a name="nccl-start-base-enable"></a>

Instale o kernel habilitado para EFA, drivers EFA, Libfabric, plugin aws-ofi-nccl e pilha Open MPI, que são necessários para oferecer compatibilidade com EFA em sua instância.

**Como instalar o software EFA**

1. Conecte à instância que você iniciou. Para obter mais informações, consulte [Conectar-se à instância do Linux usando SSH](connect-to-linux-instance.md).

1. Faça download dos arquivos de instalação do software do EFA. Os arquivos de instalação do software são empacotados em um arquivo compactado tarball (`.tar.gz`). Para fazer download da última versão *estável*, use o seguinte comando:

   Também é possível obter a versão mais recente substituindo o número da versão por `latest` no comando acima.

   ```
   $ curl -O https://efa-installer.amazonaws.com/aws-efa-installer-1.47.0.tar.gz
   ```

1. (*Opcional*) Verifique a autenticidade e a integridade do arquivo do EFA tarball (`.tar.gz`).

   Recomendamos que você faça isso para verificar a identidade do fornecedor do software e para verificar se a aplicação não foi alterada ou corrompida desde que foi publicada. Se você não deseja verificar o arquivo tarball, ignore esta etapa.
**nota**  
Como alternativa, se você preferir verificar o arquivo tarball usando uma soma de verificação MD5 ou SHA256, consulte [Verificar o instalador EFA usando uma soma de verificação](efa-verify.md).

   1. Faça download da chave GPG pública e importe-a para seu pen-drive.

      ```
      $ wget https://efa-installer.amazonaws.com/aws-efa-installer.key && gpg --import aws-efa-installer.key
      ```

      O comando deve retornar um valor de chave. Anote o valor da chave, pois ele será necessário na próxima etapa.

   1. Verifique a impressão digital da chave GPG. Execute o seguinte comando e especifique o valor de chave da etapa anterior.

      ```
      $ gpg --fingerprint key_value
      ```

      O comando deve retornar uma impressão digital idêntica a `4E90 91BC BB97 A96B 26B1 5E59 A054 80B1 DD2D 3CCC`. Se a impressão digital não corresponder, não execute o script de instalação do EFA e entre em contato com o Suporte.

   1. Faça download do arquivo de assinatura e verifique a assinatura do arquivo tarball EFA.

      ```
      $ wget https://efa-installer.amazonaws.com/aws-efa-installer-1.47.0.tar.gz.sig && gpg --verify ./aws-efa-installer-1.47.0.tar.gz.sig
      ```

      Veja a seguir um exemplo de saída.

      ```
      gpg: Signature made Wed 29 Jul 2020 12:50:13 AM UTC using RSA key ID DD2D3CCC
      gpg: Good signature from "Amazon EC2 EFA <ec2-efa-maintainers@amazon.com>"
      gpg: WARNING: This key is not certified with a trusted signature!
      gpg:          There is no indication that the signature belongs to the owner.
      Primary key fingerprint: 4E90 91BC BB97 A96B 26B1  5E59 A054 80B1 DD2D 3CCC
      ```

      Se o resultado incluir `Good signature` e a impressão digital corresponder à impressão digital retornada na etapa anterior, passe para a próxima etapa. Caso contrário, não execute o script de instalação do EFA e entre em contato com o Suporte.

1. Extraia os arquivos do arquivo compactado `.tar.gz` e navegue para o diretório extraído.

   ```
   $ tar -xf aws-efa-installer-1.47.0.tar.gz && cd aws-efa-installer
   ```

1. Execute o script de instalação do software EFA.
**nota**  
A partir do EFA 1.30.0, tanto a Open MPI 4.1 quanto a Open MPI 5 são instaladas por padrão. A menos que você precise da Open MPI 5, recomendamos que instale apenas a Open MPI 4.1. O comando a seguir instala apenas a Open MPI 4.1. Se quiser instalar a Open MPI 4.1 e a Open MPI 5, remova `--mpi=openmpi4`.

   ```
   $ sudo ./efa_installer.sh -y --mpi=openmpi4
   ```

   O **Libfabric** está instalado no diretório `/opt/amazon/efa`. O **plugin aws-ofi-nccl** está instalado no diretório `/opt/amazon/ofi-nccl`. O **Open MPI** está instalado no diretório `/opt/amazon/openmpi`.

1. Se o instalador do EFA solicitar que você reinicialize a instância, faça-o e, em seguida, reconecte-se à instância. Caso contrário, faça logout da instância e faça login novamente para concluir a instalação.

1. Confirme se os componentes do software EFA foram instalados com sucesso.

   ```
   $ fi_info -p efa -t FI_EP_RDM
   ```

   O comando deve retornar informações sobre as interfaces EFA Libfabric. O exemplo a seguir mostra a saída do comando.
   + `p3dn.24xlarge` com interface de rede única

     ```
     provider: efa
     fabric: EFA-fe80::94:3dff:fe89:1b70
     domain: efa_0-rdm
     version: 2.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     ```
   + `p4d.24xlarge` e `p5.48xlarge` com várias interfaces de rede

     ```
     provider: efa
     fabric: EFA-fe80::c6e:8fff:fef6:e7ff
     domain: efa_0-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     provider: efa
     fabric: EFA-fe80::c34:3eff:feb2:3c35
     domain: efa_1-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     provider: efa
     fabric: EFA-fe80::c0f:7bff:fe68:a775
     domain: efa_2-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     provider: efa
     fabric: EFA-fe80::ca7:b0ff:fea6:5e99
     domain: efa_3-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     ```

## Etapa 6: instalar NCCL
<a name="nccl-start-base-nccl"></a>

Instale a NCCL. Para obter mais informações sobre a NCCL, consulte o [Repositório da NCCL](https://github.com/NVIDIA/nccl).

**Como instalar a NCCL**

1. Navegue até o diretório `/opt`.

   ```
   $ cd /opt
   ```

1. Clone o repositório oficial da NCCL para a instância e navegue até o repositório local clonado.

   ```
   $ sudo git clone https://github.com/NVIDIA/nccl.git -b v2.23.4-1 && cd nccl
   ```

1. Compile e instale a NCCL e especifique o diretório de instalação do CUDA.

   ```
   $ sudo make -j src.build CUDA_HOME=/usr/local/cuda
   ```

## Etapa 7: Instalar os testes da NCCL
<a name="nccl-start-base-tests"></a>

Instale os testes da NCCL. Os testes da NCCL permitem confirmar se a NCCL está instalada adequadamente se ela está funcionando conforme esperado. Para obter mais informações sobre os testes da NCCL, consulte o [Repositório nccl-tests](https://github.com/NVIDIA/nccl-tests).

**Como instalar os testes da NCCL**

1. Navegue até o diretório inicial.

   ```
   $ cd $HOME
   ```

1. Clone o repositório oficial de nccl-tests para a instância e navegue até o repositório local clonado.

   ```
   $ git clone https://github.com/NVIDIA/nccl-tests.git && cd nccl-tests
   ```

1. Adicione o diretório do Libfabric à variável `LD_LIBRARY_PATH`. 
   + Amazon Linux 2023 e Amazon Linux 2

     ```
     $ export LD_LIBRARY_PATH=/opt/amazon/efa/lib64:$LD_LIBRARY_PATH
     ```
   + Ubuntu 24.04 e Ubuntu 22.04

     ```
     $ export LD_LIBRARY_PATH=/opt/amazon/efa/lib:$LD_LIBRARY_PATH
     ```

1. Instale os testes da NCCL e especifique os diretórios de instalação da MPI da NCCL e do CUDA.

   ```
   $ make MPI=1 MPI_HOME=/opt/amazon/openmpi NCCL_HOME=/opt/nccl/build CUDA_HOME=/usr/local/cuda
   ```

## Etapa 8: Testar a configuração do EFA e da NCCL
<a name="nccl-start-base-test"></a>

Execute um teste para verificar se a instância temporária está configurada adequadamente para o EFA e para a NCCL. 

**Como testar a configuração do EFA e da NCCL**

1. Crie um arquivo de host que especifique os hosts nos quais executar os testes. O comando a seguir cria um arquivo de host chamado `my-hosts` que inclui uma referência à própria instância.

------
#### [ IMDSv2 ]

   ```
   [ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
   && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/local-ipv4 >> my-hosts
   ```

------
#### [ IMDSv1 ]

   ```
   [ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/local-ipv4 >> my-hosts
   ```

------

1. Execute o teste e especifique o arquivo de host (`--hostfile`) e o número de GPUs a serem usadas (`-n`). O comando a seguir executa o teste `all_reduce_perf` em 8 GPUs na própria instância e especifica as variáveis de ambiente a seguir.
   + `FI_EFA_USE_DEVICE_RDMA=1`: (somente `p4d.24xlarge`) usa a funcionalidade RDMA do dispositivo para transferência unilateral e bilateral.
   + `NCCL_DEBUG=INFO` habilita a saída de depuração detalhada. Também é possível especificar `VERSION` para imprimir somente a versão da NCCL no início do teste ou `WARN` para receber somente mensagens de erro.

   Para obter mais informações sobre os argumentos de teste da NCCL, consulte o [README NCCL Tests](https://github.com/NVIDIA/nccl-tests/blob/master/README.md) no repositório oficial de nccl-tests.
   + `p3dn.24xlarge`

     ```
     $ /opt/amazon/openmpi/bin/mpirun \
     -x LD_LIBRARY_PATH=/opt/nccl/build/lib:/usr/local/cuda/lib64:/opt/amazon/efa/lib:/opt/amazon/openmpi/lib:/opt/amazon/ofi-nccl/lib:$LD_LIBRARY_PATH \
     -x NCCL_DEBUG=INFO \
     --hostfile my-hosts -n 8 -N 8 \
     --mca pml ^cm --mca btl tcp,self --mca btl_tcp_if_exclude lo,docker0 --bind-to none \
     $HOME/nccl-tests/build/all_reduce_perf -b 8 -e 1G -f 2 -g 1 -c 1 -n 100
     ```
   + `p4d.24xlarge` e da `p5.48xlarge`

     ```
     $ /opt/amazon/openmpi/bin/mpirun \
     -x FI_EFA_USE_DEVICE_RDMA=1 \
     -x LD_LIBRARY_PATH=/opt/nccl/build/lib:/usr/local/cuda/lib64:/opt/amazon/efa/lib:/opt/amazon/openmpi/lib:/opt/amazon/ofi-nccl/lib:$LD_LIBRARY_PATH \
     -x NCCL_DEBUG=INFO \
     --hostfile my-hosts -n 8 -N 8 \
     --mca pml ^cm --mca btl tcp,self --mca btl_tcp_if_exclude lo,docker0 --bind-to none \
     $HOME/nccl-tests/build/all_reduce_perf -b 8 -e 1G -f 2 -g 1 -c 1 -n 100
     ```

1. É possível confirmar se EFA está ativo como o provedor subjacente para NCCL quando o log `NCCL_DEBUG` é impresso.

   ```
   ip-192-168-2-54:14:14 [0] NCCL INFO NET/OFI Selected Provider is efa*
   ```

   As seguintes informações adicionais são exibidas ao usar uma instância `p4d.24xlarge`.

   ```
   ip-192-168-2-54:14:14 [0] NCCL INFO NET/OFI Running on P4d platform, Setting NCCL_TOPO_FILE environment variable to /home/ec2-user/install/plugin/share/aws-ofi-nccl/xml/p4d-24xl-topo.xml
   ```

## Etapa 9: Instalar as aplicações de machine learning
<a name="nccl-start-base-app"></a>

Instale as aplicações de machine learning na instância temporária. O procedimento de instalação varia dependendo da aplicação de machine learning específica. Para obter mais informações sobre instalação de software em sua instância do Linux, consulte [Manage software on your Amazon Linux 2 instance](https://docs.aws.amazon.com/linux/al2/ug/managing-software.html).

**nota**  
Pode ser necessário consultar a documentação da aplicação de machine learning para obter instruções de instalação.

## Etapa 10: Criar um EFA e uma AMI habilitada para NCCL
<a name="nccl-start-base-ami"></a>

Depois de instalar os componentes de software necessários, crie uma AMI que possa ser reutilizada para executar suas instâncias habilitadas para o EFA.

**Para criar uma AMI a partir de sua instância temporária**

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. No painel de navegação, escolha **Instances (Instâncias)**.

1. Selecione a instância, escolha **Actions** (Ações), **Image** (Imagem), **Create image** (Criar imagem).

1. Em **Create image (Criar imagem)**, faça o seguinte:

   1. Em **Image name (Nome da imagem)**, insira um nome descritivo para a AMI.

   1. (Opcional) Em **Image description (Descrição da imagem)**, informe a descrição do propósito da AMI.

   1. Escolha **Create Image (Criar imagem)**.

1. No painel de navegação, selecione **AMIs**.

1. Encontre a AMI que você criou na lista. Aguarde até que o status mude de `pending` para `available` antes de continuar para a próxima etapa.

## Etapa 11: Encerrar a instância temporária
<a name="nccl-start-base-terminate"></a>

Neste ponto, você não precisa mais da instância temporária que você executou. É possível encerrar a instância para não incorrer mais em cobranças desnecessárias.

**Para encerrar a instância temporária**

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. No painel de navegação, escolha **Instances (Instâncias)**.

1. Selecione a instância temporária, escolha **Actions (Ações)**, selecione **Instance state (Estado da instância)**, **Terminate instance (Encerrar instance)**.

1. Quando a confirmação for solicitada, escolha **Terminate (Encerrar)**.

## Etapa 12: Iniciar instâncias habilitadas para EFA e para NCCL em um grupo de posicionamento de cluster
<a name="nccl-start-base-cluster"></a>

Execute as instâncias habilitadas para EFA em um grupo de posicionamento de cluster usando a AMI habilitada para EFA criada e o grupo de segurança habilitado para EFA criado anteriormente.

**nota**  
Não é um requisito absoluto executar suas instâncias habilitadas para EFA em um placement group de cluster. No entanto, recomendamos a execução de suas instâncias habilitadas para EFA em um grupo de posicionamento de cluster ao executar as instâncias em um grupo de baixa latência em uma única zona de disponibilidade.
Para garantir que a capacidade esteja disponível à medida que escala as instâncias do cluster, é possível criar uma reserva de capacidade para o grupo de posicionamento de cluster. Para obter mais informações, consulte [Usar reservas de capacidade em grupos de posicionamento de cluster](cr-cpg.md).

------
#### [ New console ]

**Para executar uma instância temporária**

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. No painel de navegação, selecione **Instances** (Instâncias) e, depois, escolha **Launch Instances** (Iniciar instâncias) para abrir o novo assistente de inicialização de instância.

1. (*Opcional*) Na seção **Name and tags** (Nome e etiquetas), forneça um nome para a instância, como `EFA-instance`. O nome é atribuído à instância como uma etiqueta de recurso (`Name=EFA-instance`).

1. Na seção **Application and OS Images** (Imagens de aplicações e SO), selecione **My AMIs** (Minhas AMIs) e, em seguida, selecione a AMI que você criou na etapa anterior.

1. Na seção **Instance type** (Tipo de instância), selecione `p3dn.24xlarge` ou `p4d.24xlarge`.

1. Na seção **Key pair** (Par de chaves), selecione o par de chaves a ser usado na instância.

1. Na seção **Network settings** (Configurações da rede), escolha **Edit** (Editar) e faça o seguinte:

   1. Em **Subnet (Sub-rede)**, escolha a sub-rede na qual deseja iniciar a instância. Se você não selecionar uma sub-rede, não será possível habilitar a instância para o EFA.

   1. Para **Firewall (security groups)** (Firewall/grupos de segurança), escolha **Select existing security group** (Selecione grupo de segurança existente) e, em seguida, selecione o grupo de segurança que você criou na etapa anterior.

   1. Expanda a seção **Configuração de rede avançada**.

      Para **Interface de rede 1**, selecione **Índice da placa de rede = 0**, **Índice do dispositivo = 0** e **Tipo de interface = EFA com ENA**.

      (Opcional) Caso esteja usando um tipo de instância com várias placas, como `p4d.24xlarge` ou`p5.48xlarge`, para cada interface de rede adicional necessária, selecione **Adicionar interface de rede**, em **Índice da placa de rede**, selecione o próximo índice não utilizado e, em seguida, selecione **Índice do dispositivo = 1** e **Tipo de interface = EFA com ENA** ou **exclusivamente EFA**.

1. (*Opcional*) Na seção **Storage** (Armazenamento), configure os volumes conforme necessário.

1. Na seção **Advanced details** (Detalhes avançados), para **Placement group name** (Nome do grupo de posicionamento), selecione o grupo de posicionamento de cluster no qual iniciar a instância. Caso precise criar um novo grupo de posicionamento de cluster, escolha **Create new placement group** (Criar novo grupo de posicionamento).

1. No painel **Summary** (Resumo) à direita, em **Number of instances** (Número de instâncias), insira o número de instâncias habilitadas para EFA que você deseja iniciar e escolha **Launch instance** (Iniciar instância).

------
#### [ Old console ]

**Para executar as instâncias habilitadas para EFA e NCCL em um grupo de posicionamento de cluster.**

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. Escolha **Launch Instance (Executar instância)**.

1. Na página **Choose an AMI (Escolher uma AMI)**, selecione **My AMIs (Minhas AMIs)**, localize a AMI criada anteriormente e escolha **Select (Selecionar)**.

1. Na página **Choose an Instance Type (Escolher um tipo de instância)**, escolha **p3dn.24xlarge** e selecione **Next: Configure Instance Details (Próximo: configurar detalhes da instância)**.

1. Na página **Configure Instance Details (Configurar detalhes da instância)**, faça o seguinte:

   1. Em **Number of instances (Número de instâncias)**, insira o número de instâncias habilitadas para EFA e NCCL que você deseja executar.

   1. Em **Network (Rede)** e **Subnet (Sub-rede)**, selecione a VPC e a sub-rede na qual executar as instâncias.

   1. Em **Placement group**, selecione **Add instance to placement group (Adicionar instância ao placement group)**.

   1. Em **Placement group name** (Nome do grupo de posicionamento), selecione **Add to a new placement group** (Adicionar a um novo grupo de posicionamento) e, em seguida, insira um nome descritivo para o grupo de posicionamento. Em seguida, em **Placement group strategy** (Estratégia do grupo de posicionamento), selecione **cluster**.

   1. Para **EFA**, escolha **Enable (Habilitar)**.

   1. Na seção **Network Interfaces (Interfaces de rede)**, para dispositivo **eth0**, escolha **New network interface (Nova interface de rede)**. Como opção, é possível especificar um endereço IPv4 principal e um ou mais endereços IPv4 secundários. Se estiver executando a instância em uma sub-rede que tenha um bloco CIDR IPv6 associado, será possível especificar opcionalmente um endereço IPv6 principal e um ou mais endereços IPv6 secundários.

   1. Escolha **Next: Add Storage**.

1. Na página **Add Storage (Adicionar armazenamento)**, especifique os volumes para anexar às instâncias, além dos volumes especificados pela AMI (como o volume raiz). Depois, selecione **Next: Add Tags (Próximo: adicionar tags)**.

1. Na página **Add Tags (Adicionar tags)**, especifique tags para as instâncias, como nome amigável, e selecione **Next: Configure Security Group (Próximo: Configurar grupo de segurança)**.

1. Na página **Configure Security Group** (Configurar grupo de segurança), para **Assign a security group** (Atribuir um grupo de segurança), selecione **Select an existing security group** (Selecionar um grupo de segurança existente) e selecione o grupo de segurança que você criou anteriormente.

1. Escolha **Review and Launch**.

1. Na página **Review Instance Launch (Revisar execução da instância)**, reveja as configurações, e escolha **Launch (Executar)** para escolher um par de chaves e executar a instâncias.

------

## Etapa 13: Habilitar SSH sem senha
<a name="nccl-start-base-passwordless"></a>

Para permitir que suas aplicações sejam executadas em todas as instâncias do cluster, é necessário habilitar o acesso SSH sem senha do nó líder para os nós membros. O nó líder é a instância a partir da qual você executa suas aplicações. As instâncias restantes no cluster são os nós membros.

**Para habilitar SSH sem senha entre as instâncias no cluster**

1. Selecione uma instância no cluster como o nó líder e conecte-se a ela.

1. Desabilite `strictHostKeyChecking` e habilite `ForwardAgent` no nó líder. Abra o `~/.ssh/config` usando o editor de texto de sua preferência e adicione o seguinte.

   ```
   Host *
       ForwardAgent yes
   Host *
       StrictHostKeyChecking no
   ```

1. Gere um par de chaves RSA.

   ```
   $ ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
   ```

   O par de chaves é criado no diretório do `$HOME/.ssh/`.

1. Altere as permissões da chave privada no nó líder.

   ```
   $ chmod 600 ~/.ssh/id_rsa
   chmod 600 ~/.ssh/config
   ```

1. Abra `~/.ssh/id_rsa.pub` usando seu editor de texto preferido e copie a chave.

1. Para cada nó de membro no cluster, faça o seguinte:

   1. Conecte-se à instância.

   1. Abra `~/.ssh/authorized_keys` usando o editor de texto de sua preferência e adicione a chave pública que você copiou anteriormente.

1. Para testar se o SSH sem senha está funcionando como esperado, conecte-se ao seu nó líder e execute o comando a seguir.

   ```
   $ ssh member_node_private_ip
   ```

   É necessário se conectar ao nó membro sem receber uma solicitação para inserir uma chave ou senha.

# Conceitos básicos do EFA e NIXL para workloads de inferência no Amazon EC2
<a name="efa-start-nixl"></a>

A NVIDIA Inference Xfer Library (NIXL) é uma biblioteca de comunicação de alto throughput e baixa latência projetada especificamente para workloads de inferência desagregadas. O NIXL pode ser usado junto com o EFA e o Libfabric para oferecer suporte à transferência de KV-cache entre os nós de pré-preenchimento e decodificação, além de permitir a movimentação eficiente do KV-cache entre várias camadas de armazenamento. Para obter mais informações, acesse o site da [NIXL](https://github.com/ai-dynamo/nixl).

**Requisitos**
+ Apenas as AMIs básicas do Ubuntu 24.04 e do Ubuntu 22.04 são compatíveis.
+ O EFA é compatível somente com a NIXL 1.0.0 e posteriores.

**Topics**

## Etapa 1: Preparar um grupo de segurança habilitado para EFA
<a name="nixl-start-base-setup"></a>

Um EFA requer um grupo de segurança que permita todo o tráfego de entrada e saída do grupo de segurança e para ele próprio. O procedimento a seguir cria um grupo de segurança que permite todo o tráfego de entrada e saída de e para si mesmo e que permite tráfego SSH de entrada de qualquer endereço IPv4 para conectividade SSH.

**Importante**  
Esse grupo de segurança deve ser usado apenas para fins de teste. Para seus ambientes de produção, recomendamos que você crie uma regra SSH de entrada que permita o tráfego somente do endereço IP do qual você está se conectando, como o endereço IP do seu computador ou uma variedade de endereços IP na sua rede local.

Para outros cenários, consulte [Regras de grupo de segurança para diferentes casos de uso](security-group-rules-reference.md).

**Para criar um grupo de segurança habilitado para EFA**

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. No painel de navegação, escolha **Security Groups** (Grupos de segurança) e, em seguida, **Create Security Group** (Criar grupo de segurança).

1. Na janela **Security group** (Grupo de segurança), faça o seguinte:

   1. Em **Security group name** (Nome do grupo de segurança), insira um nome descritivo para o grupo de segurança, como `EFA-enabled security group`.

   1. (Opcional) Em **Description** (Descrição), insira uma breve descrição do grupo de segurança.

   1. Em **VPC**, selecione a VPC na qual você pretende executar suas instâncias habilitadas para EFA.

   1. Escolha **Criar grupo de segurança**.

1. Selecione o grupo de segurança que você criou e, na guia **Details** (Detalhes), copie o **Security group** (Grupo de segurança).

1. Com o grupo de segurança ainda selecionado, escolha **Actions** (Ações), **Edit inbound rules** (Editar regras de entrada), e faça o seguinte:

   1. Escolha **Adicionar regra**.

   1. Para **Tipo**, escolha **Todo o tráfego**.

   1. Para **Source type** (Tipo de origem), escolha **Custom** (Personalizado) e cole o ID do grupo de segurança que você copiou no campo.

   1. Escolha **Adicionar regra**.

   1. Para **Tipo**, escolha **SSH**.

   1. Para **Source type** (Tipo de origem), escolha **Anywhere-IPv4** (IPv4 em qualquer lugar).

   1. Selecione **Salvar regras**.

1. Na lista, selecione o grupo de segurança e escolha **Actions** (Ações), **Edit outbound rules** (Editar regras de saída), e faça o seguinte:

   1. Escolha **Adicionar regra**.

   1. Para **Tipo**, escolha **Todo o tráfego**.

   1. Para **Destination** (Destino), escolha **Custom** (Personalizado) e cole o ID do grupo de segurança que você copiou no campo.

   1. Selecione **Salvar regras**.

## Etapa 2: Iniciar uma instância temporária
<a name="nixl-start-base-temp"></a>

Execute uma instância temporária que é possível usar para instalar e configurar os componentes do software EFA. Você usa essa instância para criar um AMI habilitado para EFA a partir do qual é possível executar suas instâncias habilitadas para EFA.

**Para executar uma instância temporária**

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. No painel de navegação, selecione **Instances** (Instâncias) e, depois, escolha **Launch Instances** (Iniciar instâncias) para abrir o novo assistente de inicialização de instância.

1. (*Opcional*) Na seção **Name and tags** (Nome e etiquetas), forneça um nome para a instância, como `EFA-instance`. O nome é atribuído à instância como uma etiqueta de recurso (`Name=EFA-instance`).

1. Na seção **Application and OS Images** (Imagens de aplicação e sistema operacional), selecione uma AMI para um dos sistemas operacionais compatíveis. Você também pode selecionar uma DLAMI compatível encontrada na [Página de notas de versão de DLAMIs](https://docs.aws.amazon.com/dlami/latest/devguide/appendix-ami-release-notes).

1. Na seção **Instance type** (Tipo de instância), selecione um tipo de instância compatível.

1. Na seção **Key pair** (Par de chaves), selecione o par de chaves a ser usado na instância.

1. Na seção **Network settings** (Configurações da rede), escolha **Edit** (Editar) e faça o seguinte:

   1. Em **Subnet (Sub-rede)**, escolha a sub-rede na qual deseja iniciar a instância. Se você não selecionar uma sub-rede, não será possível habilitar a instância para o EFA.

   1. Para **Firewall (security groups)** (Firewall/grupos de segurança), escolha **Select existing security group** (Selecione grupo de segurança existente) e, em seguida, selecione o grupo de segurança que você criou na etapa anterior.

   1. Expanda a seção **Configuração de rede avançada**.

      Para **Interface de rede 1**, selecione **Índice da placa de rede = 0**, **Índice do dispositivo = 0** e **Tipo de interface = EFA com ENA**.

      **(*Opcional*) Se você estiver usando um tipo de instância com várias placas, como `p4d.24xlarge` ou`p5.48xlarge`, para cada interface de rede adicional necessária, escolha **Adicionar interface de rede**, em **Índice da placa de rede, selecione o próximo índice** não utilizado e, em seguida, selecione **Índice do dispositivo = 1** e **Tipo de interface = EFA com ENA** ou somente EFA.**.

1. Na seção **Storage** (Armazenamento), configure os volumes conforme necessário.
**nota**  
É necessário provisionar um armazenamento adicional de 10 a 20 GiB para o Toolkit Nvidia CUDA. Se você não provisionar armazenamento suficiente, você receberá uma mensagem de erro `insufficient disk space` ao tentar instalar os drivers Nvidia e o Toolkit CUDA.

1. No painel **Summary** (Resumo) painel, escolha **Launch instance** (Iniciar instância).

**Importante**  
Pule a etapa 3 se sua AMI já incluir drivers de GPU da Nvidia, o kit de ferramentas CUDA e o cuDNN, ou se você estiver usando uma instância sem GPU.

## Etapa 3: Instalar drivers de GPU Nvidia, o toolkit Nvidia CUDA e o cuDNN
<a name="nixl-start-base-drivers"></a>

**Para instalar os drivers de GPU Nvidia, o toolkit Nvidia CUDA e o cuDNN**

1. Para garantir que todos os pacotes de software estejam atualizados, execute uma atualização rápida de software em sua instância.

   ```
   $ sudo apt-get update && sudo apt-get upgrade -y
   ```

1. Instale os utilitários necessários para instalar os drivers de GPU Nvidia e o toolkit Nvidia CUDA.

   ```
   $ sudo apt-get install build-essential -y
   ```

1. Para usar o driver de GPU Nvidia, é necessário primeiro desabilitar os drivers de código aberto `nouveau`.

   1. Instale os utilitários necessários e o pacote de cabeçalhos kernel para a versão do kernel que está sendo executada.

      ```
      $ sudo apt-get install -y gcc make linux-headers-$(uname -r)
      ```

   1. Adicione `nouveau` ao arquivo de lista de negação `/etc/modprobe.d/blacklist.conf `.

      ```
      $ cat << EOF | sudo tee --append /etc/modprobe.d/blacklist.conf
      blacklist vga16fb
      blacklist nouveau
      blacklist rivafb
      blacklist nvidiafb
      blacklist rivatv
      EOF
      ```

   1. Abra o `/etc/default/grub` usando o editor de texto de sua preferência e adicione o seguinte.

      ```
      GRUB_CMDLINE_LINUX="rdblacklist=nouveau"
      ```

   1. Recompile a configuração do Grub.

      ```
      $ sudo update-grub
      ```

1. Reinicialize a instância e reconecte-se a ela.

1. Adicione o repositório CUDA e instale os drivers de GPU Nvidia, o toolkit Nvidia CUDA e o cuDNN.

   ```
   $ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/7fa2af80.pub \
   && wget -O /tmp/deeplearning.deb http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/nvidia-machine-learning-repo-ubuntu2004_1.0.0-1_amd64.deb \
   && sudo dpkg -i /tmp/deeplearning.deb \
   && wget -O /tmp/cuda.pin https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin \
   && sudo mv /tmp/cuda.pin /etc/apt/preferences.d/cuda-repository-pin-600 \
   && sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub \
   && sudo add-apt-repository 'deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /' \
   && sudo apt update \
   && sudo apt install nvidia-dkms-535 \
   && sudo apt install -o Dpkg::Options::='--force-overwrite' cuda-drivers-535 cuda-toolkit-12-3 libcudnn8 libcudnn8-dev -y
   ```

1. Reinicialize a instância e reconecte-se a ela.

1. (Somente `p4d.24xlarge` e `p5.48xlarge`) Instale o Nvidia Fabric Manager.

   1. É necessário instalar a versão do Nvidia Fabric Manager que corresponde à versão do módulo do kernel Nvidia que você instalou na etapa anterior.

      Execute o seguinte comando para determinar a versão do módulo do kernel Nvidia.

      ```
      $ cat /proc/driver/nvidia/version | grep "Kernel Module"
      ```

      A seguir está um exemplo de saída.

      ```
      NVRM version: NVIDIA UNIX x86_64 Kernel Module  450.42.01  Tue Jun 15 21:26:37 UTC 2021
      ```

      No exemplo acima, a versão principal`450`do módulo do kernel foi instalado. Isso significa que você precisa instalar a versão do Nvidia Fabric Manager `450`.

   1. Instale o Nvidia Fabric Manager. Execute o seguinte comando e especifique a versão principal identificada na etapa anterior.

      ```
      $ sudo apt install -o Dpkg::Options::='--force-overwrite' nvidia-fabricmanager-major_version_number
      ```

      Por exemplo, se a versão principal`450`do módulo do kernel foi instalado, use o seguinte comando para instalar a versão correspondente do Nvidia Fabric Manager.

      ```
      $ sudo apt install -o Dpkg::Options::='--force-overwrite' nvidia-fabricmanager-450
      ```

   1. Inicie o serviço e certifique-se de que ele seja iniciado automaticamente quando a instância for executada. O Nvidia Fabric Manager é necessário para o gerenciamento do NV Switch.

      ```
      $ sudo systemctl start nvidia-fabricmanager && sudo systemctl enable nvidia-fabricmanager
      ```

1. Certifique-se de que os caminhos do CUDA sejam definidos cada vez que a instância for executada.
   + Em shells *bash*, adicione as seguintes instruções a `/home/username/.bashrc` e `/home/username/.bash_profile`.

     ```
     export PATH=/usr/local/cuda/bin:$PATH
     export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
     ```
   + Em shells *tcsh*, adicione as seguintes instruções a `/home/username/.cshrc`.

     ```
     setenv PATH=/usr/local/cuda/bin:$PATH
     setenv LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
     ```

1. Para verificar se os drivers de GPU Nvidia estão funcionando, execute o comando a seguir.

   ```
   $ nvidia-smi -q | head
   ```

   O comando deve retornar informações sobre os as GPUs Nvidia, sobre os drivers de GPU Nvidia e sobre o toolkit Nvidia CUDA.

**Importante**  
Pule a etapa 4 se sua AMI já incluir o GDRCopy ou se você estiver usando uma instância sem GPU.

## Etapa 4: instalar o GDRCopy
<a name="nixl-start-base-gdrcopy"></a>

Instale o GDRCopy para melhorar a performance do Libfabric em plataformas baseadas em GPU. Para obter mais informações sobre a GDRCopy, consulte o [repositório do GDRCopy](https://github.com/NVIDIA/gdrcopy).

**Para instalar o GDRCopy**

1. Instale as dependências necessárias.

   ```
   $ sudo apt -y install build-essential devscripts debhelper check libsubunit-dev fakeroot pkg-config dkms
   ```

1. Baixe e extraia o pacote do GDRCopy.

   ```
   $ wget https://github.com/NVIDIA/gdrcopy/archive/refs/tags/v2.4.tar.gz \
   && tar xf v2.4.tar.gz \
   && cd gdrcopy-2.4/packages
   ```

1. Compile os pacotes DEB do GDRCopy.

   ```
   $ CUDA=/usr/local/cuda ./build-deb-packages.sh
   ```

1. Instale os pacotes DEB do GDRCopy.

   ```
   $ sudo dpkg -i gdrdrv-dkms_2.4-1_amd64.*.deb \
   && sudo dpkg -i libgdrapi_2.4-1_amd64.*.deb \
   && sudo dpkg -i gdrcopy-tests_2.4-1_amd64.*.deb \
   && sudo dpkg -i gdrcopy_2.4-1_amd64.*.deb
   ```

**Importante**  
Pule a etapa 5 se sua AMI já incluir o instalador mais recente do EFA.

## Etapa 5: instalar o software EFA
<a name="nixl-start-base-enable"></a>

Instale o kernel habilitado para EFA, os drivers EFA, e a pilha do Libfabric necessários para oferecer suporte a EFA em sua instância.

**Como instalar o software EFA**

1. Conecte à instância que você iniciou. Para obter mais informações, consulte [Conectar-se à instância do Linux usando SSH](connect-to-linux-instance.md).

1. Faça download dos arquivos de instalação do software do EFA. Os arquivos de instalação do software são empacotados em um arquivo compactado tarball (`.tar.gz`). Para fazer download da última versão *estável*, use o seguinte comando:

   ```
   $ curl -O https://efa-installer.amazonaws.com/aws-efa-installer-1.47.0.tar.gz
   ```

1. Extraia os arquivos do arquivo `.tar.gz` compactado e navegue para o diretório extraído.

   ```
   $ tar -xf aws-efa-installer-1.47.0.tar.gz && rm -rf aws-efa-installer-1.47.0.tar.gz && cd aws-efa-installer
   ```

1. Execute o script de instalação do software EFA.

   ```
   $ sudo ./efa_installer.sh -y
   ```

   O **Libfabric** está instalado no diretório `/opt/amazon/efa`.

1. Se o instalador do EFA solicitar que você reinicialize a instância, faça-o e, em seguida, reconecte-se à instância. Caso contrário, faça logout da instância e faça login novamente para concluir a instalação.

1. Confirme se os componentes do software EFA foram instalados com sucesso.

   ```
   $ fi_info -p efa -t FI_EP_RDM
   ```

   O comando deve retornar informações sobre as interfaces EFA Libfabric. O exemplo a seguir mostra a saída do comando.
   + `p3dn.24xlarge` com interface de rede única

     ```
     provider: efa
     fabric: EFA-fe80::94:3dff:fe89:1b70
     domain: efa_0-rdm
     version: 2.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     ```
   + `p4d.24xlarge` e `p5.48xlarge` com várias interfaces de rede

     ```
     provider: efa
     fabric: EFA-fe80::c6e:8fff:fef6:e7ff
     domain: efa_0-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     provider: efa
     fabric: EFA-fe80::c34:3eff:feb2:3c35
     domain: efa_1-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     provider: efa
     fabric: EFA-fe80::c0f:7bff:fe68:a775
     domain: efa_2-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     provider: efa
     fabric: EFA-fe80::ca7:b0ff:fea6:5e99
     domain: efa_3-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     ```

## Etapa 6: instalar a NIXL
<a name="nixl-start-base-nixl"></a>

Instale a NIXL. Para obter mais informações sobre a NIXL, consulte o [Repositório da NCCL](https://github.com/ai-dynamo/nixl).

------
#### [ Pre-built distributions ]

**Para instalar a NIXL usando PyPI**

1. Instale as dependências necessárias.

   ```
   $ sudo apt install pip
   ```

1. Instale a NIXL.

   ```
   $ pip install nixl
   ```

------
#### [ Build from source ]

**Para compilar e instalar usando o código-fonte**

1. Instale as dependências necessárias.

   ```
   $ sudo apt install cmake pkg-config meson pybind11-dev libaio-dev nvidia-cuda-toolkit pip libhwloc-dev \
   && pip install meson ninja pybind11
   ```

1. Navegue até o diretório inicial.

   ```
   $ cd $HOME
   ```

1. Clone o repositório oficial da NIXL para a instância e navegue até o repositório local clonado.

   ```
   $ sudo git clone https://github.com/ai-dynamo/nixl.git && cd nixl
   ```

1. Compile e instale a NIXL e especifique o caminho para o diretório de instalação do Libfabric.

   ```
   $ sudo meson setup . nixl --prefix=/usr/local/nixl -Dlibfabric_path=/opt/amazon/efa
   $ cd nixl && sudo ninja && sudo ninja install
   ```

------

## Etapa 7: instalar o NIXL Benchmark e testar sua configuração de EFA e NIXL
<a name="nixl-start-base-tests"></a>

Instale o NIXL Benchmark e execute um teste para verificar se a instância temporária está configurada adequadamente para o EFA e para a NIXL. O NIXL Benchmark permite confirmar se a NIXL está instalada adequadamente se ela está funcionando conforme esperado. Para obter mais informações, consulte o [Repositório do nixlbench](https://github.com/ai-dynamo/nixl/tree/main/benchmark/nixlbench).

O NIXL Benchmark (nixlbench) requer ETCD para coordenação entre cliente e servidor. Para usar o ETCD com NIXL, é necessário o ETCD Server and Client e a API ETCD CPP.

------
#### [ Build from Docker ]

**Para instalar e testar o NIXL Benchmark usando o Docker**

1. Clone o repositório oficial da NIXL para a instância e navegue até o diretório de compilação do nixlbench.

   ```
   $ git clone https://github.com/ai-dynamo/nixl.git
   $ cd nixl/benchmark/nixlbench/contrib
   ```

1. Crie o contêiner.

   ```
   $ ./build.sh
   ```

   Para obter mais informações sobre as opções de compilação do Docker, consulte o [Repositório do nixlbench](https://github.com/ai-dynamo/nixl/tree/main/benchmark/nixlbench).

1. Instalar o Docker.

   ```
   $ sudo apt install docker.io -y
   ```

1. Inicie o servidor ETCD para coordenação.

   ```
   $ docker run -d --name etcd-server \
       -p 2379:2379 -p 2380:2380 \
       quay.io/coreos/etcd:v3.5.18 \
       /usr/local/bin/etcd \
       --data-dir=/etcd-data \
       --listen-client-urls=http://0.0.0.0:2379 \
       --advertise-client-urls=http://0.0.0.0:2379 \
       --listen-peer-urls=http://0.0.0.0:2380 \
       --initial-advertise-peer-urls=http://0.0.0.0:2380 \
       --initial-cluster=default=http://0.0.0.0:2380
   ```

1. Valide se o servidor ETCD está em execução.

   ```
   $ curl -L http://localhost:2379/health
   ```

   Saída esperada:

   ```
   {"health":"true"}
   ```

1. Abra dois terminais para a instância. Em ambos os terminais, execute o comando a seguir para verificar a instalação. O comando usa o servidor ETCD na mesma instância, usa o Libfabric como backend e opera usando memória da GPU.

   ```
   $ docker run -it --gpus all --network host nixlbench:latest \
       nixlbench --etcd_endpoints http://localhost:2379 \
       --backend LIBFABRIC \
       --initiator_seg_type VRAM \
       --target_seg_type VRAM
   ```
**nota**  
Use o valor `DRAM` em vez de `VRAM` para instâncias sem GPU.

------
#### [ Build from source ]

**Importante**  
Siga essa guia somente se você escolher **Compilar do código-fonte** na Etapa 6.

**Para instalar o NIXL Benchmark**

1. Instale as dependências do sistema necessárias.

   ```
   $ sudo apt install libgflags-dev
   ```

1. Instale o servidor e o cliente ETCD.

   ```
   $ sudo apt install -y etcd-server etcd-client
   ```

1. Instale a API ETCD CPP.

   1. Instale as dependências necessárias para a API ETCD CPP.

      ```
      $ sudo apt install libboost-all-dev libssl-dev libgrpc-dev libgrpc++-dev libprotobuf-dev protobuf-compiler-grpc libcpprest-dev
      ```

   1. Clone e instale a API ETCD CPP.

      ```
      $ cd $HOME
      $ git clone https://github.com/etcd-cpp-apiv3/etcd-cpp-apiv3.git
      $ cd etcd-cpp-apiv3
      $ mkdir build && cd build
      $ cmake ..
      $ sudo make -j$(nproc) && sudo make install
      ```

1. Compile e instale o nixlbench.

   ```
   $ sudo meson setup . $HOME/nixl/benchmark/nixlbench -Dnixl_path=/usr/local/nixl/
   $ sudo ninja && sudo ninja install
   ```

**Como testar a configuração do EFA e da NIXL**

1. Inicie o servidor ETCD na instância.

   ```
   $ etcd --listen-client-urls "http://0.0.0.0:2379" \
       --advertise-client-urls "http://localhost:2379" &
   ```

1. Valide se o servidor ETCD está em execução.

   ```
   $ curl -L http://localhost:2379/health
   ```

   Saída esperada:

   ```
   {"health":"true"}
   ```

1. Abra dois terminais para a instância. Em ambos os terminais, conclua as etapas a seguir para executar o nixlbench.

   1. Navegue até o diretório em que o nixlbench está instalado.

      ```
      $ cd /usr/local/nixlbench/bin/
      ```

   1. Execute o teste e especifique o backend, o endereço do servidor ETCD e o tipo de segmento iniciador. O comando a seguir usa o servidor ETCD na mesma instância, usa o Libfabric como backend e opera usando memória da GPU. As variáveis de ambiente configuram o seguinte:
      + `NIXL_LOG_LEVEL=INFO`: habilita a saída de depuração detalhada. Também é possível especificar `WARN` para receber somente mensagens de erro.
      + `LD_LIBRARY_PATH`: define o caminho para a biblioteca NIXL.

      Para obter mais informações sobre os argumentos de NIXL Benchmark, consulte o [README do NIXLbench](https://github.com/ai-dynamo/nixl/blob/main/benchmark/nixlbench/README.md) no repositório oficial do nixlbench.

      ```
      $ export NIXL_LOG_LEVEL=INFO
      $ export LD_LIBRARY_PATH=/usr/local/nixl/lib/$(gcc -dumpmachine):$LD_LIBRARY_PATH
      
      $ nixlbench --etcd-endpoints 'http://localhost:2379' \
          --backend 'LIBFABRIC' \
          --initiator_seg_type 'VRAM' \
          --target_seg_type 'VRAM'
      ```
**nota**  
Use o valor `DRAM` em vez de `VRAM` para instâncias sem GPU.

------

## Etapa 8: Instalar os aplicativos de machine learning
<a name="nixl-start-base-app"></a>

Instale as aplicações de machine learning na instância temporária. O procedimento de instalação varia dependendo da aplicação de machine learning específica.

**nota**  
Talvez seja necessário consultar a documentação da aplicação de machine learning para obter instruções de instalação.

## Etapa 9: criar um EFA e uma AMI habilitada para NIXL
<a name="nixl-start-base-ami"></a>

Depois de instalar os componentes de software necessários, crie uma AMI que possa ser reutilizada para executar suas instâncias habilitadas para o EFA.

**Para criar uma AMI a partir de sua instância temporária**

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. No painel de navegação, escolha **Instances (Instâncias)**.

1. Selecione a instância, escolha **Actions** (Ações), **Image** (Imagem), **Create image** (Criar imagem).

1. Em **Create image (Criar imagem)**, faça o seguinte:

   1. Em **Image name (Nome da imagem)**, insira um nome descritivo para a AMI.

   1. (Opcional) Em **Image description (Descrição da imagem)**, informe a descrição do propósito da AMI.

   1. Escolha **Create Image (Criar imagem)**.

1. No painel de navegação, selecione **AMIs**.

1. Encontre a AMI que você criou na lista. Aguarde até que o status mude de `pending` para `available` antes de continuar para a próxima etapa.

## Etapa 10: Encerrar a instância temporária
<a name="nixl-start-base-terminate"></a>

Neste ponto, você não precisa mais da instância temporária que você executou. É possível encerrar a instância para não incorrer mais em cobranças desnecessárias.

**Para encerrar a instância temporária**

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. No painel de navegação, escolha **Instances (Instâncias)**.

1. Selecione a instância temporária, escolha **Actions (Ações)**, selecione **Instance state (Estado da instância)**, **Terminate instance (Encerrar instance)**.

1. Quando a confirmação for solicitada, escolha **Terminate (Encerrar)**.

## Etapa 11: executar instâncias habilitadas para EFA e NIXL
<a name="nixl-start-base-cluster"></a>

Execute as instâncias habilitadas para EFA e NIXL usando a AMI habilitada para EFA que você criou na **Etapa 9** e o grupo de segurança habilitado para EFA que você criou na **Etapa 1**.

**Para executar as instâncias habilitadas para EFA e NIXL**

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. No painel de navegação, selecione **Instances** (Instâncias) e, depois, escolha **Launch Instances** (Iniciar instâncias) para abrir o novo assistente de inicialização de instância.

1. (*Opcional*) Na seção **Name and tags** (Nome e etiquetas), forneça um nome para a instância, como `EFA-instance`. O nome é atribuído à instância como uma etiqueta de recurso (`Name=EFA-instance`).

1. Na seção **Application and OS Images** (Imagens de aplicações e SO), selecione **My AMIs** (Minhas AMIs) e, em seguida, selecione a AMI que você criou na etapa anterior.

1. Na seção **Instance type** (Tipo de instância), selecione um tipo de instância compatível.

1. Na seção **Key pair** (Par de chaves), selecione o par de chaves a ser usado na instância.

1. Na seção **Network settings** (Configurações da rede), escolha **Edit** (Editar) e faça o seguinte:

   1. Em **Subnet (Sub-rede)**, escolha a sub-rede na qual deseja iniciar a instância. Se você não selecionar uma sub-rede, não será possível habilitar a instância para o EFA.

   1. Em **Firewall (grupos de segurança)**, escolha **Selecionar grupo de segurança existente** e, em seguida, selecione o grupo de segurança que você criou na **Etapa 1**.

   1. Expanda a seção **Configuração de rede avançada**.

      Para **Interface de rede 1**, selecione **Índice da placa de rede = 0**, **Índice do dispositivo = 0** e **Tipo de interface = EFA com ENA**.

      (*Opcional*) Caso esteja usando um tipo de instância com várias placas, como `p4d.24xlarge` ou `p5.48xlarge`, para cada interface de rede adicional necessária, selecione **Adicionar interface de rede**, em **Índice da placa de rede**, selecione o próximo índice não utilizado e, em seguida, selecione **Índice do dispositivo = 1** e **Tipo de interface = EFA com ENA** ou **exclusivamente EFA**.

1. (*Opcional*) Na seção **Storage** (Armazenamento), configure os volumes conforme necessário.

1. No painel **Summary** (Resumo) à direita, em **Number of instances** (Número de instâncias), insira o número de instâncias habilitadas para EFA que você deseja iniciar e escolha **Launch instance** (Iniciar instância).

## Etapa 12: habilitar SSH sem senha
<a name="nixl-start-base-passwordless"></a>

Para permitir que suas aplicações sejam executadas em todas as instâncias do cluster, é necessário habilitar o acesso SSH sem senha do nó líder para os nós membros. O nó líder é a instância a partir da qual você executa suas aplicações. As instâncias restantes no cluster são os nós membros.

**Para habilitar SSH sem senha entre as instâncias no cluster**

1. Selecione uma instância no cluster como o nó líder e conecte-se a ela.

1. Desabilite `strictHostKeyChecking` e habilite `ForwardAgent` no nó líder. Abra o `~/.ssh/config` usando o editor de texto de sua preferência e adicione o seguinte.

   ```
   Host *
       ForwardAgent yes
   Host *
       StrictHostKeyChecking no
   ```

1. Gere um par de chaves RSA.

   ```
   $ ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
   ```

   O par de chaves é criado no diretório do `$HOME/.ssh/`.

1. Altere as permissões da chave privada no nó líder.

   ```
   $ chmod 600 ~/.ssh/id_rsa
   chmod 600 ~/.ssh/config
   ```

1. Abra `~/.ssh/id_rsa.pub` usando seu editor de texto preferido e copie a chave.

1. Para cada nó de membro no cluster, faça o seguinte:

   1. Conecte-se à instância.

   1. Abra `~/.ssh/authorized_keys` usando o editor de texto de sua preferência e adicione a chave pública que você copiou anteriormente.

1. Para testar se o SSH sem senha está funcionando como esperado, conecte-se ao seu nó líder e execute o comando a seguir.

   ```
   $ ssh member_node_private_ip
   ```

   É necessário se conectar ao nó membro sem receber uma solicitação para inserir uma chave ou senha.

**Importante**  
Siga a Etapa 13 somente se você seguiu a Etapa 7.

## Etapa 13: testar a configuração do EFA e da NIXL em todas as instâncias
<a name="nixl-start-base-test-multi"></a>

Execute um teste para verificar se as instâncias estão configuradas adequadamente para EFA e para NIXL.

------
#### [ Build from Docker ]

**Para testar a configuração do EFA e da NIXL em todas as instâncias usando o Docker**

1. Selecione dois hosts para executar o nixlbench benchmark. Use o endereço IP do primeiro host como o IP do servidor ETCD para troca de metadados.

1. Inicie o servidor ETCD no host 1.

   ```
   $ docker run -d --name etcd-server \
       -p 2379:2379 -p 2380:2380 \
       quay.io/coreos/etcd:v3.5.18 \
       /usr/local/bin/etcd \
       --data-dir=/etcd-data \
       --listen-client-urls=http://0.0.0.0:2379 \
       --advertise-client-urls=http://0.0.0.0:2379 \
       --listen-peer-urls=http://0.0.0.0:2380 \
       --initial-advertise-peer-urls=http://0.0.0.0:2380 \
       --initial-cluster=default=http://0.0.0.0:2380
   ```

1. Valide se o servidor ETCD está em execução.

   ```
   $ curl -L http://localhost:2379/health
   ```

   ```
   {"health":"true"}
   ```

1. Execute o nixlbench benchmark no host 1.

   ```
   $ docker run -it --gpus all --network host nixlbench:latest \
       nixlbench --etcd_endpoints http://localhost:2379 \
       --backend LIBFABRIC \
       --initiator_seg_type VRAM
   ```

1. Execute o nixlbench benchmark no host 2.

   ```
   $ docker run -it --gpus all --network host nixlbench:latest \
       nixlbench --etcd_endpoints http://ETCD_SERVER_IP:2379 \
       --backend LIBFABRIC \
       --initiator_seg_type VRAM
   ```

------
#### [ Build from source ]

**Importante**  
Siga essa guia somente se você escolher **Compilar do código-fonte** na Etapa 6.

**Para testar a configuração do EFA e da NIXL em todas as instâncias**

1. Selecione dois hosts para executar o nixlbench benchmark. Use o endereço IP do primeiro host como o IP do servidor ETCD para troca de metadados.

1. Execute o servidor ETCD no host 1.

   ```
   $ etcd --listen-client-urls "http://0.0.0.0:2379" \
       --advertise-client-urls "http://localhost:2379" &
   ```

1. Valide se o servidor ETCD está em execução.

   ```
   $ curl -L http://localhost:2379/health
   ```

   ```
   {"health":"true"}
   ```

1. Execute o nixlbench benchmark no host 1.

   ```
   $ export NIXL_LOG_LEVEL=INFO
   $ export LD_LIBRARY_PATH=$HOME/nixl/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
   
   $ nixlbench \
       --etcd-endpoints http://localhost:2379 \
       --backend LIBFABRIC \
       --initiator_seg_type VRAM
   ```

1. Execute o nixlbench benchmark no host 2.

   ```
   $ export NIXL_LOG_LEVEL=INFO
   $ export LD_LIBRARY_PATH=$HOME/nixl/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
   
   $ nixlbench \
       --etcd-endpoints http://ETCD_SERVER_IP:2379 \
       --backend LIBFABRIC \
       --initiator_seg_type VRAM
   ```

------

## *Etapa 14: testar o serviço de inferência desagregado no vLLM (opcional)*
<a name="nixl-start-base-serve"></a>

Depois que a NIXL for instalada, você poderá usar a NIXL por meio de inferência e estruturas de serviço do LLM, como vLLM, SGLang e Tensorrt-LLM.

**Para atender à sua workload de inferência usando o vLLM**

1. Instale o vLLM.

   ```
   $ pip install vllm
   ```

1. Execute o servidor vLLM com NIXL. Os exemplos de comandos a seguir criam uma instância de pré-preenchimento (produtor) e uma instância de decodificação (consumidor) para conexão de handshake NIXL, conector KV, perfil KV e backend de transporte. Para exemplos e scripts detalhados, consulte o [Guia de uso do NIXLConnector](https://github.com/vllm-project/vllm/blob/2d977a7a9ead3179fde9ed55d69393ef7b6cec47/docs/features/nixl_connector_usage.md).

   Para usar NIXL com o EFA, defina as variáveis de ambiente com base em sua configuração e caso de uso.
   + Configuração do produtor (pré-preenchedor)

     ```
     $ vllm serve your-application \
         --port 8200 \
         --enforce-eager \
         --kv-transfer-config '{"kv_connector":"NixlConnector","kv_role":"kv_both","kv_buffer_device":"cuda","kv_connector_extra_config":{"backends":["LIBFABRIC"]}}'
     ```
   + Configuração do consumidor (decodificador)

     ```
     $ vllm serve your-application \
         --port 8200 \
         --enforce-eager \
         --kv-transfer-config '{"kv_connector":"NixlConnector","kv_role":"kv_both","kv_buffer_device":"cuda","kv_connector_extra_config":{"backends":["LIBFABRIC"]}}'
     ```

   O exemplo de configuração anterior define o seguinte:
   + `kv_role` como `kv_both`, que permite uma funcionalidade simétrica em que o conector pode atuar como produtor e consumidor. Isso fornece flexibilidade para configurações e cenários experimentais em que a distinção de perfis não é predeterminada.
   + `kv_buffer_device` a `cuda`, o que permite o uso da memória da GPU.
   + Backend NIXL para `LIBFABRIC`, o que permite que o tráfego NIXL passe pelo EFA.

# Maximize a largura de banda da rede em instâncias do Amazon EC2 com várias placas de rede
<a name="efa-acc-inst-types"></a>

Muitos tipos de instâncias que oferecem suporte ao EFA também têm várias placas de rede. Para obter mais informações, consulte [Placas de rede](using-eni.md#network-cards). Se você planeja usar o EFA com um desses tipos de instâncias, recomendamos a seguinte configuração básica:
+ Para a interface de rede primária (índice da placa de rede `0`, índice do dispositivo `0`), crie uma interface ENA. Você não pode usar uma interface de rede exclusiva do EFA como interface de rede primária.
+ Se o índice da placa de rede 0 for compatível com o EFA, crie uma interface de rede somente EFA para índice de placa de rede `0`, índice de dispositivo `1`.
+ Para cada interface de rede adicional, use o próximo índice de placa da rede não usado, índice do dispositivo `0`, para interface de rede somente EFA e/ou índice de dispositivo `1` para interface de rede ENA, dependendo do seu caso de uso, como requisitos de largura de banda do ENA ou espaço de endereço IP. Para obter casos de uso de exemplo, consulte [Configuração de EFA para instâncias P5 e P5e](#efa-for-p5).

**nota**  
As instâncias P5 exigem que as interfaces de rede sejam configuradas de uma maneira específica para permitir a máxima largura de banda da rede. Para obter mais informações, consulte [Configuração de EFA para instâncias P5 e P5e](#efa-for-p5).

Os exemplos a seguir mostram como iniciar uma instância com base nessas recomendações.

------
#### [ Instance launch ]

**Para especificar EFAs durante a inicialização da instância usando o assistente de inicialização de instâncias**

1. Na seção **Configurações de rede**, escolha **Editar**.

1. Expanda **Configuração de rede avançada**.

1. Para a interface de rede primária (índice da placa de rede `0`, índice do dispositivo `0`), crie uma interface ENA. Você não pode usar uma interface de rede exclusiva do EFA como interface de rede primária.

1. Se o índice da placa de rede 0 for compatível com o EFA, crie uma interface de rede somente EFA para índice de placa de rede `0`, índice de dispositivo `1`.

1. Para cada interface de rede adicional, use o próximo índice de placa da rede não usado, índice do dispositivo `0`, para interface de rede somente EFA e/ou índice de dispositivo `1` para interface de rede ENA, dependendo do seu caso de uso, como requisitos de largura de banda do ENA ou espaço de endereço IP. Para obter casos de uso de exemplo, consulte [Configuração de EFA para instâncias P5 e P5e](#efa-for-p5).

**Para especificar EFAs durante a execução da instância usando o comando [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html)**  
Para`--network-interfaces`, especifique o número necessário de interfaces de rede. Para a interface de rede primária, especifique `NetworkCardIndex=0`, `DeviceIndex=0`, e `InterfaceType=interface`. Se o índice da placa de rede 0 for compatível com EFA, especifique `NetworkCardIndex=0``DeviceIndex=1` e `InterfaceType=efa-only`. Para qualquer interface de rede adicional, especifique o próximo índice não utilizado para o `NetworkCardIndex`, `DeviceIndex=0` para `InterfaceType=efa-only` e/ou `DeviceIndex=1` para `InterfaceType=interface`.

O exemplo de snippet de comando a seguir mostra uma solicitação com 32 dispositivos EFA e um dispositivo ENA.

```
$ aws ec2 run-instances \
 --instance-type p5.48xlarge \
 --count 1 \
 --key-name key_pair_name \
 --image-id ami-0abcdef1234567890 \
 --network-interfaces "NetworkCardIndex=0,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=0,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=1,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=2,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=3,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=4,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=5,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=6,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=7,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=8,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=9,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=10,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=11,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=12,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=13,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=14,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=15,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=16,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=17,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=18,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=19,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=20,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=21,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=22,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=23,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=24,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=25,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=26,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=27,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=28,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=29,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=30,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=31,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only"
...
```

------
#### [ Launch templates ]

**Para adicionar EFAs a um modelo de execução usando o console do Amazon EC2**

1. Na seção **Configurações de rede**, expanda **Configuração de rede avançada**.

1. Para a interface de rede primária (índice da placa de rede `0`, índice do dispositivo `0`), crie uma interface ENA. Você não pode usar uma interface de rede exclusiva do EFA como interface de rede primária.

1. Se o índice da placa de rede 0 for compatível com o EFA, crie uma interface de rede somente EFA para índice de placa de rede `0`, índice de dispositivo `1`.

1. Para cada interface de rede adicional, use o próximo índice de placa da rede não usado, índice do dispositivo `0`, para interface de rede somente EFA e/ou índice de dispositivo `1` para interface de rede ENA, dependendo do seu caso de uso, como requisitos de largura de banda do ENA ou espaço de endereço IP. Para obter casos de uso de exemplo, consulte [Configuração de EFA para instâncias P5 e P5e](#efa-for-p5). 

**Para adicionar EFAs a um modelo de execução usando o comando [create-launch-template](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-launch-template.html)**  
Para`NetworkInterfaces`, especifique o número necessário de interfaces de rede. Para a interface de rede primária, especifique `NetworkCardIndex=0`, `DeviceIndex=0`, e `InterfaceType=interface`. Se o índice da placa de rede 0 for compatível com EFA, especifique `NetworkCardIndex=0``DeviceIndex=1` e `InterfaceType=efa-only`. Para qualquer interface de rede adicional, especifique o próximo índice não utilizado para o `NetworkCardIndex`, `DeviceIndex=0` para `InterfaceType=efa-only` e/ou `DeviceIndex=1` para `InterfaceType=interface`.

O trecho a seguir mostra um exemplo com 3 interfaces de rede das 32 interfaces de rede possíveis.

```
"NetworkInterfaces":[
{
  "NetworkCardIndex":0,
  "DeviceIndex":0,
  "InterfaceType": "interface",
  "AssociatePublicIpAddress":false,
  "Groups":[
    "security_group_id"
  ],
  "DeleteOnTermination":true
},
{
  "NetworkCardIndex": 0,
  "DeviceIndex": 1,
  "InterfaceType": "efa-only",
  "AssociatePublicIpAddress":false,
  "Groups":[
    "security_group_id"
  ],
  "DeleteOnTermination":true
},
{
  "NetworkCardIndex": 1,
  "DeviceIndex": 0,
  "InterfaceType": "efa-only",
  "AssociatePublicIpAddress":false,
  "Groups":[
    "security_group_id"
  ],
  "DeleteOnTermination":true
},
{
  "NetworkCardIndex": 2,
  "DeviceIndex": 0,
  "InterfaceType": "efa-only",
  "AssociatePublicIpAddress":false,
  "Groups":[
    "security_group_id"
  ],
  "DeleteOnTermination":true
},
{
  "NetworkCardIndex": 3,
  "DeviceIndex": 0,
  "InterfaceType": "efa-only",
  "AssociatePublicIpAddress":false,
  "Groups":[
    "security_group_id"
  ],
  "DeleteOnTermination":true
}
...
```

------

## Configuração de EFA para instâncias P5 e P5e
<a name="efa-for-p5"></a>

As instâncias `p5.48xlarge` e `p5e.48xlarge` oferecem suporte a 32 placas de rede e têm uma capacidade total de largura de banda da rede de 3.200 Gbps, dos quais até 800 Gbps podem ser utilizados para tráfego de rede IP. Como o tráfego de rede EFA e IP compartilha os mesmos recursos subjacentes, a largura de banda usada por um reduzirá a largura de banda disponível para o outro. Isso significa que você pode distribuir a largura de banda da rede entre o tráfego EFA e o tráfego IP em qualquer combinação, desde que a largura de banda total não exceda 3.200 Gbps e a largura de banda IP não exceda 800 Gbps. Por exemplo, se você usar 400 Gbps para a largura de banda IP, poderá atingir até 2.800 Gbps de largura de banda EFA ao mesmo tempo.

**Caso de uso 1: salve endereços IP e evite possíveis problemas de IP do Linux**

Essa configuração fornece até 3200 Gbps de largura de banda de rede EFA e até 100 Gbps de largura de banda de rede IP com um endereço IP privado. Essa configuração também ajuda a evitar possíveis problemas de IP do Linux, como atribuição automática não permitida de endereços IP públicos e desafios de roteamento IP (problemas de mapeamento de nome de host para endereço IP e incompatibilidade de endereço IP de origem), que podem surgir se uma instância tiver várias interfaces de rede. 
+ Para a interface de rede primária (índice da placa de rede 0, índice do dispositivo 0), use uma interface ENA.
+ Para índice da placa de rede 0, índice do dispositivo 1, crie uma interface de rede somente EFA.
+ Para as demais interfaces de rede (índices da placa de rede de 1 a 31, índice do dispositivo 1), use interfaces de rede somente EFA.

**Caso de uso 2: largura de banda máxima de rede EFA e IP**

Essa configuração fornece até 3200 Gbps de largura de banda de rede EFA e até 800 Gbps de largura de banda de rede IP com 8 endereços IP privados. Você não pode atribuir automaticamente endereços IP públicos com essa configuração. No entanto, você pode anexar um endereço IP elástico à interface de rede primária (índice da placa de rede 0, índice do dispositivo 0) após a execução para ter conectividade com a Internet.
+ Para a interface de rede primária (índice da placa de rede 0, índice do dispositivo 0), use uma interface de rede EFA.
+ Para as interfaces restantes, faça o seguinte:
  + Especifique interfaces de rede somente EFA no índice de placa de rede 0 e no índice de dispositivo 1 e, para os índices de placa de rede 1, 2 e 3, use o índice do dispositivo 0.
  + Especifique uma interface de rede ENA e quatro interfaces de rede somente EFA **em cada um** dos seguintes subconjuntos de índice de placa de rede, e use o índice do dispositivo 1 para a interface de rede ENA e o índice do dispositivo 0 para interfaces de rede somente EFA:
    + [4,5,6,7]
    + [8,9,10,11]
    + [12,13,14,15]
    + [16,17,18,19]
    + [20,21,22,23]
    + [24,25,26,27]
    + [28,29,30,31]

O exemplo a seguir ilustra essa configuração:

```
$ aws --region $REGION ec2 run-instances \
 --instance-type p5.48xlarge \
 --count 1 \
 --key-name key_pair_name \
 --image-id ami_id \
 --network-interfaces "NetworkCardIndex=0,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=0,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=1,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=2,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=3,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=4,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=4,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=5,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=6,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=7,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=8,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=8,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=9,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=10,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=11,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=12,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=12,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=13,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=14,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=15,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=16,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=16,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=17,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=18,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=19,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=20,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=20,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=21,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=22,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=23,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=24,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=24,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=25,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=26,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=27,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=28,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=28,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=29,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=30,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=31,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only"
...
```

## Configuração da EFA para instâncias P6-B200
<a name="efa-for-p6-b200"></a>

As instâncias P6-B200 têm uma capacidade total de largura de banda da rede de 3.200 Gbps, dos quais até 1600 Gbps podem ser utilizados para ENA. Elas têm 8 GPUs e 8 placas de rede, e cada placa de rede tem capacidade para até 400 Gbps de largura de banda EFA e 200 Gbps de largura de banda ENA. Como tráfego de rede EFA e ENA compartilha os mesmos recursos subjacentes, a largura de banda usada por um reduzirá a largura de banda disponível para o outro.

**Caso de uso 1: salvar endereços IP**

Essa configuração consome pelo menos um endereço IP privado por instância e tem capacidade para até 3200 Gbps de largura de banda EFA e 200 Gbps de largura de banda ENA.
+ Para a interface de rede primária (índice da placa de rede 0, índice do dispositivo 0), use uma interface ENA.
+ Para índice da placa de rede 0, índice do dispositivo 1, crie uma interface de rede somente EFA.
+ Para as outras 7 placas de rede (índices da placa de rede de 1 a 7, índice do dispositivo 1), use interfaces de rede somente EFA.

**Caso de uso 2: largura de banda máxima para EFA e ENA**

Essa configuração consome pelo menos oito endereços IP privados por instância e tem capacidade para até 3200 Gbps de largura de banda EFA e 1600 Gbps de largura de banda ENA.
+ Para a interface de rede primária (índice da placa de rede 0, índice do dispositivo 0), use uma interface ENA.
+ Para índice da placa de rede 0, índice do dispositivo 1, crie uma interface de rede somente EFA.
+ Para as outras 7 placas de rede (índices de placa de rede 1 a 7), crie uma interface de rede somente EFA no índice do dispositivo 0 e uma interface de rede ENA no índice do dispositivo 1.

## Configuração do EFA para instâncias P6e-GB200
<a name="efa-for-p6e"></a>

As instâncias P6e-GB200 podem ser configuradas com até 17 placas de rede. A imagem a seguir mostra o layout da placa de interface de rede (NIC) física para instâncias P6e-GB200, com o mapeamento dos índices de placa de rede (NCIs).

![\[Mapeamento da placa de interface de rede (NIC) física e do índice de placa de rede (NCI) para instâncias P6e-GB200.\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/images/p6e.png)


O NCI primário (índice 0) suporta até 100 Gbps de largura de banda ENA. Os NCIs com os seguintes índices suportam apenas interfaces de rede EFA e largura de banda EFA de 400 Gbps: [1, 3, 5, 7, 9, 11, 13, 15]. Os NCIs com os seguintes índices suportam largura de banda ENA ou EFA de até 200 Gbps: [2, 4, 6, 8, 10, 12, 14, 16].

Os NCIs nos seguintes grupos compartilham um NIC físico subjacente no host:
+ [1 e 2]
+ [3 e 4]
+ [5 e 6]
+ [7 e 8]
+ [9 e 10]
+ [11 e 12]
+ [13 e 14]
+ [15 e 16]

Cada NIC física suporta até 400 Gbps de largura de banda. Como os NCIs desses grupos compartilham a mesma NIC física subjacente, a largura de banda usada por um reduzirá a largura de banda disponível para o outro. Por exemplo, se o NCI 2 usar 200 Gbps de largura de banda ENA, o NCI 1 poderá usar até 200 Gbps de largura de banda EFA ao mesmo tempo.

Cada GPU subjacente no host pode enviar tráfego diretamente pelos seguintes pares de NCIs:
+ [1 e 3]
+ [5 e 7]
+ [9 e 11]
+ [13 e 15]

Cada GPU suporta até 400 Gbps de largura de banda EFA. Como as placas de rede desses grupos compartilham a mesma GPU, a largura de banda usada por uma reduzirá a largura de banda disponível para a outra. Por exemplo, se o NCI 1 usar 200 Gbps de largura de banda EFA, o NCI 3 poderá usar até 200 Gbps de largura de banda EFA ao mesmo tempo. Portanto, para obter a máxima performance do EFA, recomendamos **executar uma das seguintes ações** para alcançar um total de 1.600 Gbps de largura de banda EFA:
+ Adicione uma interface de rede somente EFA a apenas um NCI em cada grupo para obter 400 Gbps por interface de rede (*4 interfaces de rede EFA x 400 Gbps*).
+ Adicione uma interface de rede somente EFA a cada NCI em cada grupo para obter 200 Gbps por interface de rede (*8 interfaces de rede EFA x 200 Gbps*).

Por exemplo, a configuração a seguir fornece até 1.600 Gbps de largura de banda EFA usando uma única interface de rede somente EFA em cada grupo de NCI, e até 100 Gbps de largura de banda da rede ENA usando somente o NCI primário (índice 0).
+ No NCI primário (índice de placa de rede 0, índice de dispositivo 0), use uma interface de rede ENA.
+ Adicione interfaces de rede somente EFA aos seguintes índices:
  + NCI 1, índice de dispositivo 0
  + NCI 5, índice de dispositivo 0
  + NCI 9, índice de dispositivo 0
  + NCI 13, índice de dispositivo 0

## Configuração da EFA para instâncias P6-B300
<a name="efa-for-p6-b300"></a>

As instâncias P6-B300 têm uma capacidade total de largura de banda da rede de até 6400 Gbps para tráfego EFA e até 3870 Gbps para ENA. Elas têm 8 GPUs e 17 placas de rede, em que a placa de rede primária suporta apenas uma interface de rede ENA com até 350 Gbps de largura de banda. As placas de rede secundárias suportam até 400 Gbps EFA e até 220 Gbps de largura de banda ENA. Como tráfego de rede EFA e ENA compartilha os mesmos recursos subjacentes, a largura de banda usada por um reduzirá a largura de banda disponível para o outro.

![\[Mapeamento da placa de interface de rede (NIC) física e do índice de placa de rede (NCI) para instâncias P6-B300.\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/images/p6-b300.png)


**Caso de uso 1: salvar endereços IP**

Essa configuração consome pelo menos um endereço IP privado por instância e tem capacidade para até 6400 Gbps de largura de banda EFA e 350 Gbps de largura de banda ENA.
+ Para a interface de rede primária (índice da placa de rede 0, índice do dispositivo 0), use uma interface de rede EFA.
+ Para as outras placas de rede (índices da placa de rede de 1 a 16, índice do dispositivo 1), use interfaces de rede somente EFA.

```
--network-interfaces \
"NetworkCardIndex=0,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=1,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=2,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=3,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=4,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=5,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=6,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=7,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=8,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=9,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=10,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=11,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=12,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=13,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=14,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=15,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=16,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only"
```

**Caso de uso 2: largura de banda máxima para EFA e ENA**

Essa configuração consome pelo menos 17 endereços IP privados por instância e tem capacidade para até 6400 Gbps de largura de banda EFA e até 3870 Gbps de largura de banda ENA.
+ Para a interface de rede primária (índice da placa de rede 0, índice do dispositivo 0), use uma interface de rede EFA.
+ Para as placas de rede restantes, crie uma interface somente EFA (índices da placas de rede 1 a 16 e índice do dispositivo 0) e um índice da placa de rede de interface ENA 1-16 e índice do dispositvo1).

```
--network-interfaces \
"NetworkCardIndex=0,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=1,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=2,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=3,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=4,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=5,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=6,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=7,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=8,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=9,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=10,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=11,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=12,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=13,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=14,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=15,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=16,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=1,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=2,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=3,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=4,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=5,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=6,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=7,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=8,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=9,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=10,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=11,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=12,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=13,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=14,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=15,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=16,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface"
```

# Criar e anexar um Elastic Fabric Adapter a uma instância do Amazon EC2
<a name="create-efa"></a>

É possível criar um EFA e anexá-lo a uma instância do Amazon EC2 como qualquer outra interface de rede elástica no Amazon EC2. No entanto, ao contrário das interfaces de rede elástica, os EFAs não podem ser anexados ou desanexados de uma instância em um estado `running`.

**Considerações**
+  É possível alterar o grupo de segurança associado a um EFA. Para habilitar a funcionalidade de desvio do sistema operacional, o EFA deve ser um membro de um grupo de segurança que permita todo o tráfego de entrada e saída de e para o próprio grupo de segurança. Para obter mais informações, consulte [Etapa 1: Preparar um grupo de segurança habilitado para EFA](efa-start.md#efa-start-security).

  É possível alterar o grupo de segurança associado a um EFA da mesma forma como altera o grupo de segurança associado a uma interface de rede elástica. Para obter mais informações, consulte [Modificar atributos da interface de rede](modify-network-interface-attributes.md).
+ Um endereço Elastic IP (IPv4) e IPv6 foi atribuído a uma interface de rede EFA (EFA com ENA) da mesma forma que um endereço IP foi atribuído a uma interface de rede elástica. Para obter mais informações, consulte [Gerenciar endereços IP](managing-network-interface-ip-addresses.md).

  Não é possível atribuir um endereço IP a uma interface de rede exclusivamente EFA.

**Topics**
+ [Criar um EFA.](#efa-create)
+ [Associar um EFA a uma instância interrompida](#efa-attach)
+ [Associar um EFA ao executar uma instância](#efa-launch)
+ [Adicionar um EFA a um modelo de execução](#efa-launch-template)

## Criar um EFA.
<a name="efa-create"></a>

É possível criar um EFA em uma sub-rede de uma VPC. Você não pode mover o EFA para outra sub-rede depois que ela é criada e só pode anexá-la a instâncias interrompidas na mesma zona de disponibilidade.

------
#### [ Console ]

**Para criar uma interface de rede EFA (EFA com ENA ou somente ENA)**

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. No painel de navegação, escolha **Interfaces de rede** e, em seguida, selecione **Criar interface de rede**.

1. Em **Description (Descrição)**, insira um nome descritivo para o EFA.

1. Para **Subnet (Sub-rede)**, selecione a sub-rede na qual criar o EFA.

1. Em **Tipo de interface**, escolha uma das seguintes opções:
   + **EFA com ENA**: para criar uma interface de rede que ofereça suporte a dispositivos ENA e EFA.
   + **Somente EFA**: para criar uma interface de rede somente com um dispositivo EFA.

1. (Somente para EFA com ENA) Configure o endereço IP e a atribuição de prefixo para a interface de rede. Os tipos de endereços IP e prefixos que você pode atribuir dependem da sub-rede selecionada. Para sub-redes somente IPv4, é possível atribuir somente endereços IP e prefixos IPv4. Para sub-redes somente IPv6, é possível atribuir somente endereços IP e prefixos IPv6. Para sub-redes de pilha dupla, é possível atribuir somente endereços IP e prefixos IPv4 e IPv6. 
**nota**  
Não é possível atribuir endereços IP a uma interface de rede somente EFA.

   1. Em **Endereço IPv4 privado** e/ou **Endereço IPv6**, escolha **Atribuição automática** para que o Amazon EC2 atribua automaticamente um endereço IP da sub-rede selecionada ou escolha **Personalizado** para especificar manualmente o endereço IP a ser atribuído.

   1. Se você atribuir um endereço IPv6, opcionalmente poderá habilitar **Atribuir IP IPv6 primário**. Fazer isso atribui um endereço unicast global (GUA) IPv6 primário à interface de rede. A atribuição de um endereço IPv6 primário permite evitar a interrupção do tráfego para instâncias ou ENIs. Para obter mais informações, consulte [Endereços IPv6](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#vpc-ipv6-addresses).

   1. Em **Delegação de prefixo IPv4** e/ou **Delegação de prefixo IPv6**, escolha **Atribuição automática** para que o Amazon EC2 atribua automaticamente um prefixo de bloco CIDR da sub-rede ou escolha **Personalizado** para especificar manualmente um prefixo de bloco CIDR da sub-rede. Se você especificar um prefixo, a AWS verificará se ele ainda não está atribuído a outro recurso. Para obter mais informações, consulte . [Delegação de prefixo para interfaces de rede do Amazon EC2](ec2-prefix-eni.md)

   1. (Opcional) Configure as opções de **Tempo limite de rastreamento de conexão ociosa**. Para obter mais informações, consulte . [Tempo limite de rastreamento de conexão ociosa](security-group-connection-tracking.md#connection-tracking-timeouts)
      + **Tempo limite para TCP estabelecido**: o tempo limite, em segundos, para conexões TCP ociosas em um estado estabelecido. Mín: 60 segundos. Máx: 432.000 segundos (5 dias) Padrão: 432.000 segundos. Recomendado: menos de 432.000 segundos.
      + **Tempo limite de UDP**: o tempo limite, em segundos, para fluxos UDP ociosos que só observaram tráfego em uma única direção ou uma única transação de solicitação-resposta. Mín: 30 segundos. Máx: 60 segundos. Padrão: 30 segundos.
      + **Tempo limite de fluxo UDP**: o tempo limite, em segundos, para fluxos UDP ociosos classificados como fluxos que tiveram mais de uma transação de solicitação-resposta. Mín: 60 segundos. Máx: 180 segundos (3 minutos). Padrão: 180 segundos.

1. Para **Security groups**, selecione um ou mais security groups.

1. Clique em **Criar interface de rede**.

------
#### [ AWS CLI ]

**Para criar uma EFA**  
Use o comando [create-global-interface](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-network-interface.html). Para `--interface-type`, especifique `efa` para uma interface de rede EFA ou `efa-only` para uma interface de rede somente EFA.

```
aws ec2 create-network-interface \
    --subnet-id subnet-0abcdef1234567890 \
    --interface-type efa \
    --description "my efa"
```

------
#### [ PowerShell ]

**Para criar uma EFA**  
Use o cmdlet [New-EC2NetworkInterface](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2NetworkInterface.html). Para `-InterfaceType`, especifique `efa` para uma interface de rede EFA ou `efa-only` para uma interface de rede somente EFA

```
New-EC2NetworkInterface `
    -SubnetId subnet-0abcdef1234567890 `
    -InterfaceType efa `
    -Description "my efa"
```

------

## Associar um EFA a uma instância interrompida
<a name="efa-attach"></a>

É possível anexar um EFA a qualquer instância compatível que esteja no estado `stopped`. É possível anexar um EFA a uma instância que esteja no estado `running`. Para obter mais informações sobre os tipos de instâncias compatíveis, consulte [Tipos de instâncias compatíveis](efa.md#efa-instance-types).

Anexe um EFA a uma instância da mesma forma como você anexa uma interface de rede a uma instância. Para obter mais informações, consulte [Anexar interface de rede](network-interface-attachments.md#attach_eni).

## Associar um EFA ao executar uma instância
<a name="efa-launch"></a>

------
#### [ AWS CLI ]

**Para anexar um EFA existente ao iniciar uma instância**  
Use o comando [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) com a opção `--network-interfaces`. Para a interface de rede primária, especifique uma interface de rede EFA e `NetworkCardIndex=0`, `DeviceIndex=0`. Para conectar diversas interfaces de rede EFA, consulte [Maximize a largura de banda da rede](efa-acc-inst-types.md).

```
--network-interfaces "NetworkCardIndex=0, \
    DeviceIndex=0, \
    NetworkInterfaceId=eni-1234567890abcdef0, \
    Groups=sg-1234567890abcdef0, \
    SubnetId=subnet-0abcdef1234567890"
```

**Para anexar um novo EFA ao iniciar uma instância**  
Use o comando [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) com a opção `--network-interfaces`. Para a interface de rede primária, use `NetworkCardIndex=0`, `DeviceIndex=0`, e `InterfaceType=efa`. Caso esteja conectando diversas interfaces de rede EFA, consulte. [Maximize a largura de banda da rede](efa-acc-inst-types.md).

```
--network-interfaces "NetworkCardIndex=0, \
    DeviceIndex=0, \
    InterfaceType=efa, \
    Groups=sg-1234567890abcdef0, \
    SubnetId=subnet-0abcdef1234567890"
```

------
#### [ PowerShell ]

**Para anexar um EFA existente ao iniciar uma instância**  
Use o cmdlet [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) com o parâmetro `-NetworkInterfaces`.

```
-NetworkInterface $networkInterface
```

Defina a interface de rede conforme mostrado a seguir.

```
$networkInterface = New-Object Amazon.EC2.Model.InstanceNetworkInterfaceSpecification
$networkInterface.DeviceIndex = 0
$networkInterface.NetworkInterfaceId = "eni-1234567890abcdef0"
$networkInterface.Groups = @("sg-1234567890abcdef0")
$networkInterface.SubnetId = "subnet-0abcdef1234567890"
```

**Para anexar um novo EFA ao iniciar uma instância**  
Use o cmdlet [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) com o parâmetro `-NetworkInterfaces`.

```
-NetworkInterface $networkInterface
```

Defina a interface de rede conforme mostrado a seguir.

```
$networkInterface = New-Object Amazon.EC2.Model.InstanceNetworkInterfaceSpecification
$networkInterface.DeviceIndex = 0
$networkInterface.InterfaceType = "efa"
$networkInterface.Groups = @("sg-1234567890abcdef0")
$networkInterface.SubnetId = "subnet-0abcdef1234567890"
```

------

## Adicionar um EFA a um modelo de execução
<a name="efa-launch-template"></a>

É possível criar um modelo de execução que contenha informações de configuração necessárias para executar instâncias habilitadas para EFA. É possível especificar interfaces de rede EFA e exclusivamente EFA no modelo de execução. Para criar um modelo de execução habilitado para EFA, crie um novo modelo de execução e especifique um tipo de instância compatível, sua AMI habilitada para EFA e um grupo de segurança habilitado para EFA. Para`NetworkInterfaces`, especifique as interfaces de rede EFA a serem conectadas. Para a interface de rede primária, use `NetworkCardIndex=0`, `DeviceIndex=0`, e `InterfaceType=efa`. Caso esteja conectando diversas interfaces de rede EFA, consulte. [Maximize a largura de banda da rede em instâncias do Amazon EC2 com várias placas de rede](efa-acc-inst-types.md)

É possível aproveitar modelos de inicialização para executar instâncias habilitadas para EFA com outros produtos da AWS, como [AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/what-is-batch.html) ou [AWS ParallelCluster](https://docs.aws.amazon.com/parallelcluster/latest/ug/what-is-aws-parallelcluster.html).

Para obter mais informações sobre como criar modelos do execução, consulte [Criar um modelo de execução do Amazon EC2](create-launch-template.md).

# Desanexar e excluir um EFA de uma instância do Amazon EC2
<a name="detach-efa"></a>

É possível desanexar um EFA de uma instância do Amazon EC2 e excluí-lo da mesma forma como qualquer outra interface de rede elástica no Amazon EC2.

## Desanexar um EFA
<a name="efa-detach"></a>

Para desanexar um EFA de uma instância, primeiro é necessário parar a instância. Você não pode desanexar um EFA de uma instância que está em estado de execução.

Você desanexa um EFA de uma instância da mesma maneira como desanexa uma interface de rede elástica de uma instância. Para obter mais informações, consulte [Desanexar uma interface de rede](network-interface-attachments.md#detach_eni).

## Excluir um EFA
<a name="efa-delete"></a>

Para excluir um EFA, é necessário primeiro separá-lo da instância. Você não pode excluir um EFA enquanto está anexado a uma instância.

Você exclui EFAs da mesma maneira como visualiza interfaces de rede elástica. Para obter mais informações, consulte [Excluir uma interface de rede](delete_eni.md).

# Monitorar um Elastic Fabric Adapter no Amazon EC2
<a name="efa-working-monitor"></a>

É possível usar os seguintes recursos para monitorar a performance dos seus Elastic Fabric Adapters.

**Topics**
+ [Métricas do driver do EFA para uma instância do Amazon EC2](#efa-driver-metrics)
+ [Logs de fluxo do Amazon VPC](#efa-flowlog)
+ [Amazon CloudWatch](#efa-cloudwatch)

## Métricas do driver do EFA para uma instância do Amazon EC2
<a name="efa-driver-metrics"></a>

O driver Elastic Fabric Adapter (EFA) publica, em tempo real, várias métricas das instâncias que têm interfaces EFA anexadas. É possível usar essas métricas para solucionar problemas de performance da aplicação e da rede, escolher o tamanho de cluster ideal para uma workload, planejar proativamente as atividades de escalação e comparar aplicações para determinar se elas maximizam a performance da EFA disponível em uma instância.

**Topics**
+ [Métricas de driver do EFA disponíveis](#available-efa-metrics)
+ [Recupere as métricas do driver EFA para sua instância](#view-efa-driver-metrics)

### Métricas de driver do EFA disponíveis
<a name="available-efa-metrics"></a>

O driver EFA publica as seguintes métricas para a instância em tempo real. Elas fornecem o número cumulativo de erros, eventos de conexão e pacotes ou bytes enviados, recebidos, retransmitidos ou descartados pelos dispositivos EFA anexados desde a inicialização da instância ou da última redefinição do driver.


| Métrica | Descrição | Tipos de instâncias compatíveis | 
| --- | --- | --- | 
| tx\$1bytes |  O número de bytes transmitidos. Unidade: bytes  | Todos os tipos de instâncias compatíveis com EFA | 
| rx\$1bytes |  O número de bytes recebidos. Unidade: bytes  | Todos os tipos de instâncias compatíveis com EFA | 
| tx\$1pkts |  O número de pacotes transmitidos. Unidade: contagem  | Todos os tipos de instâncias compatíveis com EFA | 
| rx\$1pkts |  O número de pacotes recebidos. Unidade: contagem  | Todos os tipos de instâncias compatíveis com EFA | 
| rx\$1drops |  O número total de pacotes recebidos e depois descartados. Unidade: contagem  | Todos os tipos de instâncias compatíveis com EFA | 
| send\$1bytes |  O número de bytes enviados usando operações de envio. Unidade: bytes  | Todos os tipos de instâncias compatíveis com EFA | 
| recv\$1bytes |  O número de bytes recebidos pelas operações de envio. Unidade: bytes  | Todos os tipos de instâncias compatíveis com EFA | 
| send\$1wrs |  O número de pacotes enviados usando operações de envio. Unidade: contagem  | Todos os tipos de instâncias compatíveis com EFA | 
| recv\$1wrs |  O número de pacotes recebidos pelas operações de envio. Unidade: contagem  | Todos os tipos de instâncias compatíveis com EFA | 
| rdma\$1write\$1wrs |  O número de operações de gravação de rdma concluídas. Unidade: contagem  | Todos os tipos de instâncias compatíveis com EFA | 
| rdma\$1read\$1wrs |  O número de operações de leitura de rdma concluídas. Unidade: contagem  | Todos os tipos de instâncias compatíveis com EFA | 
| rdma\$1write\$1bytes |  O número de bytes gravados nele por outras instâncias usando operações de gravação de rdma. Unidade: bytes  | Todos os tipos de instâncias compatíveis com EFA | 
| rdma\$1read\$1bytes |  O número de bytes recebidos usando operações de leitura de rdma. Unidade: bytes  | Todos os tipos de instâncias compatíveis com EFA | 
| rdma\$1write\$1wr\$1err |  O número de operações de gravação de rdma que tiveram erros locais ou remotos. Unidade: contagem  | Todos os tipos de instâncias compatíveis com EFA | 
| rdma\$1read\$1wr\$1err |  O número de operações de leitura de rdma que tiveram erros locais ou remotos. Unidade: contagem  | Todos os tipos de instâncias compatíveis com EFA | 
| rdma\$1read\$1resp\$1bytes |  O número de bytes enviados em resposta às operações de leitura de rdma. Unidade: bytes  | Todos os tipos de instâncias compatíveis com EFA | 
| rdma\$1write\$1recv\$1bytes |  O número de bytes recebidos pelas operações de gravação de rdma. Unidade: bytes  | Todos os tipos de instâncias compatíveis com EFA | 
| retrans\$1bytes |  O número de bytes EFA SRD retransmitidos. Unidade: contagem  | Tipos de instância do Nitro v4 e posteriores que são compatíveis com EFA | 
| retrans\$1pkts |  O número de pacotes EFA SRD retransmitidos. Unidade: bytes  | Tipos de instância do Nitro v4 e posteriores que são compatíveis com EFA | 
| retrans\$1timeout\$1events |  O número de vezes que o tráfego de EFA SRD atingiu o tempo limite e resultou em uma alteração no caminho de rede. Unidade: contagem  | Tipos de instância do Nitro v4 e posteriores que são compatíveis com EFA | 
| impaired\$1remote\$1conn\$1events |  O número de vezes que as conexões EFA SRD entraram em um estado comprometido, resultando em um limite de taxa de throughput reduzido. Unidade: contagem  | Tipos de instância do Nitro v4 e posteriores que são compatíveis com EFA | 
| unresponsive\$1remote\$1events |  O número de vezes que uma conexão remota EFA SRD deixou de responder. Unidade: contagem  | Tipos de instância do Nitro v4 e posteriores que são compatíveis com EFA | 

Para obter mais informações sobre os tipos de instâncias que são compatíveis com EFA, consulte [Tipos de instâncias compatíveis](efa.md#efa-instance-types).

### Recupere as métricas do driver EFA para sua instância
<a name="view-efa-driver-metrics"></a>

É possível usar a ferramenta de linha de comando [rdma-tool](https://man7.org/linux/man-pages/man8/rdma.8.html) para recuperar as métricas de todas as interfaces do EFA anexadas a uma instância da seguinte forma:

```
$ rdma -p statistic show
link rdmap0s31/1 
    tx_bytes 0 
    tx_pkts 0 
    rx_bytes 0 
    rx_pkts 0 
    rx_drops 0 
    send_bytes 0 
    send_wrs 0 
    recv_bytes 0 
    recv_wrs 0 
    rdma_read_wrs 0 
    rdma_read_bytes 0 
    rdma_read_wr_err 0 
    rdma_read_resp_bytes 0 
    rdma_write_wrs 0 
    rdma_write_bytes 0 
    rdma_write_wr_err 0
    retrans_bytes 0
    retrans_pkts 0
    retrans_timeout_events 0
    unresponsive_remote_events 0
    impaired_remote_conn_events 0
```

Você também pode recuperar as métricas de cada interface do EFA anexada a uma instância dos arquivos sys usando o comando a seguir.

```
$ more /sys/class/infiniband/device_number/ports/port_number/hw_counters/* | cat
```

Por exemplo

```
$ more /sys/class/infiniband/rdmap0s31/ports/1/hw_counters/* | cat
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/lifespan
::::::::::::::
12
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_read_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_read_resp_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_read_wr_err
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_read_wrs
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_write_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_write_recv_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_write_wr_err
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_write_wrs
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/recv_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/recv_wrs
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rx_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rx_drops
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rx_pkts
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/send_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/send_wrs
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/tx_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/tx_pkts
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/retrans_bytes
::::::::::::::
0
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/retrans_pkts
::::::::::::::
0
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/retrans_timeout_events
::::::::::::::
0
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/unresponsive_remote_events
::::::::::::::
0
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/impaired_remote_conn_events
::::::::::::::
0
```

## Logs de fluxo do Amazon VPC
<a name="efa-flowlog"></a>

É possível criar um log de fluxo da Amazon VPC para capturar informações sobre o tráfego de entrada e saída de um EFA. Os dados de log de fluxo podem ser publicados no Amazon CloudWatch Logs e no Amazon S3. Após criar um log de fluxo, será possível recuperar e visualizar seus dados no destino selecionado. Para obter mais informações, consulte [Logs de fluxo da VPC](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html) no *Guia do usuário da Amazon VPC*.

Você cria um log de fluxo para um EFA da mesma forma como cria um log de fluxo para uma interface de rede elástica. Para mais informações, consulte [Criar um log de fluxo](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-flow-logs.html#create-flow-log) no *Guia do usuário da Amazon VPC*.

Nas entradas do log de fluxo, o tráfego do EFA é identificado por `srcAddress` e `destAddress`, ambos formatados como endereços MAC, conforme mostrado no exemplo a seguir.

```
version accountId  eniId        srcAddress        destAddress       sourcePort destPort protocol packets bytes start      end        action log-status
2       3794735123 eni-10000001 01:23:45:67:89:ab 05:23:45:67:89:ab -          -        -        9       5689  1521232534 1524512343 ACCEPT OK
```

## Amazon CloudWatch
<a name="efa-cloudwatch"></a>

Se você estiver usando o EFA em um cluster do Amazon EKS, poderá monitorar seus EFAs usando o CloudWatch Container Insights. O Amazon CloudWatch Container Insights é compatível com todas as [métricas de driver EFA](#efa-driver-metrics), exceto: `retrans_bytes`, `retrans_pkts`, `retrans_timeout_events`, `unresponsive_remote_events` e `impaired_remote_conn_events`.

Para obter mais informações, consulte [Métricas do Amazon EKS e Kubernetes Container Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-metrics-enhanced-EKS.html#Container-Insights-metrics-EFA) no *Guia do usuário do Amazon CloudWatch*.

# Verificar o instalador EFA usando uma soma de verificação
<a name="efa-verify"></a>

Como opção, é possível verificar o tarball EFA (arquivo `.tar.gz`) usando uma soma de verificação MD5 ou SHA256. Recomendamos que você faça isso para verificar a identidade do fornecedor do software e para verificar se a aplicação não foi alterada ou corrompida desde que foi publicada.

**Como verificar o tarball**  
Use o utilitário **md5sum** para a soma de verificação MD5 ou o utilitário **sha256sum** para a soma de verificação SHA256 e especifique o nome do arquivo tarball. Execute o comando a partir do diretório no qual salvou o arquivo tarball.
+ MD5

  ```
  $  md5sum tarball_filename.tar.gz
  ```
+ SHA256

  ```
  $  sha256sum tarball_filename.tar.gz
  ```

Os comandos devem retornar um valor de soma de verificação no formato a seguir.

```
checksum_value tarball_filename.tar.gz
```

Compare o valor de soma de verificação retornado pelo comando com o valor de soma de verificação fornecido na tabela abaixo. Se as somas de verificação corresponderem, então é seguro executar o script de instalação. Se as somas de verificação não corresponderem, não execute o script de instalação e entre em contato com o Suporte.

Por exemplo, o comando a seguir verifica o tarball EFA 1.9.4 usando a soma de verificação SHA256.

```
$  sha256sum aws-efa-installer-1.9.4.tar.gz
```

Resultado do exemplo:

```
1009b5182693490d908ef0ed2c1dd4f813cc310a5d2062ce9619c4c12b5a7f14 aws-efa-installer-1.9.4.tar.gz
```

A tabela a seguir lista as somas de verificação para versões recentes do EFA.


| Versão | Somas de verificação | 
| --- | --- | 
| EFA 1.47.0 |  **MD5: **`c81d4caf24dabc04a6e4818590620f5f` **SHA256: **`2df4201e046833c7dc8160907bee7f52b76ff80ed147376a2d0ed8a0dd66b2db`  | 
| EFA 1.46.0 |  **MD5: **a88bbd9b71624d7ca401b54bc2fc0c19`` **SHA256: **`8302bd7849afb95c903a875d7dcb6f85b3d7629e9a8b67d020031cfc6f4d0ee1`  | 
| EFA 1.45.1 |  **MD5:** 91c3c87e16bbcaca1513252c38b771bb `` **SHA256: **`9aeb20c645135b6039cc08986d8f14e63280f7839e882a74df5e83627ffeaa17`  | 
| EFA 1.45.0 |  **MD5:800aeddfa9d9c5f139a7b8f7c4fec627** `` **SHA256: **`25ba26a0877fe3317390dc126aad2f23e27fc461cf0b940004f032cb342fa539`  | 
| EFA 1.44.0 |  **MD5: **d024f6bebe080db42745103b84ca7c43`` **SHA256: **`f129a5b44a49d593d247e55a59eb9bcb57121566e1c2e42b832a4e794fa83d8a`  | 
| EFA 1.43.3 |  **MD5: **`4dbc6eeecc516760253c10cbedb6319d` **SHA256: **`6c470ebce254c7165347b5048895ac2996c88567271642297f4c597738300652`  | 
| EFA 1.43.2 |  **MD5: **`7287b25a07c9747c0d4001e8fc5f59b2` **SHA256: **`de15c5bdbc83b952afbde876110830c604ad0796680e5157c05f7c1979a41069`  | 
| EFA 1.43.1 |  **MD5: **`7cfafc8debaea51dd4966fa0b2bba673` **SHA256: **54211eda0c193138ee8ed09b5fb41c41fc76fe0a77935fa4ec8d989466342740``  | 
| EFA 1.43.0 |  **MD5: **`f2b3dd7dc8670b541f7c23fd58e5e503` **SHA256: **`786df3458c499237be33bb8e50ffd4da7c18c20e254380ffc80fb90833d8cc73`  | 
| EFA 1.42.0 |  **MD5: **`94b2b1db09da1dde08ec049db1f24370` **SHA256: **`4114fe612905ee05083ae5cb391a00a012510f3abfecc642d86c9a5ae4be9008`  | 
| EFA 1.41.0 |  **MD5: **`086181c3ee3f8da512fc6e1c795e8936` **SHA256: **`3506354cdfbe31ff552fe75f5d0d9bb7efd29cf79bd99457347d29c751c38f9f`  | 
| EFA 1.40.0 |  **MD5: **`f3ec6f73fbeaccba082327507581157c` **SHA256: **`30491b0fe7c3470d4439594538855c981b05fa69862d74f8c05eb9b97912368a`  | 
| EFA 1.39.0 |  **MD5: **`c223d5954a85a7fbcd248c942b866e43` **SHA256: **`2cbc028c03064633bb990782b47c36156637769e2f48704417a9c700a7a32101`  | 
| EFA 1.38.1 |  **MD5: **`f112569e828ab65187777f794bab542c` **SHA256: **`83923374afd388b1cfcf4b3a21a2b1ba7cf46a01a587f7b519b8386cb95e4f81`  | 
| EFA 1.38.0 |  **MD5: **`43a2a446b33a2506f40853d55059f1ea` **SHA256: **`4f436954f35ad53754b4d005fd8d0be63de3b4184de41a695b504bdce0fecb22`  | 
| EFA 1.37.0 |  **MD5: **`6328070192bae920eca45797ad4c1db1` **SHA256: **`2584fc3c8bb99f29b3285e275747ff09d67c18e162c2a652e36c976b72154bfb`  | 
| EFA 1.36.0 |  **MD5: **`1bec83180fbffb23452ab6469ca21dfa` **SHA256: **`de183f333cfb58aeb7908a67bf9106985ba3ccb7f8638b851d2a0d8dbfacaec4`  | 
| EFA 1.35.0 |  **MD5: **`252f03c978dca5f8e8d9f34e488b256e` **SHA256: **`432b6ad4368ba0cd8b902729d14a908a97be7a3dcc5239422ea994a47f35a5e1`  | 
| EFA 1.34.0 |  **MD5: **`5cd4b28d27a31677c16139b54c9acb45` **SHA256: **`bd68839e741b0afd3ec2e37d50603803cfa7a279c120f0a736cc57c2ff2d7fdc`  | 
| EFA 1.33.0 |  **MD5: **`e2f61fccbcaa11e2ccfddd3660522276` **SHA256: **`0372877b87c6a7337bb7791d255e1053b907d030489fb2c3732ba70069185fce`  | 
| EFA 1.32.0 |  **MD5: **`db8d65cc028d8d08b5a9f2d88881c1b1` **SHA256: **`5f7233760be57f6fee6de8c09acbfbf59238de848e06048dc54d156ef578fc66`  | 
| EFA 1.31.0 |  **MD5: **`856352f12bef2ccbadcd75e35aa52aaf` **SHA256: **`943325bd37902a4300ac9e5715163537d56ecb4e7b87b37827c3e547aa1897bf`  | 
| EFA 1.30.0 |  **MD5: **`31f48e1a47fe93ede8ebd273fb747358` **SHA256: **`876ab9403e07a0c3c91a1a34685a52eced890ae052df94857f6081c5f6c78a0a`  | 
| EFA 1.29.1 |  **MD5: **`e1872ca815d752c1d7c2b5c175e52a16` **SHA256: **`178b263b8c25845b63dc93b25bcdff5870df5204ec509af26f43e8d283488744`  | 
| EFA 1.29.0 |  **MD5: **`39d06a002154d94cd982ed348133f385` **SHA256: **`836655f87015547e733e7d9f7c760e4e24697f8bbc261bb5f3560abd4206bc36`  | 
| EFA 1.28.0 |  **MD5: **`9dc13b7446665822605e66febe074035` **SHA256: **`2e625d2d6d3e073b5178e8e861891273d896b66d03cb1a32244fd56789f1c435`  | 
| EFA 1.27.0 |  **MD5: **`98bfb515ea3e8d93f554020f3837fa15` **SHA256: **`1d49a97b0bf8d964d91652a79ac851f2550e33a5bf9d0cf86ec9357ff6579aa3`  | 
| EFA 1.26.1 |  **MD5: **`884e74671fdef4725501f7cd2d451d0c` **SHA256: **`c616994c924f54ebfabfab32b7fe8ac56947fae00a0ff453d975e298d174fc96`  | 
| EFA 1.26.0 |  **MD5: **`f8839f12ff2e3b9ba09ae8a82b30e663` **SHA256: **`bc1abc1f76e97d204d3755d2a9ca307fc423e51c63141f798c2f15be3715aa11`  | 
| EFA 1.25.1 |  **MD5: **`6d876b894547847a45bb8854d4431f18` **SHA256: **`d2abc553d22b89a4ce92882052c1fa6de450d3a801fe005da718b7d4b9602b06`  | 
| EFA 1.25.0 |  **MD5: **`1993836ca749596051da04694ea0d00c` **SHA256: **`98b7b26ce031a2d6a93de2297cc71b03af647194866369ca53b60d82d45ad342`  | 
| EFA 1.24.1 |  **MD5: **`211b249f39d53086f3cb0c07665f4e6f` **SHA256: **`120cfeec233af0955623ac7133b674143329f9561a9a8193e473060f596aec62`  | 
| EFA 1.24.0 |  **MD5: **`7afe0187951e2dd2c9cc4b572e62f924` **SHA256: **`878623f819a0d9099d76ecd41cf4f569d4c3aac0c9bb7ba9536347c50b6bf88e`  | 
| EFA 1.23.1 |  **MD5: **`22491e114b6ee7160a8290145dca0c28` **SHA256: **`5ca848d8e0ff4d1571cd443c36f8d27c8cdf2a0c97e9068ebf000c303fc40797`  | 
| EFA 1.23.0 |  **MD5: **`38a6d7c1861f5038dba4e441ca7683ca` **SHA256: **`555d497a60f22e3857fdeb3dfc53aa86d05926023c68c916d15d2dc3df6525bd`  | 
| EFA 1.22.1 |  **MD5: **`600c0ad7cdbc06e8e846cb763f92901b` **SHA256: **`f90f3d5f59c031b9a964466b5401e86fd0429272408f6c207c3f9048254e9665`  | 
| EFA 1.22.0 |  **MD5: **`8f100c93dc8ab519c2aeb5dab89e98f8` **SHA256: **`f329e7d54a86a03ea51da6ea9a5b68fb354fbae4a57a02f9592e21fce431dc3a`  | 
| EFA 1.21.0 |  **MD5: **`959ccc3a4347461909ec02ed3ba7c372` **SHA256: **`c64e6ca34ccfc3ebe8e82d08899ae8442b3ef552541cf5429c43d11a04333050`  | 
| EFA 1.20.0 |  **MD5: **`7ebfbb8e85f1b94709df4ab3db47913b` **SHA256: **`aeefd2681ffd5c4c631d1502867db5b831621d6eb85b61fe3ec80df983d1dcf0`  | 
| EFA 1.19.0 |  **MD5: **`2fd45324953347ec5518da7e3fefa0ec` **SHA256: **`99b77821b9e72c8dea015cc92c96193e8db307deee05b91a58094cc331f16709`  | 
| EFA 1.18.0 |  **MD5: **`fc2571a72f5d3c7b7b576ce2de38d91e` **SHA256: **`acb18a0808aedb9a5e485f1469225b9ac97f21db9af78e4cd6939700debe1cb6`  | 
| EFA 1.17.3 |  **MD5: **`0517df4a190356ab559235147174cafd` **SHA256: **`5130998b0d2883bbae189b21ab215ecbc1b01ae0231659a9b4a17b0a33ebc6ca`  | 
| EFA 1.17.2 |  **MD5: **`a329dedab53c4832df218a24449f4c9a` **SHA256: **`bca1fdde8b32b00346e175e597ffab32a09a08ee9ab136875fb38283cc4cd099`  | 
| EFA 1.17.1 |  **MD5: **`733ae2cfc9d14b52017eaf0a2ab6b0ff` **SHA256: **`f29322640a88ae9279805993cb836276ea240623820848463ca686c8ce02136f`  | 
| EFA 1.17.0 |  **MD5: **`d430fc841563c11c3805c5f82a4746b1` **SHA256: **`75ab0cee4fb6bd38889dce313183f5d3a83bd233e0a6ef6205d8352821ea901d`  | 
| EFA 1.16.0 |  **MD5: **`399548d3b0d2e812d74dd67937b696b4` **SHA256: **`cecec36495a1bc6fdc82f97761a541e4fb6c9a3cbf3cfcb145acf25ea5dbd45b`  | 
| EFA 1.15.2 |  **MD5: **`955fea580d5170b05823d51acde7ca21` **SHA256: **`84df4fbc1b3741b6c073176287789a601a589313accc8e6653434e8d4c20bd49`  | 
| EFA 1.15.1 |  **MD5: **`c4610267039f72bbe4e35d7bf53519bc` **SHA256: **`be871781a1b9a15fca342a9d169219260069942a8bda7a8ad06d4baeb5e2efd7`  | 
| EFA 1.15.0 |  **MD5: **`9861694e1cc00d884fadac07d22898be` **SHA256: **`b329862dd5729d2d098d0507fb486bf859d7c70ce18b61c302982234a3a5c88f`  | 
| EFA 1.14.1 |  **MD5: **`50ba56397d359e57872fde1f74d4168a` **SHA256: **`c7b1b48e86fe4b3eaa4299d3600930919c4fe6d88cc6e2c7e4a408a3f16452c7`  | 
| EFA 1.14.0 |  **MD5: **`40805e7fd842c36ececb9fd7f921b1ae` **SHA256: **`662d62c12de85116df33780d40e0533ef7dad92709f4f613907475a7a1b60a97`  | 
| EFA 1.13.0 |  **MD5: **`c91d16556f4fd53becadbb345828221e` **SHA256: **`ad6705eb23a3fce44af3afc0f7643091595653a723ad0374084f4f2b715192e1`  | 
| EFA 1.12.3 |  **MD5: **`818aee81f097918cfaebd724eddea678` **SHA256: **`2c225321824788b8ca3fbc118207b944cdb096b847e1e0d1d853ef2f0d727172`  | 
| EFA 1.12.2 |  **MD5: **`956bb1fc5ae0d6f0f87d2e481d49fccf` **SHA256: **`083a868a2c212a5a4fcf3e4d732b685ce39cceb3ca7e5d50d0b74e7788d06259`  | 
| EFA 1.12.1 |  **MD5: **`f5bfe52779df435188b0a2874d0633ea` **SHA256: **`5665795c2b4f09d5f3f767506d4d4c429695b36d4a17e5758b27f033aee58900`  | 
| EFA 1.12.0 |  **MD5: **`d6c6b49fafb39b770297e1cc44fe68a6` **SHA256: **`28256c57e9ecc0b0778b41c1f777a9982b4e8eae782343dfe1246079933dca59`  | 
| EFA 1.11.2 |  **MD5: **`2376cf18d1353a4551e35c33d269c404` **SHA256: **`a25786f98a3628f7f54f7f74ee2b39bc6734ea9374720507d37d3e8bf8ee1371`  | 
| EFA 1.11.1 |  **MD5: **`026b0d9a0a48780cc7406bd51997b1c0` **SHA256: **`6cb04baf5ffc58ddf319e956b5461289199c8dd805fe216f8f9ab8d102f6d02a`  | 
| EFA 1.11.0 |  **MD5: **`7d9058e010ad65bf2e14259214a36949` **SHA256: **`7891f6d45ae33e822189511c4ea1d14c9d54d000f6696f97be54e915ce2c9dfa`  | 
| EFA 1.10.1 |  **MD5: **`78521d3d668be22976f46c6fecc7b730` **SHA256: **`61564582de7320b21de319f532c3a677d26cc46785378eb3b95c636506b9bcb4`  | 
| EFA 1.10.0 |  **MD5: **`46f73f5a7afe41b4bb918c81888fefa9` **SHA256: **`136612f96f2a085a7d98296da0afb6fa807b38142e2fc0c548fa986c41186282`  | 
| EFA 1.9.5 |  **MD5: **`95edb8a209c18ba8d250409846eb6ef4` **SHA256: **`a4343308d7ea4dc943ccc21bcebed913e8868e59bfb2ac93599c61a7c87d7d25`  | 
| EFA 1.9.4 |  **MD5: **`f26dd5c350422c1a985e35947fa5aa28` **SHA256: **`1009b5182693490d908ef0ed2c1dd4f813cc310a5d2062ce9619c4c12b5a7f14`  | 
| EFA 1.9.3 |  **MD5: **`95755765a097802d3e6d5018d1a5d3d6` **SHA256: **`46ce732d6f3fcc9edf6a6e9f9df0ad136054328e24675567f7029edab90c68f1`  | 
| EFA 1.8.4 |  **MD5: **`85d594c41e831afc6c9305263140457e` **SHA256: **`0d974655a09b213d7859e658965e56dc4f23a0eee2dc44bb41b6d039cc5bab45`  | 

# Observações sobre o Elastic Fabric Adapter
<a name="efa-changelog"></a>

A tabela a seguir descreve o histórico de versões e o registro de alterações do software Elastic Fabric Adapter.


| Versão | Alterações | Data de lançamento | 
| --- | --- | --- | 
| 1.47.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | 29 de janeiro de 2026 | 
| 1.46.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | 12 de dezembro de 2025 | 
| 1.45.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | 26 de novembro de 2025 | 
| 1.45.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | 17 de novembro de 2025 | 
| 1.44.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | 29 de outubro de 2025 | 
| 1.43.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | 1.º de outubro de 2025 | 
| 1.43.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | 15 de agosto de 2025 | 
| 1.43.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | 31 de julho de 2025 | 
| 1.43.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | 25 de julho de 2025 | 
| 1.42.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | 6 de junho de 2025 | 
| 1.41.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | 16 de maio de 2025 | 
| 1.40.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2 de maio de 2025 | 
| 1.39.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | 16 de abril de 2025 | 
| 1.38.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | 3 de março de 2025 | 
| 1.38.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | 8 de janeiro de 2025 | 
| 1.37.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | 18 de novembro de 2024 | 
| 1.36.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | 7 de novembro de 2024 | 
| 1.35.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | 14 de outubro de 2024 | 
| 1.34.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | 6 de agosto de 2024 | 
| 1.33.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | 20 de junho de 2024 | 
| 1.32.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | 18 de abril de 2024 | 
| 1.31.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | 7 de março de 2024 | 
| 1.30.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Dezembro de 2023 | 
| 1.29.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Dezembro de 2023 | 
| 1.29.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Novembro de 2023 | 
| 1.28.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Outubro de 2023 | 
| 1.27.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Setembro de 2023 | 
| 1.26.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Setembro de 2023 | 
| 1.26.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Setembro de 2023 | 
| 1.25.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Setembro de 2023 | 
| 1.25.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Julho de 2023 | 
| 1.24.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Julho de 2023 | 
| 1.24.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Junho de 2023 | 
| 1.23.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Junho de 2023 | 
| 1.23.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Maio de 2023 | 
| 1.22.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Março de 2023 | 
| 1.22.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Fevereiro de 2023 | 
| 1.21.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Dezembro de 2022 | 
| 1.20.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Novembro de 2022 | 
| 1.19.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Outubro de 2022 | 
| 1.18.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Agosto de 2022 | 
| 1.17.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Agosto de 2022 | 
| 1.17.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Julho de 2022 | 
| 1.17.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Julho de 2022 | 
| 1.17.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Julho de 2022 | 
| 1.16.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Junho de 2022 | 
| 1.15.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Maio de 2022 | 
| 1.15.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Março de 2022 | 
| 1.15.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Fevereiro de 2022 | 
| 1.14.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Outubro de 2021 | 
| 1.14.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Outubro de 2021 | 
| 1.13.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Agosto de 2021 | 
| 1.12.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Julho de 2021 | 
| 1.12.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Junho de 2021 | 
| 1.12.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Maio de 2021 | 
| 1.12.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Maio de 2021 | 
| 1.11.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Fevereiro de 2021 | 
| 1.11.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Dezembro de 2020 | 
| 1.11.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Dezembro de 2020 | 
| 1.10.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Novembro de 2020 | 
| 1.10.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Outubro de 2020 | 
| 1.9.5 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Setembro de 2020 | 
| 1.9.4 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Julho de 2020 | 
| 1.9.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Junho de 2020 | 
| 1.8.4 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Abril de 2020 | 
| 1.8.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Fevereiro de 2020 | 
| 1.8.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Janeiro de 2020 | 
| 1.8.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Janeiro de 2020 | 
| 1.8.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Dezembro de 2019 | 
| 1.7.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Dezembro de 2019 | 
| 1.7.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Novembro de 2019 | 
| 1.6.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Outubro de 2019 | 
| 1.6.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Outubro de 2019 | 
| 1.5.4 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Setembro de 2019 | 
| 1.5.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Setembro de 2019 | 
| 1.5.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Agosto de 2019 | 
| 1.5.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Agosto de 2019 | 
| 1.4.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Julho de 2019 | 
| 1.4.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/efa-changelog.html)  | Julho de 2019 | 