Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Formazione del Machine learning utilizzando Elastic Fabric Adapter
In questa sezione viene descritto come integrare Elastic Fabric Adapter (EFA) con i Pods implementati nel cluster Amazon EKS. Elastic Fabric Adapter (EFA) è un'interfaccia di rete per le istanze Amazon EC2 che consente di eseguire applicazioni che richiedono livelli elevati di comunicazioni internodale su larga scala in AWS. La sua interfaccia hardware di bypass del sistema operativo personalizzata migliora le prestazioni delle comunicazioni tra istanze, che è fondamentale per dimensionare queste applicazioni. Con EFA, le applicazioni High Performance Computing (HPC) che utilizzano le applicazioni MPI (Message Passing Interface) e Machine Learning (ML) e che utilizzano NVIDIA Collective Communications Library (NCCL) possono dimensionare fino a migliaia di CPU o GPU. Di conseguenza, si ottengono le prestazioni applicative dei cluster HPC locali con l'elasticità e la flessibilità on-demand del cloud. AWS L'integrazione di EFA con le applicazioni in esecuzione su cluster Amazon EKS può ridurre il tempo necessario per completare carichi di lavoro di formazione distribuiti su larga scala senza dover aggiungere ulteriori istanze al cluster. Per ulteriori informazioni su EFA, consulta Elastic Fabric Adapter
Il plugin EFA descritto in questo argomento supporta pienamente istanze Amazon EC2 P4d
, che rappresentano l'attuale stato dell'arte nel machine learning distribuito nel cloud. Ciascun istanza p4d.24xlarge
ha otto GPU NVIDIA A100 e GPUDirectRDMA a 400 Gbps su EFA. GPUDirectRDMA consente di avere una comunicazione diretta da GPU a GPU tra i nodi con bypass della CPU, aumentando la larghezza di banda di comunicazione collettiva e riducendo la latenza. L'integrazione di Amazon EKS e EFA con istanze P4d
offre un metodo ottimale per sfruttare l'istanza di elaborazione Amazon EC2 dalle prestazioni più elevate per l'addestramento del machine learning distribuito.
Prerequisiti
-
Un cluster Amazon EKS esistente. Se non disponi di un cluster esistente, consulta una delle guide Guida introduttiva ad Amazon EKS per crearne uno. Il cluster deve essere implementato in un VPC con almeno una sottorete privata con indirizzi IP disponibili sufficienti in cui implementare i nodi. La sottorete privata deve disporre di un accesso Internet in uscita fornito da un dispositivo esterno, ad esempio un gateway NAT.
Se prevedi di utilizzare
eksctl
per creare il gruppo di nodi,eksctl
può anche creare un cluster per tuo conto. -
Versione
2.12.3
o successiva o versione1.27.160
o successiva di AWS Command Line Interface (AWS CLI) installato e configurato sul dispositivo o. AWS CloudShell Per verificare la versione attuale, usa
. I programmi di gestione dei pacchetti, comeaws --version | cut -d / -f2 | cut -d ' ' -f1
yum
,apt-get
o Homebrew per macOS, spesso sono aggiornati a versioni precedenti della AWS CLI. Per installare la versione più recente, consulta le sezioni Installazione, aggiornamento e disinstallazione della AWS CLI e Configurazione rapida con aws configure nella Guida per l'utente dell'AWS Command Line Interface . La AWS CLI versione installata in AWS CloudShell potrebbe anche contenere diverse versioni precedenti alla versione più recente. Per aggiornarla, consulta Installazione nella tua home directory nella Guida AWS CLI per l'AWS CloudShell utente. -
Lo strumento a riga di comando
kubectl
è installato sul dispositivo o AWS CloudShell. La versione può essere uguale oppure immediatamente precedente o successiva alla versione Kubernetes del cluster. Ad esempio, se la versione del cluster è1.28
, puoi usarekubectl
versione1.27
,1.28
o1.29
. Per installare o aggiornarekubectl
, consulta Installazione o aggiornamento di kubectl: -
Prima di avviare i nodi worker che supportano più di un Elastic Fabric Adapter, come ad esempio
p4d.24xlarge
, è necessario disporre della versione1.7.10
di Amazon VPC CNI plugin for Kubernetes. Per ulteriori informazioni sull'aggiornamento della versione del Amazon VPC CNI plugin for Kubernetes, consulta Utilizzo del componente aggiuntivo Amazon VPC CNI plugin for Kubernetes di Amazon EKS.
Creazione di un gruppo di nodi
La procedura seguente consente di creare un gruppo di nodi con un gruppo di nodi supportato da p4d.24xlarge
con interfacce EFA e GPUDirect RDMA, e di eseguire un test di esempio NVIDIA Collective Communications Library (NCCL) per prestazioni NCCL multi-nodo utilizzando più EFA. L'esempio può essere utilizzato come modello per l'addestramento del deep learning distribuito su Amazon EKS utilizzando più EFA.
-
Determina quali tipi di istanze Amazon EC2 che supportano EFA sono disponibili nei Regione AWS nodi in cui desideri implementare. Sostituiscilo
con Regione AWS quello in cui desideri distribuire il tuo gruppo di nodi.region-code
aws ec2 describe-instance-types --region
region-code
--filters Name=network-info.efa-supported,Values=true \ --query "InstanceTypes[*].[InstanceType]" --output textQuando distribuisci i nodi, il tipo di istanza che desideri distribuire deve essere disponibile nel cluster in Regione AWS cui si trova il cluster.
-
Determina in quali zone di disponibilità è disponibile il tipo di istanza che desideri implementare. In questo tutorial, viene utilizzato il tipo di
p4d.24xlarge
istanza Regione AWS che deve essere restituito nell'output per quanto specificato nel passaggio precedente. Quando distribuisci i nodi in un cluster di produzione, sostituiscili
con qualsiasi tipo di istanza restituito nel passaggio precedente.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 textDi seguito viene riportato un output di esempio:
us-west-2
a
us-west-2
c
us-west-2
b
Prendi nota delle zone di disponibilità restituite per l'uso nelle fasi successive. Quando implementi i nodi in un cluster, il tuo VPC deve disporre di sottoreti con indirizzi IP disponibili in una delle zone di disponibilità restituite nell'output.
-
Crea un gruppo di nodi utilizzando uno dei due
eksctl
o il comando AWS CLI e AWS CloudFormation. -
Implementa il plugin per dispositivi EFA Kubernetes.
Il plugin per dispositivi EFA Kubernetes rileva e pubblicizza le interfacce EFA come risorse allocabili a Kubernetes. Un'applicazione può consumare il tipo di risorsa estesa
vpc.amazonaws.com/efa
in una specifica di richiesta Pod proprio come CPU e memoria. Per ulteriori informazioni, consulta Manage Huge Pages(Utilizzo di risorse estese) nella documentazione di Kubernetes. Una volta effettuata la richiesta, il plugin assegna e monta in automatico un'interfaccia EFA sul Pod. L'utilizzo del plugin per dispositivi semplifica la configurazione EFA e non richiede l'esecuzione di un Pod in modalità privilegiata. kubectl apply -f https://raw.githubusercontent.com/aws-samples/aws-efa-eks/main/manifest/efa-k8s-device-plugin.yml
(Facoltativo) Implementazione di un'applicazione compatibile con EFA di esempio
Implementare l'operatore MPI Kubeflow
Per i test NCCL è possibile applicare l'operatore Kubeflow MPI. L'operatore MPI semplifica l'esecuzione della formazione distribuita in stile Allreduce su Kubernetes. Per ulteriori informazioni, consulta Operatore MPI
kubectl apply -f https://raw.githubusercontent.com/kubeflow/mpi-operator/master/deploy/v2beta1/mpi-operator.yaml
Esecuzione del test delle prestazioni NCCL multi-nodo per verificare GPUDirectrRDMA/EFA
Per verificare le prestazioni NCCL con GPUDirectRDMA su EFA, esegui il test delle prestazioni NCCL standard. Per ulteriori informazioni, consulta il repository Test NCCL11.2
e per l'ultima versione di EFA.
In alternativa, puoi scaricare un' AWS Dockerimmagine disponibile da un repository Amazon ECR.
Importante
Un importante aspetto da considerare per l'adozione di EFA con Kubernetes è la configurazione e la gestione di Huge Pages come risorsa nel cluster. Per ulteriori informazioni, consulta Manage Huge Pages
Completa i seguenti passaggi per eseguire un test delle prestazioni NCCL a due nodi. Nel processo di test NCCL di esempio, ogni worker richiede otto GPU, 5210Mi di HugePages-2Mi, quattro EFA e 8000Mi di memoria, il che significa che ogni worker consuma tutte le risorse di un'istanza p4d.24xlarge
.
-
Crea il processo di test NCCL.
kubectl apply -f https://raw.githubusercontent.com/aws-samples/aws-efa-eks/main/examples/simple/nccl-efa-tests.yaml
Di seguito viene riportato un output di esempio:
nccl-tests-efa mpijob.kubeflow.org/ creato
-
Visualizza i Pods in esecuzione.
kubectl get pods
Di seguito viene riportato un output di esempio:
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 2m49sL'operatore MPI crea un Pod di avvio e 2 Pods worker (uno su ciascun nodo).
-
Visualizza il log per il Pod
efa-launcher
. Sostituisci
con il valore dell'output.wzr8j
kubectl logs -f nccl-tests-efa-launcher-
nbql9
Per altri esempi, consulta il repository Esempi di EFA