Ajudar a melhorar esta página
Quer contribuir para este guia do usuário? Role até o final desta página e selecione Editar esta página no GitHub. Suas contribuições ajudarão a tornar nosso guia do usuário melhor para todos.
Treinamento de machine learning usando o Elastic Fabric Adapter
Este tópico descreve como integrar o Elastic Fabric Adapter (EFA) a Podsimplantados no cluster do Amazon EKS. O Elastic Fabric Adapter (EFA) é uma interface de rede para instâncias do Amazon EC2 que permite que você execute aplicações que exigem altos níveis de comunicações entre nós em escala na AWS. Sua interface de hardware de bypass do sistema operacional personalizada melhora a performance das comunicações entre instâncias, o que é essencial para escalar essas aplicações. Com a EFA, as aplicações de Computação de Alta Performance (HPC) que usam a Interface de Passagem de Mensagens (MPI) e as aplicações de Machine Learning (ML) que usam a NVIDIA Collective Communications Library (NCCL) podem ser escaladas para milhares de CPUs ou GPUs. Como resultado, você obtém a performance da aplicação de clusters de HPC on-premises, com a elasticidade e a flexibilidade sob demanda da nuvem AWS. A integração da EFA com aplicações executadas em clusters do Amazon EKS pode reduzir o tempo para concluir workloads de treinamento distribuídas em grande escala sem precisar adicionar instâncias adicionais ao cluster. Para obter mais informações sobre o EFA, consulte Elastic Fabric Adapter
O plugin EFA, descrito neste tópico, é totalmente compatível com o Amazon EC2 P4d
, que representa a tecnologia de ponta em machine learning distribuído na nuvem. Cada instância p4d.24xlarge
tem oito GPUs NVIDIA A100 e GPUDirectRDMA de 400 Gbps sobre EFA. O GPUDirectRDMA permite que você tenha comunicação direta de GPU a GPU entre os nós com desvio de CPU, aumentando a largura de banda da comunicação coletiva e reduzindo a latência. A integração do Amazon EKS e EFA com as instâncias P4d
fornece um método perfeito para aproveitar a alta performance da instância de computação do Amazon EC2 para treinamento distribuído de machine learning.
Pré-requisitos
-
Um cluster do existente do Amazon EKS. Se você não tiver um cluster, use um dos nossos manuais de Conceitos básicos do Amazon EKS para criar um. O cluster deve ser implantado em uma VPC que tenha pelo menos uma sub-rede privada com endereços IP disponíveis suficientes para implantar nós. A sub-rede privada deve ter acesso de saída à Internet fornecido por um dispositivo externo, como um gateway NAT.
Se você planeja usar o
eksctl
para criar o grupo de nós, oeksctl
também pode criar um cluster para você. -
A versão
2.12.3
ou superior ou a versão1.27.160
ou superior da AWS Command Line Interface (AWS CLI) instalada e configurada em seu dispositivo ou no AWS CloudShell. Para verificar sua versão atual, use
. Gerenciadores de pacotes, comoaws --version | cut -d / -f2 | cut -d ' ' -f1
yum
,apt-get
ou Homebrew para macOS, geralmente estão várias versões atrás da versão mais recente da AWS CLI. Para instalar a versão mais recente, consulte Instalar, atualizar e desinstalar a AWS CLI e Configuração rápida com o aws configure no Guia do usuário da AWS Command Line Interface. A versão da AWS CLI instalada no AWS CloudShell também pode estar várias versões atrás da versão mais recente. Para atualizá-la, consulte Instalar a AWS CLI no diretório inicial no Guia do usuário do AWS CloudShell. -
A ferramenta da linha de comando
kubectl
está instalada no seu dispositivo ou no AWS CloudShell. A versão pode ser idêntica ou até uma versão secundária anterior ou posterior à versão Kubernetes do seu cluster. Por exemplo, se a versão do cluster for a1.29
, você poderá usar okubectl
versão1.28
,1.29
ou1.30
com ele. Para instalar ou atualizar okubectl
, consulte Instalar ou atualizar o kubectl. -
Você deve ter o Amazon VPC CNI plugin for Kubernetes versão
1.7.10
ou posterior instalado antes de iniciar os nós de processamento que oferecem suporte a vários Elastic Fabric Adapters, como op4d.24xlarge
. Para obter mais informações sobre a atualização da sua a versão do Amazon VPC CNI plugin for Kubernetes, consulte Trabalhando com o complemento Amazon VPC CNI plugin for Kubernetes do Amazon EKS.
Crie grupos de nós.
O procedimento a seguir ajuda você a criar um grupo de nós que conta com o suporte do p4d.24xlarge
e interfaces EFA e GPUDirect RDMA, além de executar um exemplo de teste NVIDIA Collective Communications Library (NCCL) para a performance do NCCL de vários nós usando EFAs. O exemplo pode ser usado em um modelo para treinamento de aprendizado profundo distribuído no Amazon EKS usando EFAs.
-
Determine quais tipos de instância do Amazon EC2 compatíveis com EFA estão disponíveis na Região da AWS em que você deseja implantar os nós. Substitua
pela Região da AWS em que deseja implantar os grupo de nós.region-code
aws ec2 describe-instance-types --region
region-code
--filters Name=network-info.efa-supported,Values=true \ --query "InstanceTypes[*].[InstanceType]" --output textQuando você implanta nós, o tipo de instância que você deseja implantar deve estar disponível na Região da AWS em que está o cluster.
-
Determine em quais zonas de disponibilidade o tipo de instância que você deseja implantar está disponível. Neste tutorial, o tipo de instância
p4d.24xlarge
é usado e deve ser retornado na saída para o Região da AWS que você especificou na etapa anterior. Ao implantar nós em um cluster de produção, substitua
por qualquer tipo de instância retornado na etapa anterior.p4d.24xlarge
aws ec2 describe-instance-type-offerings --region
region-code
--location-type availability-zone --filters Name=instance-type,Values=p4d.24xlarge
\ --query 'InstanceTypeOfferings[*].Location' --output textVeja um exemplo de saída abaixo.
us-west-2a
us-west-2c
us-west-2b
Observe as zonas de disponibilidade retornadas para uso em etapas posteriores. Quando você implanta nós em um cluster, a VPC deve ter sub-redes com endereços IP disponíveis em uma das zonas de disponibilidade retornadas na saída.
-
Crie um grupo de nós usando
eksctl
ou o AWS CLI e AWS CloudFormation. -
Implante o plugin de dispositivo EFA Kubernetes.
O plugin do dispositivo EFA Kubernetes detecta e anuncia interfaces EFA como recursos alocáveis para o Kubernetes. Uma aplicação pode consumir o tipo de recurso estendido
vpc.amazonaws.com/efa
na especificação de uma solicitação de Pod como CPU e memória. Para obter mais informações, consulte Consuming extended resources(Consumir recursos estendidos) na documentação do Kubernetes. Uma vez solicitado, o plug-in atribui e monta automaticamente uma interface EFA no Pod. Usar o plugin de dispositivo simplifica a configuração do EFA e não requer que um Pod seja executado no modo privilegiado. helm repo add eks https://aws.github.io/eks-chart helm install aws-efa-k8s-device-plugin --namespace kube-system eks/aws-efa-k8s-device-plugin
(Opcional) Implante uma aplicação de exemplo compatível com o EFA
Implantar o operador Kubeflow MPI
Para os testes NCCL, você pode aplicar o Kubeflow MPI Operator. O MPI Operator facilita a execução do treinamento distribuído no estilo AllReduce no Kubernetes. Para obter mais informações, consulte MPI Operator
kubectl apply -f https://raw.githubusercontent.com/kubeflow/mpi-operator/master/deploy/v2beta1/mpi-operator.yaml
Execute o teste de performance NCCL em vários nós para verificar o GPUDirectRDMA/EFA
Para verificar a performance do NCCL com o GPUDirectRDMA no EFA, execute o teste de performance do NCCL padrão. Para obter mais informações, consulte o repositório NCCL-Tests11.2
e para a versão mais recente do EFA.
Como alternativa, você pode baixar uma imagem do AWS Docker, disponível em um repositório do Amazon ECR
Importante
Uma consideração importante, necessária para adotar o EFA com o Kubernetes, é configurar e gerenciar páginas enormes como um recurso no cluster. Para obter mais informações, consulte Manage Huge Pages
Conclua as etapas a seguir para executar um teste de performance do NCCL de dois nós. No trabalho de teste NCCL de exemplo, cada operador solicita oito GPUs, 5210Mi do hugepages-2Mi, quatro EFAs e 8000Mi de memória, o que significa efetivamente que cada operador consome todos os recursos de uma instância p4d.24xlarge
.
-
Crie o trabalho de testes NCCL.
kubectl apply -f https://raw.githubusercontent.com/aws-samples/aws-efa-eks/main/examples/simple/nccl-efa-tests.yaml
Veja um exemplo de saída abaixo.
mpijob.kubeflow.org/nccl-tests-efa foi criado
-
Visualize o Pods em execução.
kubectl get pods
Veja um exemplo de saída abaixo.
NAME READY STATUS RESTARTS AGE nccl-tests-efa-launcher-
nbql9
0/1 Init:0/1 0 2m49s nccl-tests-efa-worker-0 1/1 Running 0 2m49s nccl-tests-efa-worker-1 1/1 Running 0 2m49sO MPI Operator cria um Pod iniciador e 2 Pods operadores (um em cada nó).
-
Visualize o log do Pod
efa-launcher
. Substitua
pelo valor do resultado.wzr8j
kubectl logs -f nccl-tests-efa-launcher-
nbql9
Para obter mais exemplos, consulte o repositório EFA samples