Questa pagina descrive come abilitare e gestire i carichi di lavoro della GPU (Graphics Processing Unit) su Google Distributed Cloud. Per usufruire di questa funzionalità, devi disporre di una configurazione hardware Distributed Cloud che contenga GPU. Il supporto della GPU è disattivato per impostazione predefinita. Devi abilitare esplicitamente il supporto GPU sul tuo cluster Distributed Cloud.
Per pianificare e ordinare una configurazione di questo tipo, scegli la configurazione 2 nei seguenti documenti:
Se il rack Distributed Cloud include GPU, puoi configurare i carichi di lavoro Distributed Cloud in modo che utilizzino le risorse GPU.
I carichi di lavoro Distributed Cloud possono essere eseguiti in container e su macchine virtuali:
Workload GPU in esecuzione nei container. Quando abiliti il supporto GPU, tutte le risorse GPU sul cluster Distributed Cloud vengono inizialmente allocate ai carichi di lavoro in esecuzione nei container. Il driver GPU per l'esecuzione di carichi di lavoro containerizzati basati su GPU è incluso in Distributed Cloud. All'interno di ogni container, le librerie GPU sono montate in
/opt/nvidia.Workload GPU in esecuzione su macchine virtuali. Per eseguire un carico di lavoro basato su GPU su una macchina virtuale, devi allocare le risorse GPU sul nodo Distributed Cloud di destinazione alle macchine virtuali, come descritto più avanti in questa pagina. In questo modo, il driver GPU integrato viene ignorato e le GPU vengono trasmesse direttamente alle macchine virtuali. Devi installare manualmente un driver GPU compatibile sul sistema operativo guest di ogni macchina virtuale. Devi anche proteggere tutte le licenze necessarie per eseguire driver GPU specializzati sulle tue macchine virtuali.
Per verificare che le GPU siano presenti su un nodo Distributed Cloud, controlla che il nodo abbia l'etichetta vm.cluster.gke.io.gpu=true. Se l'etichetta non è presente sul nodo, significa che non sono installate GPU sulla macchina fisica Distributed Cloud corrispondente.
Abilita il supporto GPU
Per attivare il supporto GPU per i tuoi carichi di lavoro, devi creare o modificare la risorsa personalizzata VMRuntime che contiene il parametro enableGPU con il valore impostato su true, quindi applicarla al cluster Distributed Cloud.
Ad esempio:
apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: name: vmruntime spec: # Enable GPU support enableGPU: true
A seconda del tipo di cluster su cui vuoi abilitare VM Runtime sul sottosistema di macchine virtuali GDC, esegui una delle seguenti operazioni:
- Per i cluster del control plane Cloud su cui non hai ancora attivato il sottosistema di macchine virtuali del runtime VM su GDC, devi creare manualmente la risorsa
VMRuntime. - Per i cluster del control plane Cloud su cui hai già attivato il sottosistema della macchina virtuale VM Runtime su GDC, devi modificare la risorsa
VMRuntimeesistente - Per i cluster del piano di controllo locale, devi modificare la risorsa
VMRuntimeesistente.
Questa stessa risorsa VMRuntime configura anche il supporto del runtime VM su GDC
sul tuo cluster
utilizzando il parametro enable. Assicurati di configurare i due parametri
in base alle esigenze del tuo workload. Non devi abilitare
VM Runtime su GDC per abilitare il supporto GPU sul tuo
cluster Distributed Cloud.
La tabella seguente descrive le configurazioni disponibili.
Valore enable |
Valore enableGPU |
Configurazione risultante |
|---|---|---|
false |
false |
I carichi di lavoro vengono eseguiti solo nei container e non possono utilizzare le risorse GPU. |
false |
true |
I carichi di lavoro vengono eseguiti solo nei container e possono utilizzare le risorse GPU. |
true |
true |
I carichi di lavoro possono essere eseguiti su macchine virtuali e in container. Entrambi i tipi di workload possono utilizzare le risorse GPU. |
true |
false |
I carichi di lavoro possono essere eseguiti su macchine virtuali e in container. Nessuno dei due tipi di carico di lavoro può utilizzare le risorse GPU. |
Verifica che il supporto della GPU sia stato attivato
Per verificare che il supporto GPU sia stato abilitato nel cluster, utilizza questo comando:
kubectl get pods --namespace vm-system
Il comando restituisce un output simile al seguente esempio:
NAME READY STATUS RESTARTS AGE
...
gpu-controller-controller-manager-vbv4w 2/2 Running 0 31h
kubevirt-gpu-dp-daemonset-gxj7g 1/1 Running 0 31h
nvidia-gpu-dp-daemonset-bq2vj 1/1 Running 0 31h
...
Nell'output, puoi verificare che i pod del controller GPU siano stati implementati
e siano in esecuzione nello spazio dei nomi vm-system.
Allocare risorse GPU
Per impostazione predefinita, quando abiliti il supporto GPU sul tuo cluster Distributed Cloud, tutte le risorse GPU su ogni nodo del cluster vengono allocate ai carichi di lavoro containerizzati. Per personalizzare l'allocazione delle risorse GPU su ogni nodo, completa i passaggi descritti in questa sezione.
Configura l'allocazione delle risorse GPU
Per allocare risorse GPU su un nodo Distributed Cloud, utilizza il seguente comando per modificare la risorsa personalizzata
GPUAllocationsul nodo di destinazione:kubectl edit gpuallocation NODE_NAME --namespace vm-system
Sostituisci
NODE_NAMEcon il nome del nodo Distributed Cloud di destinazione.Nell'esempio seguente, l'output del comando mostra l'allocazione delle risorse GPU predefinita di fabbrica. Per impostazione predefinita, tutte le risorse GPU vengono allocate ai carichi di lavoro in container (
pod) e nessuna risorsa GPU viene allocata ai carichi di lavoro delle macchine virtuali (vm):... spec: pod: 2 # Number of GPUs allocated for container workloads vm: 0 # Number of GPUs allocated for VM workloadsImposta le allocazioni delle risorse GPU nel seguente modo:
- Per allocare una risorsa GPU ai workload containerizzati, aumenta il valore
del campo
pode diminuisci il valore del campovmdello stesso importo. - Per allocare una risorsa GPU ai carichi di lavoro delle macchine virtuali, aumenta il valore
del campo
vme diminuisci il valore del campopoddello stesso importo.
Il numero totale di risorse GPU allocate non deve superare il numero di GPU installate sulla macchina Distributed Cloud fisica su cui viene eseguito il nodo; in caso contrario, il nodo rifiuta l'allocazione non valida.
Nell'esempio seguente, due risorse GPU sono state riassegnate dai carichi di lavoro in container (
pod) ai carichi di lavoro delle macchine virtuali (vm):... spec: pod: 0 # Number of GPUs allocated for container workloads vm: 2 # Number of GPUs allocated for VM workloadsAl termine, applica la risorsa
GPUAllocationmodificata al cluster e attendi che il suo stato cambi inAllocationFulfilled.- Per allocare una risorsa GPU ai workload containerizzati, aumenta il valore
del campo
Controlla l'allocazione delle risorse GPU
Per controllare l'allocazione delle risorse GPU, utilizza il seguente comando:
kubectl describe gpuallocations NODE_NAME --namespace vm-system
Sostituisci
NODE_NAMEcon il nome del nodo Distributed Cloud di destinazione.Il comando restituisce un output simile al seguente esempio:
Name: mynode1 ... spec: node: mynode1 pod: 2 # Number of GPUs allocated for container workloads vm: 0 # Number of GPUs allocated for VM workloads Status: Allocated: true Conditions: Last Transition Time: 2022-09-23T03:14:10Z Message: Observed Generation: 1 Reason: AllocationFulfilled Status: True Type: AllocationStatus Last Transition Time: 2022-09-23T03:14:16Z Message: Observed Generation: 1 Reason: DeviceStateUpdated Status: True Type: DeviceStateUpdated Consumption: pod: 0/2 # Number of GPUs currently consumed by container workloads vm: 0/0 # Number of GPUs currently consumed by VM workloads Device Model: Tesla T4 Events: <none>
Configura un container per utilizzare le risorse GPU
Per configurare un container in esecuzione su Distributed Cloud in modo che utilizzi le risorse GPU, configura la relativa specifica come mostrato nell'esempio seguente, quindi applicala al cluster:
apiVersion: v1 kind: Pod metadata: name: my-gpu-pod spec: containers: - name: my-gpu-container image: CUDA_TOOLKIT_IMAGE command: ["/bin/bash", "-c", "--"] args: ["while true; do sleep 600; done;"] env: resources: requests: nvidia.com/gpu-pod-TESLA_T4: 2 limits: nvidia.com/gpu-pod-TESLA_T4: 2 nodeSelector: kubernetes.io/hostname: NODE_NAME
Sostituisci quanto segue:
CUDA_TOOLKIT_IMAGE: il percorso completo e il nome dell'immagine del toolkit NVIDIA CUDA. La versione del toolkit CUDA deve corrispondere alla versione del driver NVIDIA in esecuzione sul cluster Distributed Cloud. Per determinare la versione del driver NVIDIA, consulta le note di rilascio di Distributed Cloud. Per trovare la versione del toolkit CUDA corrispondente, consulta Compatibilità CUDA.NODE_NAME: il nome del nodo Distributed Cloud di destinazione.
Configurare una macchina virtuale per l'utilizzo delle risorse GPU
Per configurare una macchina virtuale in esecuzione su
Distributed Cloud in modo che utilizzi le risorse GPU, configura la specifica della risorsa
VirtualMachine come mostrato nell'esempio seguente, quindi applicala al cluster:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine ... spec: ... gpu: model: nvidia.com/gpu-vm-TESLA_T4 quantity: 2
Passaggi successivi
- Gestire le macchine virtuali
- Esegui il deployment dei carichi di lavoro
- Gestisci macchine
- Gestire i cluster