Questo documento mostra come abilitare il supporto delle GPU NVIDIA® per le macchine virtuali (VM) in esecuzione con VM Runtime su GDC. Imparerai a installare i driver NVIDIA su GKE su nodi Bare Metal, a verificare che le GPU siano disponibili e ad assegnare le GPU alle VM.
Prima di iniziare
Per completare questo documento, devi avere accesso alle seguenti risorse:
- Accesso al cluster GKE su Bare Metal versione 1.12.0 (
anthosBareMetalVersion: 1.12.0
) o successiva. Puoi utilizzare qualsiasi tipo di cluster in grado di eseguire carichi di lavoro. Se necessario, prova GDCV per Bare Metal su Compute Engine o consulta la panoramica della creazione del cluster. - Lo strumento client
virtctl
installato come plug-in perkubectl
. Se necessario, installa lo strumento client virtctl.
Schede GPU Nvidia supportate
GKE su Bare Metal versione 1.13 o successive supporta le seguenti GPU NVIDIA:
- Tesla T4
- Tesla P4
- Tesla V100 SXM2 32 GB
- A100 SXM4 40 GB
- A100 PCIe 40 GB
- A100 SXM4 da 80 GB
- A100 PCIe 80 GB
Installa i driver NVIDIA sui nodi
Prima che le VM possano utilizzare le GPU NVIDIA, devi configurare GKE sui nodi Bare Metal in modo da supportare i dispositivi GPU. Per installare i driver NVIDIA sui tuoi nodi, completa i seguenti passaggi su ciascun nodo nel tuo cluster che include una GPU NVIDIA. Questo documento utilizza una versione di Ubuntu supportata per i nodi:
- Connettiti al nodo GKE su Bare Metal che vuoi configurare per il supporto delle GPU.
Ottieni la versione kernel del tuo nodo:
KERNEL_VERSION="$(uname -r)"
Aggiorna il nodo Ubuntu e installa le intestazioni del kernel appropriate:
sudo apt update && \ apt install -y linux-headers-${KERNEL_VERSION}
Installa il pacchetto
build-essential
in modo da poter compilare i driver Nvidia in un passaggio seguente:sudo apt install -y build-essential
Scarica il pacchetto di driver NVIDIA appropriato per la tua GPU. Per un elenco completo dei driver, vedi Download dei driver NVIDIA.
L'esempio seguente scarica il driver
470.82.01
della versioneLinux x86_64
:wget https://us.download.nvidia.com/tesla/470.82.01/NVIDIA-Linux-x86_64-470.82.01.run
Installa il pacchetto del driver NVIDIA. Usa il nome del pacchetto driver NVIDIA che hai scaricato nel passaggio precedente:
sudo sh NVIDIA-Linux-x86_64-470.82.01.run \ --accept-license \ --silent \ --no-nouveau-check
Carica il modulo kernel NVIDIA:
sudo modprobe nvidia
Ripeti i passaggi in questa sezione su ciascun nodo nel tuo cluster che dispone di una GPU NVIDIA.
Abilita il supporto delle GPU nel runtime delle VM su GDC
Dopo aver installato i driver NVIDIA sui tuoi nodi GKE sui nodi Bare Metal, attiverai il supporto delle GPU nel runtime delle VM su GDC. Le VM possono quindi accedere alle GPU sui nodi.
Ogni nodo si riavvia nell'ambito del seguente processo. Le VM potrebbero essere interessate da questo processo di riavvio. Se possibile e configurate in modo da farlo, le VM di cui è possibile eseguire la migrazione migrano ad altri nodi. Per maggiori informazioni, consulta la pagina su come configurare il criterio di rimozione delle VM durante gli eventi di manutenzione.
Per abilitare il supporto delle GPU nel runtime VM su GDC, completa i passaggi seguenti.
Modifica la risorsa personalizzata
VMRuntime
:kubectl edit vmruntime vmruntime
Aggiungi la proprietà
enableGPU: true
al file manifestVMRuntime
:apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: name: vmruntime spec: enabled: true enableGPU: true ...
Salva e chiudi la risorsa personalizzata
VMRuntime
nell'editor.Controlla lo stato dei controller GPU nello spazio dei nomi
vm-system
:kubectl get pods --namespace vm-system -w
L'abilitazione dei controller richiede circa cinque minuti. Attendi che
STATUS
venga visualizzatoRunning
per tutti i controller GPU. Il seguente output di esempio mostra lo stato desiderato:NAME READY STATUS RESTARTS AGE gpu-controller-controller-manager-gwvcb 2/2 Running 0 10m kubevirt-gpu-dp-daemonset-2lfkl 1/1 Running 0 10m kubevm-gpu-driver-daemonset-5fwh6 1/1 Running 0 10m nvidia-gpu-dp-daemonset-9zq2w 1/1 Running 0 10m nvidia-mig-manager-5g7pz 1/1 Running 0 10m vm-controller-controller-manager-7b6df6979b 2/2 Running 2 (13m ago) 14m
Verifica che le GPU siano disponibili per l'utilizzo quando tutti i controller GPU segnalano il proprio stato come
Running
:kubectl get gpuallocations --namespace vm-system
L'output di esempio seguente mostra che le GPU sui nodi sono disponibili per l'uso. Viene mostrato ogni nodo nel cluster con supporto GPU. Lo allocarai alle VM nella prossima sezione:
NAME ALLOCATED DEVICEMODEL bm-node1 true Tesla A100 SXM4 40GB bm-node2 true Tesla A100 SXM4 40GB
Alloca le GPU per l'utilizzo con le VM
Con il supporto delle GPU configurato nei nodi Anthos clusters on bare metal e nel runtime VM su GDC, alloca le GPU da utilizzare con le VM. Per impostazione predefinita, le GPU sono allocate per l'utilizzo con i pod (container).
Modifica la risorsa personalizzata
GPUAllocation
da utilizzare con le VM. Questo passaggio assegna le GPU sui nodi per l'utilizzo con le VM:kubectl edit gpuallocation NODE_NAME --namespace vm-system
Sostituisci
NODE_NAME
con il nome del nodo da cui vuoi allocare le GPU.Configura il numero di GPU da allocare alle VM. Inizialmente, tutte le GPU sono allocate ai pod.
Il numero totale di GPU allocate a VM e pod deve corrispondere al numero di GPU nel nodo. Ad esempio, il tuo nodo potrebbe avere quattro GPU. Se assegni due GPU alle VM, rimangono due GPU allocate ai pod. Il manifest
GPUAllocation
viene rifiutato se tenti di allocare due GPU alle VM e una GPU ai pod, dato che una GPU non viene allocata.Aggiorna il numero di GPU sul nodo che vuoi allocare per l'utilizzo con le VM, come mostrato nell'esempio seguente:
apiVersion: gpu.cluster.gke.io/v1 kind: GPUAllocation metadata: name: gpu-w2 namespace: vm-system spec: node: gpu-w2 pod: 0 vm: 4
In questo esempio, tutte e quattro le GPU installate nel nodo sono allocate alle VM. Nessuna GPU è allocata ai pod.
Salva e chiudi la risorsa personalizzata
GPUAllocation
nell'editor.Verifica che le GPU segnalino lo stato
ALLOCATED
cometrue
:kubectl get gpuallocations --namespace vm-system
Il seguente output di esempio mostra che le GPU sui nodi sono disponibili per l'uso:
NAME ALLOCATED DEVICEMODEL gpu-w1 true Tesla A100 SXM4 40GB gpu-w2 true Tesla A100 SXM4 40GB
Creazione di una VM con supporto GPU
Ora puoi creare una VM che utilizza la GPU del nodo. Nella risorsa VM personalizzata, specifichi il nome e la quantità di GPU da allocare dal nodo.
Recupera il nome della scheda GPU dall'host:
kubectl describe node NODE_NAME
Sostituisci
NODE_NAME
con il nome dell'host da cui vuoi ottenere il nome della GPU.Il seguente output di esempio mostra che il nome GPU allocabile su questo nodo è
NVIDIA_A100_SXM4_40GB
:Name: bm-node1 Roles: worker [...] Allocatable: cpu: 47810m [...] memory: 336929400Ki nvidia.com/gpu-vm-NVIDIA_A100_SXM4_40GB: 1 [...]
Crea un file manifest
VirtualMachine
, ad esempiomy-gpu-vm.yaml
, nell'editor che preferisci:nano my-gpu-vm.yaml
Copia e incolla il seguente manifest YAML:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - virtualMachineDiskName: VM_NAME-boot-dv boot: true gpu: model: nvidia.com/gpu-vm-GPU_NAME quantity: 1
In questo file YAML, definisci le seguenti impostazioni:
VM_NAME
: il nome della VM.GPU_NAME
: il nome GPU del nodo da allocare alla VM.- Il nome di questa GPU viene mostrato nell'output del comando
kubectl describe node
di un passaggio precedente, ad esempioNVIDIA_A100_SXM4_40GB
.
- Il nome di questa GPU viene mostrato nell'output del comando
La VM connette
eth0
alla retepod-network
predefinita.Il disco di avvio denominato
VM_NAME-boot-dv
deve già esistere. Per maggiori informazioni, consulta Creare e gestire dischi virtuali.Salva e chiudi il manifest della VM nell'editor.
Crea la VM utilizzando
kubectl
:kubectl apply -f my-gpu-vm.yaml
Quando la VM è in esecuzione, connettiti alla VM e verifica che l'hardware GPU sia disponibile.