Aiutaci a migliorare questa pagina
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à.
Per contribuire a questa guida per l'utente, scegli il GitHub link Modifica questa pagina nel riquadro destro di ogni pagina.
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à.
Esegui corsi di apprendimento automatico su Amazon EKS con Elastic Fabric Adapter
Questo argomento descrive come integrare Elastic Fabric Adapter (EFA) con i pod distribuiti nel cluster Amazon EKS. Elastic Fabric Adapter (EFA) è un'interfaccia di rete per EC2 istanze Amazon che consente di eseguire applicazioni che richiedono alti livelli di comunicazioni tra nodi su larga scala. 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 Message Passing Interface (MPI) e Machine Learning (ML) che utilizzano NVIDIA Collective Communications Library (NCCL) possono scalare fino a migliaia di o. CPUs GPUs 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
Tipi di istanze con EFA
L' AWS EFA Kubernetes Device Plugin supporta tutti i tipi di EC2 istanze Amazon con EFA. Per visualizzare un elenco di tutti i tipi di istanze con EFA, consulta Tipi di istanze supportati nella Amazon EC2 User Guide. Tuttavia, per eseguire rapidamente le applicazioni ML, consigliamo che un'istanza disponga di chip di accelerazione hardware come GPUs NVidia AWS ,
Nel confrontare i tipi di istanza e scegliere tra di essi, considera il numero di schede di rete EFA disponibili per quel tipo di istanza, nonché il numero di schede di accelerazione, la quantità di CPU e la quantità di memoria. È possibile assegnare fino a un EFA per scheda di rete. Un EFA è considerato un'interfaccia di rete. Per vedere quante EFA sono disponibili per ogni tipo di istanza che dispone di EFA, consulta l'elenco delle schede di rete nella Amazon EC2 User Guide.
Interfacce solo EFA ed EFA
Un Elastic Fabric Adapter (EFA) è un'interfaccia di rete che combina le funzionalità di un Elastic Network Adapter (ENA) e un'interfaccia OS-Bypass, basata sul protocollo AWS Scalable Reliable Datagram (SRD). Le funzionalità EFA consentono alle applicazioni di comunicare direttamente con l'hardware per un trasporto a bassa latenza. È possibile scegliere di accedere solo alle funzionalità EFA utilizzando interfacce solo EFA, limitando la comunicazione alle interfacce all'interno della stessa zona di disponibilità.
Per creare nodi che possono avere interfacce solo EFA, devi utilizzare un Launch Template personalizzato e impostarlo su. EC2 InterfaceType
efa-only
Nel tuo Launch Template personalizzato, non puoi impostare la scheda 0
di rete su un'interfaccia solo EFA, poiché si tratta della scheda di rete e dell'interfaccia di rete principali dell'istanza. EC2 È necessario disporre della versione VPC CNI 1.18.5
o successiva per le interfacce solo EFA. Se utilizzi Amazon Linux 2, la versione ami deve essere v20240928
o successiva per le interfacce solo EFA.
La procedura seguente guida alla creazione di un cluster EKS con nodi eksctl
dotati di interfacce NVidia GPUs ed EFA. Non è possibile utilizzarlo eksctl
per creare nodi e gruppi di nodi che utilizzano interfacce solo EFA.
Prerequisiti
-
Un cluster Amazon EKS esistente. Se non disponi di un cluster esistente, creane uno utilizzando.. Nozioni di base su Amazon EKS 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 dell'interfaccia a riga di AWS comando (AWS CLI) installata e configurata sul dispositivo o. AWS CloudShell Per verificare la versione attuale, usaaws --version | cut -d / -f2 | cut -d ' ' -f1
. I gestori di pacchetti comeyum
Homebrew per macOS sono spesso diverse versioni dell'ultima versione della CLI AWS .apt-get
Per installare la versione più recente, consulta Installazione e configurazione rapida con aws configure nella Guida per l'utente dell'interfaccia a riga di AWS comando. La versione AWS CLI installata in AWS CloudShell potrebbe anche contenere diverse versioni precedenti alla versione più recente. Per aggiornarlo, consulta Installazione della AWS CLI nella tua home directory nella Guida per l' AWS CloudShell utente. -
Lo strumento a riga di comando
kubectl
è installato sul dispositivo o AWS CloudShell. La versione può essere la stessa o fino a una versione secondaria precedente o successiva alla versione Kubernetes del cluster. Ad esempio, se la versione del cluster è1.29
, puoi usarekubectl
versione1.28
,1.29
o1.30
. Per installare o aggiornarekubectl
, consulta Configurazione kubectl e eksctl: -
Devi avere installato il plug-in Amazon VPC CNI per la versione Kubernetes
1.7.10
o successiva prima di avviare nodi di lavoro che supportano più Elastic Fabric Adapter, come o.p4d
p5
Per ulteriori informazioni sull'aggiornamento del plug-in Amazon VPC CNI per la versione Kubernetes, consulta. Assegna IPs ai pod con Amazon VPC CNI
Importante
Un'importante considerazione necessaria per l'adozione di EFA con Kubernetes è la configurazione e la gestione di Huge Pages come risorsa nel cluster. Per ulteriori informazioni, consultare Gestione di Huge Pages
Creazione di un gruppo di nodi
La procedura seguente ti aiuta a creare un gruppo di nodi con un gruppo di nodi p4d.24xlarge
supportato con interfacce EFA e GPUDirect RDMA ed eseguire un esempio di test NVIDIA Collective Communications Library (NCCL) per le prestazioni NCCL multinodo. EFAs L'esempio può essere utilizzato come modello per la formazione distribuita di deep learning su Amazon EKS utilizzando EFAs.
-
Determina quali tipi di EC2 istanze Amazon che supportano EFA sono disponibili nella AWS regione in cui desideri implementare i nodi. Sostituiscilo
region-code
con la AWS regione in cui desideri distribuire il tuo gruppo di nodi.aws ec2 describe-instance-types --region region-code \ --filters Name=network-info.efa-supported,Values=true \ --query "InstanceTypes[*].[InstanceType]" --output text
Quando distribuisci i nodi, il tipo di istanza che desideri distribuire deve essere disponibile nella AWS regione in 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
p5.48xlarge
istanza che deve essere restituito nell'output per la AWS regione specificata nel passaggio precedente. Quando distribuisci i nodi in un cluster di produzione, sostituiscilip5.48xlarge
con qualsiasi tipo di istanza restituito nel passaggio precedente.aws ec2 describe-instance-type-offerings --region region-code \ --location-type availability-zone --filters Name=instance-type,Values=p4d.24xlarge,p5.48xlarge \ --query 'InstanceTypeOfferings[*].Location' --output text
Di seguito viene riportato un output di esempio:
us-west-2a us-west-2c us-west-2b
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
eksctl
. È necessaria la versione0.210.0
o una versione successiva dello strumento da riga dieksctl
comando installato sul dispositivo o AWS CloudShell. Per l'installazione o l'aggiornamento dieksctl
, consulta la sezione Installationnella documentazione di eksctl
.-
Copia i contenuti seguenti in un file denominato
efa-cluster.yaml
. Sostituisci iexample values
con i valori in tuo possesso. Puoi sostituirep5.48xlarge
con un'istanza diversa, ma in questo caso assicurati che i valori peravailabilityZones
corrispondano a zone di disponibilità restituite per il tipo di istanza nel passaggio 1.apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-efa-cluster region: region-code version: "1.XX" iam: withOIDC: true availabilityZones: ["us-west-2a", "us-west-2c"] managedNodeGroups: - name: my-efa-ng instanceType: p5.48xlarge minSize: 1 desiredCapacity: 2 maxSize: 3 availabilityZones: ["us-west-2a"] volumeSize: 300 privateNetworking: true efaEnabled: true
-
Crea un gruppo di nodi gestito in un cluster esistente.
eksctl create nodegroup -f efa-cluster.yaml
Se non disponi di un cluster esistente, puoi eseguire il comando seguente per creare un cluster e il gruppo di nodi.
eksctl create cluster -f efa-cluster.yaml
Nota
Poiché il tipo di istanza utilizzato in questo esempio installa
eksctl
automaticamente il plug-in del dispositivo NVIDIA Kubernetes su ogni istanza per te quando usi Amazon Linux 2. GPUs Questo non è necessario per Bottlerocket, poiché il plug-in del dispositivo NVIDIA è integrato nella variante EKS NVIDIA di Bottlerocket. QuandoefaEnabled
è impostato sutrue
nella configurazione nodegroup,eksctl
distribuirà automaticamente anche il plug-in del dispositivo EFA sui nodi.
-
Utilizzo di Bottlerocket con EFA
La versione 1.28.0 e successive dell'AMI Bottlerocket include il supporto ufficiale per EFA. Per utilizzare Bottlerocket per nodi abilitati a EFA, specificalo nella configurazione. amiFamily: Bottlerocket
Se è necessario utilizzare un ID AMI personalizzato, è necessario utilizzare standard nodeGroups
anzichémanagedNodeGroups
.
Ecco un esempio di configurazione:
apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-efa-bottlerocket-cluster region: region-code version: "1.XX" iam: withOIDC: true availabilityZones: ["us-west-2a", "us-west-2c"] managedNodeGroups: - name: my-efa-bottlerocket-ng instanceType: p5.48xlarge minSize: 1 desiredCapacity: 2 maxSize: 3 availabilityZones: ["us-west-2a"] volumeSize: 300 privateNetworking: true efaEnabled: true amiFamily: Bottlerocket bottlerocket: enableAdminContainer: true settings: kernel: sysctl: "vm.nr_hugepages": "3000" # Configures 3000 * 2Mi = 6000Mi hugepages
L'impostazione vm.nr_hugepages
sysctl riportata sopra configura il numero di pagine enormi di 2 Mi. In questo esempio, 3000 significa 3000 * 2 Mi = 6000 Mi di pagine enormi.
Verifica l'installazione del plug-in del dispositivo EFA
Quando crei un gruppo di nodi conefaEnabled: true
, distribuisce eksctl
automaticamente il plug-in per dispositivi EFA Kubernetes per te. Puoi verificare che il plug-in del dispositivo sia installato e funzioni correttamente:
-
Controlla lo DaemonSet stato:
kubectl get daemonsets -n kube-system
Output di esempio:
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE aws-efa-k8s-device-plugin-daemonset 2 2 2 2 2 <none> 6m16s ...
Qui, il plug-in del dispositivo EFA DaemonSet è in esecuzione su due nodi. Entrambi sono PRONTI e DISPONIBILI.
-
Quindi, verifica i pod creati da: DaemonSet
kubectl get pods -n kube-system -l name=aws-efa-k8s-device-plugin
Output di esempio:
NAME READY STATUS RESTARTS AGE aws-efa-k8s-device-plugin-daemonset-d68bs 1/1 Running 0 6m16s aws-efa-k8s-device-plugin-daemonset-w4l8t 1/1 Running 0 6m16s
I pod dei plug-in del dispositivo EFA sono in esecuzione, a conferma che il plug-in è stato distribuito e operativo correttamente.
-
Verifica la registrazione delle risorse:
Puoi confermare che la
vpc.amazonaws.com/efa
risorsa è registrata con il kubelet descrivendo i nodi:kubectl describe nodes
Se la risorsa EFA è registrata correttamente, la vedrai elencata nelle risorse di capacità e allocabilità del nodo. Per esempio:
Capacity: ... vpc.amazonaws.com/efa: 4 Allocatable: ... vpc.amazonaws.com/efa: 4
Questo output conferma che il nodo riconosce la risorsa EFA, rendendola disponibile per i pod che la richiedono.
(Facoltativo) Verifica le prestazioni dell'EFA
Ti consigliamo di testare la configurazione EFA. Puoi utilizzare i test NCCL presenti nel repositoryaws-samples/awsome-distributed-training
GitHub I test NCCL
-
Implementa l'operatore Kubeflow MPI:
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 MPI Operator on.
GitHub -
Esegui il test delle prestazioni NCCL multinodo per verificare RDMA/EFA: GPUDirect
Per verificare le prestazioni NCCL con GPUDirect RDMA su EFA, esegui il test delle prestazioni NCCL standard. Per ulteriori informazioni, consulta il repository ufficiale di NCCL-Tests su.
GitHub Completa i seguenti passaggi per eseguire un test delle prestazioni NCCL a due nodi. Nell'esempio del processo di test NCCL, ogni lavoratore richiede otto, 5210 Mi di GPUs, quattro EFAs e 8000 Mi di memoria
hugepages-2Mi
, il che significa effettivamente che ogni lavoratore consuma tutte le risorse di un'istanza.p5.48xlarge
-
Crea il manifesto: MPIJob
Copia quanto segue in un file denominato
nccl-tests.yaml
:apiVersion: kubeflow.org/v2beta1 kind: MPIJob metadata: name: nccl-tests spec: runPolicy: cleanPodPolicy: Running backoffLimit: 20 slotsPerWorker: 8 mpiReplicaSpecs: Launcher: replicas: 1 template: spec: restartPolicy: OnFailure containers: - image: public.ecr.aws/hpc-cloud/nccl-tests:latest imagePullPolicy: IfNotPresent name: test-nccl-launcher env: - name: PATH value: $PATH:/opt/amazon/efa/bin:/usr/bin - name: LD_LIBRARY_PATH value: /opt/amazon/openmpi/lib:/opt/nccl/build/lib:/opt/amazon/efa/lib:/opt/aws-ofi-nccl/install/lib:/usr/local/nvidia/lib:$LD_LIBRARY_PATH - name: NCCL_DEBUG value: INFO - name: NCCL_BUFFSIZE value: '8388608' - name: NCCL_P2P_NET_CHUNKSIZE value: '524288' - name: NCCL_TUNER_PLUGIN value: /opt/aws-ofi-nccl/install/lib/libnccl-ofi-tuner.so command: - /opt/amazon/openmpi/bin/mpirun - --allow-run-as-root - --tag-output - -np - "16" - -N - "8" - --bind-to - none - -x - PATH - -x - LD_LIBRARY_PATH - -x - NCCL_DEBUG=INFO - -x - NCCL_BUFFSIZE - -x - NCCL_P2P_NET_CHUNKSIZE - -x - NCCL_TUNER_PLUGIN - --mca - pml - ^cm,ucx - --mca - btl - tcp,self - --mca - btl_tcp_if_exclude - lo,docker0,veth_def_agent - /opt/nccl-tests/build/all_reduce_perf - -b - "8" - -e - "16G" - -f - "2" - -g - "1" - -c - "1" - -n - "100" Worker: replicas: 2 template: spec: nodeSelector: node.kubernetes.io/instance-type: "p5.48xlarge" containers: - image: public.ecr.aws/hpc-cloud/nccl-tests:latest imagePullPolicy: IfNotPresent name: nccl-tests-worker volumeMounts: - name: shmem mountPath: /dev/shm resources: limits: nvidia.com/gpu: 8 hugepages-2Mi: 5120Mi vpc.amazonaws.com/efa: 32 memory: 32000Mi requests: nvidia.com/gpu: 8 hugepages-2Mi: 5120Mi vpc.amazonaws.com/efa: 32 memory: 32000Mi volumes: - name: shmem hostPath: path: /dev/shm
-
Applica i test NCCL: MPIJob
Invia il file
MPIJob
applicando il manifesto. Questo creerà due EC2 istanzep5.48xlarge
Amazon.kubectl apply -f nccl-tests.yaml
Di seguito viene riportato un output di esempio:
mpijob.kubeflow.org/nccl-tests created
-
Verifica che il job abbia iniziato i pod:
Visualizza i tuoi Pod in esecuzione.
kubectl get pods
Di seguito viene riportato un output di esempio:
NAME READY STATUS RESTARTS AGE nccl-tests-launcher-nbql9 0/1 Init:0/1 0 2m49s nccl-tests-worker-0 1/1 Running 0 2m49s nccl-tests-worker-1 1/1 Running 0 2m49s
L'operatore MPI crea un launcher Pod e 2 worker Pods (uno per nodo).
-
Verifica che il processo funzioni correttamente con i log:
Visualizza il registro del
nccl-tests-launcher
Pod. Sostituiscinbql9
con il valore dell'output.kubectl logs -f nccl-tests-launcher-nbql9
-
Se il test è stato completato con successo, puoi distribuire le tue applicazioni che utilizzano la Nvidia Collective Communication Library.