Contribuisci 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à.
Gestisci i dispositivi GPU NVIDIA su Amazon EKS
Le GPU NVIDIA sono ampiamente utilizzate per la formazione sull'apprendimento automatico, l'inferenza e i carichi di lavoro di elaborazione ad alte prestazioni. Amazon EKS supporta due meccanismi per la gestione dei dispositivi GPU NVIDIA nei cluster EKS: il driver NVIDIA DRA per GPU e il plug-in per dispositivi NVIDIA Kubernetes.
Si consiglia di utilizzare il driver NVIDIA DRA per nuove implementazioni su cluster che eseguono Kubernetes versione 1.34 o successiva con gruppi di nodi gestiti da EKS o gruppi di nodi autogestiti. Il driver NVIDIA DRA consente l'allocazione flessibile della GPU e la condivisione della GPU tra contenitori.
Il driver NVIDIA DRA non è supportato con Karpenter o EKS Auto Mode. Usa il plug-in per dispositivi NVIDIA con Karpenter ed EKS Auto Mode. Il plug-in per dispositivi NVIDIA rimane supportato anche per i gruppi di nodi gestiti da EKS e i nodi autogestiti.
Driver NVIDIA DRA e plug-in per dispositivi NVIDIA
| Funzionalità | Driver NVIDIA DRA | Plugin per dispositivi NVIDIA |
|---|---|---|
|
Versione minima di Kubernetes |
1.34 |
Tutte le versioni di EKS-supported Kubernetes |
|
EKS Compute |
Gruppi di nodi gestiti, nodi autogestiti |
EKS Auto Mode, Karpenter, gruppi di nodi gestiti, nodi autogestiti |
|
EKS-optimized AMI |
AL2023 (NVIDIA) |
AL2023 (NVIDIA), porta bottiglia |
|
Pubblicità sul dispositivo |
Attributi avanzati tramite |
Numero intero di risorse estese |
|
Condivisione GPU |
Più contenitori nello stesso Pod possono condividere una GPU tramite riferimenti condivisi |
Non supportato. Ogni GPU è allocata esclusivamente a un contenitore. |
|
ComputeDomains |
Gestisce Multi-Node NVLink (MNNVL) tramite risorse per comunicazioni GPU sicure a più nodi |
Non supportata |
|
Attribute-based selezione |
Filtra le GPU per modello, memoria o altri attributi utilizzando le espressioni CEL |
Non supportata |
|
Topology-aware Allocazione EFA |
DRA-native conoscenza della topologia |
Riconoscimento automatico della topologia (solo AMI AL2023EKS-optimized ) |
Installa il driver NVIDIA DRA
Il driver NVIDIA DRA per GPU gestisce due tipi di risorse: GPU e. ComputeDomains Esegue due plugin DRA kubelet: e. gpu-kubelet-plugin compute-domain-kubelet-plugin Ciascuno può essere abilitato o disabilitato separatamente durante l'installazione. Questa guida si concentra sull'allocazione delle GPU. Per l'utilizzo ComputeDomains, vedere. Utilizzo P6e-GB200 UltraServers con Amazon EKS
Prerequisiti
-
Un cluster Amazon EKS che esegue Kubernetes versione 1.34 o successiva con gruppi di nodi gestiti da EKS o gruppi di nodi autogestiti.
-
Nodi con tipi di istanze GPU NVIDIA (ad esempio istanze or).
PG -
Nodi con componenti a livello di host installati per GPU NVIDIA. Quando si utilizzano le AMI NVIDIA EKS-optimized AL2023 o Bottlerocket, il driver NVIDIA a livello di host, il driver in modalità utente CUDA e il toolkit container sono preinstallati.
-
Helm è installato nell’ambiente a riga di comando, consulta le istruzioni di configurazione di Helm per ulteriori informazioni.
-
kubectlconfigurato per comunicare con il cluster, consulta per ulteriori informazioni. Installazione o aggiornamento di kubectl
Procedura
Importante
Quando si utilizza il driver NVIDIA DRA per la gestione dei dispositivi GPU, non può essere distribuito insieme al plug-in del dispositivo NVIDIA sullo stesso nodo. Vedi upstream Kubernetes per gli aggiornamenti. KEP-5004
Importante
L'utilizzo del driver NVIDIA DRA con Bottlerocket non è attualmente supportato.
-
Aggiungi l'archivio cartografico Helm del driver NVIDIA DRA.
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia -
Aggiorna il tuo repository Helm locale.
helm repo update -
Scarica l'ultima versione del driver NVIDIA DRA.
helm search repo nvidia/nvidia-dra -
Installa il driver NVIDIA DRA.
helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu \ --create-namespace \ --namespace nvidia-dra-driver-gpu \ --set resources.computeDomains.enabled=false \ --set 'gpuResourcesEnabledOverride=true'Per opzioni di configurazione avanzate, consulta la tabella Helm del driver NVIDIA DRA
. -
Verificare che i driver pod DRA siano in funzione.
kubectl get pods -n nvidia-dra-driver-gpu -
Verificate che gli
DeviceClassoggetti siano stati creati.kubectl get deviceclassNAME AGE gpu.nvidia.com 60s -
Verifica che
ResourceSlicegli oggetti siano pubblicati per i tuoi nodi GPU.kubectl get resourceslicePer richiedere le GPU NVIDIA utilizzando il driver DRA, crea un codice
ResourceClaimTemplateche faccia riferimento agpu.nvidia.comDeviceClasse fallo riferimento nelle specifiche del tuo Pod. L'esempio seguente richiede una singola GPU. Vedi i passaggi Topology-aware EFA e GPU/Neuron allocazione dei dispositivi per allocare le GPU NVIDIA con interfacce EFA allineate alla topologia.apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: single-gpu spec: spec: devices: requests: - name: gpu exactly: deviceClassName: gpu.nvidia.com count: 1 --- apiVersion: v1 kind: Pod metadata: name: gpu-workload spec: containers: - name: app ... resources: claims: - name: gpu resourceClaims: - name: gpu resourceClaimTemplateName: single-gpu tolerations: - key: "nvidia.com/gpu" operator: "Exists" effect: "NoSchedule"
Installa il plug-in per dispositivi NVIDIA Kubernetes
Il plug-in per dispositivi NVIDIA Kubernetes pubblicizza le GPU NVIDIA come risorse estese. nvidia.com/gpu Richiedete le GPU nelle richieste e nei limiti delle risorse dei container.
Prerequisiti
-
Un cluster Amazon EKS.
-
Nodi con tipi di istanze GPU NVIDIA che utilizzano l'AMI NVIDIA EKS-optimized AL2023. Le AMI EKS-optimized Bottlerocket includono il plug-in per dispositivi NVIDIA e non è richiesta alcuna installazione separata.
-
Helm è installato nell’ambiente a riga di comando, consulta le istruzioni di configurazione di Helm per ulteriori informazioni.
-
kubectlconfigurato per comunicare con il cluster, vedi Installazione o aggiornamento di kubectl per ulteriori informazioni.
Procedura
-
Aggiungi il repository Helm chart del plug-in per dispositivi NVIDIA.
helm repo add nvdp https://nvidia.github.io/k8s-device-plugin -
Aggiorna il tuo repository Helm locale.
helm repo update -
Installa il plug-in per dispositivi NVIDIA Kubernetes.
helm install nvdp nvdp/nvidia-device-plugin \ --namespace nvidia \ --create-namespace \ --set gfd.enabled=trueDisattiva MOFED sui nodi con dispositivi EFA
A partire dalla
k8s-device-pluginv0.19.0, il valore predefinito del flag è.--mofed-enabledtrueCiò fa sì che il plug-in per dispositivi NVIDIA monti tutti i/dev/infiniband/uverbs*dispositivi in contenitori che richiedono GPU ().nvidia.com/gpuCiò è in conflitto con il plug-in del dispositivo AWS EFA, che gestisce il montaggio dei dispositivi.uverbsI carichi di lavoro che richiedono meno di tutti i dispositivi EFA su un nodo ne risentono perché il plug-in per dispositivi NVIDIA supporta tutti i dispositivi per impostazione predefinita.uverbsSe i tuoi nodi dispongono di dispositivi EFA, disabilita esplicitamente MOFED durante l'installazione del plug-in per dispositivi NVIDIA:
helm upgrade --install nvdp nvdp/nvidia-device-plugin \ --namespace nvidia \ --create-namespace \ --set gfd.enabled=true \ --set mofedEnabled=falseSe gestisci il plug-in del dispositivo NVIDIA tramite NVIDIA GPU Operator, disabilita
MOFED utilizzando il campo: devicePlugin.envhelm upgrade --install gpu-operator nvidia/gpu-operator \ --namespace gpu-operator \ --set 'devicePlugin.env[0].name=MOFED_ENABLED' \ --set 'devicePlugin.env[0].value=false'Per ulteriori informazioni, consulta NVIDIA
k8s-device-plugin issue #1692. Nota
Puoi anche installare e gestire il plug-in per dispositivi NVIDIA Kubernetes utilizzando NVIDIA GPU Operator, che automatizza la gestione di tutti i componenti software NVIDIA necessari per il provisioning delle GPU
. -
Verifica DaemonSet che il plug-in del dispositivo NVIDIA sia in esecuzione.
kubectl get ds -n nvidia nvdp-nvidia-device-pluginNAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE nvdp-nvidia-device-plugin 2 2 2 2 2 <none> 60s -
Verifica che i tuoi nodi abbiano GPU allocabili.
kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"Di seguito viene riportato un output di esempio.
NAME GPU ip-192-168-11-225.us-west-2.compute.internal 1 ip-192-168-24-96.us-west-2.compute.internal 1
Richiedi le GPU NVIDIA in un Pod
Per richiedere le GPU NVIDIA utilizzando il plug-in del dispositivo, specifica la nvidia.com/gpu risorsa nelle richieste e nei limiti delle risorse del contenitore.
apiVersion: v1 kind: Pod metadata: name: nvidia-smi spec: restartPolicy: OnFailure containers: - name: gpu-demo image: public.ecr.aws/amazonlinux/amazonlinux:2023-minimal command: ["/bin/sh", "-c"] args: ["nvidia-smi && tail -f /dev/null"] resources: limits: nvidia.com/gpu: 1 requests: nvidia.com/gpu: 1 tolerations: - key: "nvidia.com/gpu" operator: "Equal" value: "true" effect: "NoSchedule"
Per eseguire questo test, applica il manifesto e visualizza i log:
kubectl apply -f nvidia-smi.yaml kubectl logs nvidia-smi
Di seguito viene riportato un output di esempio.
+-----------------------------------------------------------------------------------------+ | NVIDIA-SMI XXX.XXX.XX Driver Version: XXX.XXX.XX CUDA Version: XX.X | |-----------------------------------------+------------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 NVIDIA L4 On | 00000000:31:00.0 Off | 0 | | N/A 27C P8 11W / 72W | 0MiB / 23034MiB | 0% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | No running processes found | +-----------------------------------------------------------------------------------------+