Conceitos básicos do EFA e NCCL para workloads de ML no Amazon EC2
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 compatibilidade com várias workloads de machine learning. Para obter mais informações, consulte o site da NCCL
Requisitos
-
Os tipos de instância compatíveis incluem os tipos de instância das séries P e G compatíveis com o EFA. Para obter mais informações, consulte Instâncias com computação acelerada do Amazon EC2.
-
AMIs básicas compatíveis: Amazon Linux 2023, Ubuntu 26.04, Ubuntu 24.04, Ubuntu 22.04, Debian 12 e RHEL 10.
-
O EFA é compatível somente com a NCCL 2.4.2 e posteriores.
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 no Guia do desenvolvedor do AMIs de deep learning da AWS.
Etapa 1: Preparar um grupo de segurança habilitado para EFA
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.
-
As regras de entrada e saída autorreferentes (que permitem todo o tráfego de e para o próprio grupo de segurança) são obrigatórias para o funcionamento do EFA. Sem essas regras, o tráfego de EFA entre instâncias será bloqueado e ocorrerá falha em toda comunicação da NCCL.
Para outros cenários, consulte Regras de grupo de segurança para diferentes casos de uso.
Para criar um grupo de segurança habilitado para EFA
Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/
. -
No painel de navegação, escolha Security Groups (Grupos de segurança) e, em seguida, Create Security Group (Criar grupo de segurança).
-
Na janela Security group (Grupo de segurança), faça o seguinte:
-
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. -
(Opcional) Em Description (Descrição), insira uma breve descrição do grupo de segurança.
-
Em VPC, selecione a VPC na qual você pretende executar suas instâncias habilitadas para EFA.
-
Escolha Criar grupo de segurança.
-
-
Selecione o grupo de segurança que você criou e, na guia Details (Detalhes), copie o Security group (Grupo de segurança).
-
Com o grupo de segurança ainda selecionado, escolha Actions (Ações), Edit inbound rules (Editar regras de entrada), e faça o seguinte:
-
Escolha Adicionar regra.
-
Para Tipo, escolha Todo o tráfego.
-
Para Source type (Tipo de origem), escolha Custom (Personalizado) e cole o ID do grupo de segurança que você copiou no campo.
-
Escolha Adicionar regra.
-
Para Tipo, escolha SSH.
-
Para Source type (Tipo de origem), escolha Anywhere-IPv4 (IPv4 em qualquer lugar).
-
Selecione Salvar regras.
-
-
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:
-
Escolha Adicionar regra.
-
Para Tipo, escolha Todo o tráfego.
-
Para Destination (Destino), escolha Custom (Personalizado) e cole o ID do grupo de segurança que você copiou no campo.
-
Selecione Salvar regras.
-
Etapa 2: Iniciar uma instância temporária
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
Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/
. -
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.
-
(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 -
Na seção Application and OS Images (Imagens de aplicação e sistema operacional), selecione uma AMI para um dos sistemas operacionais compatíveis.
-
Na seção Instance type (Tipo de instância), selecione um tipo de instância compatível.
-
Na seção Key pair (Par de chaves), selecione o par de chaves a ser usado na instância.
-
Na seção Network settings (Configurações da rede), escolha Edit (Editar) e faça o seguinte:
-
Em Subnet (Sub-rede), escolha a sub-rede na qual deseja iniciar a instância.
Importante
Você deve selecionar uma sub-rede. Se você não selecionar uma sub-rede, não será possível habilitar a instância para o EFA.
-
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.
-
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 estiver usando um tipo de instância multiplaca, para cada interface de rede adicional exigida, 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 EFA somente.
-
-
Na seção Storage (Armazenamento), configure os volumes conforme necessário.
nota
É necessário provisionar um armazenamento adicional, entre 10 e 20 GiB, para o NVIDIA CUDA Toolkit. Se você não provisionar armazenamento suficiente, receberá uma mensagem de erro
insufficient disk spaceao tentar instalar os drivers NVIDIA e o toolkit CUDA. -
No painel Summary (Resumo) painel, escolha Launch instance (Iniciar instância).
Etapa 3: Instalar drivers de GPU NVIDIA, o NVIDIA CUDA Toolkit e a cuDNN
Etapa 4: instalar o GDRCopy
Instale o GDRCopy para melhorar a performance do Libfabric. Para obter mais informações sobre a GDRCopy, consulte o repositório do GDRCopy
Etapa 5: instalar o software EFA
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
-
Conecte à instância que você iniciou. Para obter mais informações, consulte Conectar-se à instância do Linux usando SSH.
-
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.50.0.tar.gzTambém é possível obter a versão mais recente substituindo o número da versão por
latestno comando acima. (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.
-
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.keyO comando deve retornar um valor de chave. Anote o valor da chave, pois ele será necessário na próxima etapa.
-
Verifique a impressão digital da chave GPG. Execute o seguinte comando e especifique o valor de chave da etapa anterior.
$gpg --fingerprintkey_valueO 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. -
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.50.0.tar.gz.sig && gpg --verify ./aws-efa-installer-1.50.0.tar.gz.sigVeja 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 3CCCSe o resultado incluir
Good signaturee 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.
-
-
Extraia os arquivos do arquivo compactado
.tar.gze navegue para o diretório extraído.$tar -xf aws-efa-installer-1.50.0.tar.gz && cd aws-efa-installer (Opcional) Verifique as assinaturas de pacotes individuais durante a instalação.
A partir do EFA 1.48.0, o instalador inclui pacotes individuais RPM e DEB assinados com GPG. Para verificar a autenticidade e a integridade de cada pacote individual durante a instalação, use o sinalizador
--check-signatures. Quando você habilita esse sinalizador, o instalador verifica primeiro todas as assinaturas de pacotes e prossegue com a instalação somente se cada pacote for aprovado na verificação. Se algum pacote não for aprovado na verificação, o instalador sairá imediatamente sem instalar nada.-
Baixe a chave pública.
$wget https://efa-installer.amazonaws.com/aws-efa-installer.key -
Exporte o caminho principal. Em seguida, na próxima etapa, anexe
--check-signaturesao comando de instalação e usesudo -Eem vez desudopara preservar a variável de ambiente.$export EFA_INSTALLER_KEY=$(pwd)/aws-efa-installer.key
Em sistemas baseados em RPM (Amazon Linux 2023, RHEL, Rocky Linux e SUSE), o instalador verifica cada RPM usando
rpm --checksig. Em sistemas baseados em DEB (Ubuntu, Debian), o instalador verifica cada DEB usando a verificação de assinatura GPG. Se houver falha na verificação de qualquer pacote, a instalação será abortada imediatamente.nota
O sinalizador
--check-signaturesé opcional. Sem isso, o instalador não realiza a verificação de assinaturas individuais.-
-
Execute o script de instalação do software EFA.
nota
Se você concluiu a etapa opcional anterior para configurar a verificação de assinaturas de pacotes, acrescente
--check-signaturesao comando de instalação e usesudo -Eem vez desudo. Por exemplo:sudo -E ./efa_installer.sh -y --mpi=openmpi5 --check-signatures.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 4.1, instale somente a Open MPI 5. O comando a seguir instala somente o Open MPI 5. Se quiser instalar a Open MPI 4.1 e a Open MPI 5, remova
--mpi=openmpi5.$sudo ./efa_installer.sh -y --mpi=openmpi5O 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. -
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.
-
Confirme se o software EFA foi instalado com sucesso.
$fi_info -p efa -t FI_EP_RDMO comando deve retornar informações sobre as interfaces EFA Libfabric.
Etapa 6: instalar NCCL
Instale a NCCL. Para obter mais informações sobre a NCCL, consulte o Repositório da NCCL
Como instalar a NCCL
-
Navegue até o diretório
/opt.$cd /opt -
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.30.4-1 && cd nccl -
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-13
Etapa 7: Instalar os testes da NCCL
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
Como instalar os testes da NCCL
-
Navegue até o diretório inicial.
$cd $HOME -
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 -
Adicione o diretório do Libfabric à variável
LD_LIBRARY_PATH.-
Amazon Linux 2023
$export LD_LIBRARY_PATH=/opt/amazon/efa/lib64:$LD_LIBRARY_PATH -
Ubuntu e Debian
$export LD_LIBRARY_PATH=/opt/amazon/efa/lib:$LD_LIBRARY_PATH -
RHEL 10
$export LD_LIBRARY_PATH=/opt/amazon/efa/lib64:$LD_LIBRARY_PATH
-
-
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/openmpiNCCL_HOME=/opt/nccl/buildCUDA_HOME=/usr/local/cuda-13
Etapa 8: Testar a configuração do EFA e da NCCL
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
-
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-hostsque inclui uma referência à própria instância. -
Execute o teste da NCCL. O comando a seguir pressupõe que você tenha 8 GPUs por instância. Ajuste os valores de
-ne-Ncom base no tipo de instância.$/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 -
É 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
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 como instalar o software em sua instância Linux, consulte Gerenciar atualizações do SO no Guia do usuário do Amazon Linux 2023.
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
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
Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/
. -
No painel de navegação, escolha Instances (Instâncias).
-
Selecione a instância, escolha Actions (Ações), Image (Imagem), Create image (Criar imagem).
-
Em Create image (Criar imagem), faça o seguinte:
-
Em Image name (Nome da imagem), insira um nome descritivo para a AMI.
-
(Opcional) Em Image description (Descrição da imagem), informe a descrição do propósito da AMI.
-
Escolha Create Image (Criar imagem).
-
-
No painel de navegação, selecione AMIs.
-
Encontre na lista a AMI que você criou. Aguarde até que o status mude de
pendingparaavailableantes de continuar para a próxima etapa.
Etapa 11: Encerrar a instância temporária
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
Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/
. -
No painel de navegação, escolha Instances (Instâncias).
-
Selecione a instância temporária, escolha Actions (Ações), selecione Instance state (Estado da instância), Terminate instance (Encerrar instance).
-
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
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.
Etapa 13: Habilitar SSH sem senha
nota
O usuário do SSH padrão varia de acordo com o sistema operacional: ubuntu para Ubuntu, admin para Debian, ec2-user para Amazon Linux e RHEL.
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
-
Selecione uma instância no cluster como o nó líder e conecte-se a ela.
-
Desabilite
strictHostKeyCheckinge habiliteForwardAgentno nó líder. Abra o~/.ssh/configusando o editor de texto de sua preferência e adicione o seguinte.Host * ForwardAgent yes Host * StrictHostKeyChecking no -
Gere um par de chaves RSA.
$ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsaO par de chaves é criado no diretório do
$HOME/.ssh/. -
Altere as permissões da chave privada no nó líder.
$chmod 600 ~/.ssh/id_rsa chmod 600 ~/.ssh/config -
Abra
~/.ssh/id_rsa.pubusando seu editor de texto preferido e copie a chave. -
Para cada nó de membro no cluster, faça o seguinte:
-
Conecte-se à instância.
-
Abra
~/.ssh/authorized_keysusando o editor de texto de sua preferência e adicione a chave pública que você copiou anteriormente.
-
-
Para testar se o SSH sem senha está funcionando como esperado, conecte-se ao seu nó líder e execute o comando a seguir.
$sshmember_node_private_ipÉ necessário se conectar ao nó membro sem receber uma solicitação para inserir uma chave ou senha.