Abilita e utilizza le GPU NVIDIA nelle VM con Anthos VM Runtime

Questo documento illustra come abilitare il supporto di NVIDIA® GPU per macchine virtuali (VM) eseguite con il runtime VM VM. Imparerai come installare i driver NVIDIA sui tuoi cluster Anthos su nodi Bare Metal, verificare che le GPU siano disponibili e assegnare GPU alle VM.

Prima di iniziare

Per completare il documento, devi accedere alle seguenti risorse:

Schede GPU Nvidia supportate

I cluster Anthos su Bare Metal versione 1.12 o successiva supportano le seguenti GPU NVIDIA:

  • Tesla P4
  • Tesla V100 SXM2 32 GB
  • A100 SXM4 40 GB
  • A100 PCIe 40 GB
  • A100 SXM4 80 GB
  • A100 PCIe 80 GB

Installa i driver NVIDIA sui nodi

Prima che le VM possano utilizzare le GPU NVIDIA, devi configurare i cluster Anthos sui nodi Bare Metal in modo che supportino i dispositivi GPU. Per installare i driver NVIDIA sui tuoi nodi, completa i seguenti passaggi su ciascun nodo del tuo cluster, inclusa una GPU NVIDIA. Questo documento utilizza una versione di Ubuntu supportata per i nodi:

  1. Connettiti ai cluster Anthos su nodo Bare Metal che vuoi configurare per il supporto GPU.
  2. Recupera la versione kernel del nodo:

    KERNEL_VERSION="$(uname -r)"
    
  3. Aggiorna il nodo Ubuntu e installa le intestazioni kernel appropriate:

    sudo apt update && \
    apt install -y linux-headers-${KERNEL_VERSION}
    
  4. Installa il pacchetto build-essential in modo da poter compilare i driver Nvidia in un passaggio successivo:

    sudo apt install -y build-essential
    
  5. Scarica il pacchetto driver NVIDIA appropriato per la tua GPU. Per un elenco completo dei driver, consulta la sezione Download di driver NVIDIA.

    Nell'esempio seguente viene scaricato il driver Linux x86_64 della versione 470.82.01:

    wget https://us.download.nvidia.com/tesla/470.82.01/NVIDIA-Linux-x86_64-470.82.01.run
    
  6. Installa il pacchetto del driver NVIDIA. Usa il nome del pacchetto del driver NVIDIA che hai scaricato nel passaggio precedente:

    sudo sh NVIDIA-Linux-x86_64-470.82.01.run \
      --accept-license \
      --silent \
      --no-nouveau-check
    
  7. Carica il modulo del kernel NVIDIA:

    sudo modprobe nvidia
    
  8. Ripeti i passaggi in questa sezione su ciascun nodo del tuo cluster con una GPU NVIDIA.

Attiva supporto GPU in Anthos VM Runtime

Dopo aver installato i driver NVIDIA sui tuoi cluster Anthos su nodi Bare Metal, attiverai il supporto delle GPU in Anthos VM Runtime. Le VM possono quindi accedere alle GPU delle nodi.

Ogni nodo viene riavviato durante il processo seguente. Questo processo di riavvio potrebbe interessare le VM. Se possibile e configurate per farlo, le VM migrabili migrano ad altri nodi. Per ulteriori informazioni, scopri come configurare il criterio di rimozione per le VM durante gli eventi di manutenzione.

Per abilitare il supporto GPU nel runtime VM Anthos, completa i passaggi seguenti.

  1. Modifica la risorsa personalizzata VMRuntime:

    kubectl edit vmruntime vmruntime
    
  2. Aggiungi la proprietà enableGPU: true al manifest VMRuntime:

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      enabled: true
      enableGPU: true
    ...
    
  3. Salva e chiudi la risorsa personalizzata VMRuntime nell'editor.

  4. Controlla lo stato dei controller GPU nello spazio dei nomi vm-system:

    kubectl get pods --namespace vm-system  -w
    

    L'attivazione dei controller richiede circa cinque minuti. Attendi che venga visualizzato STATUS Running 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
    
  5. Verifica che le GPU siano disponibili per l'utilizzo quando i controller GPU riportano tutti il loro 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 tuo cluster con supporto GPU. Assegnali alle VM nella sezione successiva:

    NAME       ALLOCATED   DEVICEMODEL
    bm-node1   true        Tesla A100 SXM4 40GB
    bm-node2   true        Tesla A100 SXM4 40GB
    

Alloca GPU per l'utilizzo con le VM

Con il supporto GPU configurato nei cluster Anthos su nodi Bare Metal e in Anthos VM Runtime, alloca le GPU per l'utilizzo con le VM. Per impostazione predefinita, le GPU sono allocate per l'uso con i pod (container).

  1. Modifica la risorsa personalizzata GPUAllocation da utilizzare con le VM. Questo passaggio assegna le GPU sui nodi da utilizzare 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.

  2. Configura il numero di GPU da allocare alle VM. Inizialmente, tutte le GPU sono assegnate ai pod.

    Il numero totale di GPU assegnate a VM e pod deve essere uguale al numero di GPU nel nodo. Ad esempio, potresti avere quattro GPU nel nodo. Se alloca due GPU alle VM, rimangono due GPU assegnate ai pod. Il manifest GPUAllocation viene rifiutato se tenti di allocare due GPU alle VM e una GPU ai pod, poiché 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.

  3. Salva e chiudi la risorsa personalizzata GPUAllocation nell'editor.

  4. Verifica che le GPU segnalino il loro stato di ALLOCATED come true:

    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
    

Crea una VM con supporto GPU

Ora puoi creare una VM che utilizza la GPU dal nodo. Nella risorsa personalizzata VM, specifichi il nome e la quantità delle GPU da allocare dal nodo.

  1. 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.

    L'output di esempio seguente mostra che il nome della 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
    [...]
    
  2. Crea un manifest VirtualMachine, ad esempio my-gpu-vm.yaml, nell'editor che preferisci:

    nano my-gpu-vm.yaml
    
  3. 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 tua VM.
    • GPU_NAME: il nome della GPU del nodo da allocare alla VM.
      • Questo nome GPU viene mostrato nell'output del comando kubectl describe node di un passaggio precedente, ad esempio NVIDIA_A100_SXM4_40GB.

    La VM connette eth0 alla rete pod-network predefinita.

    Il disco di avvio denominato VM_NAME-boot-dv deve esistere già. Per maggiori informazioni, consulta la pagina Creare e gestire dischi virtuali.

  4. Salva e chiudi il manifest della VM nell'editor.

  5. Crea la VM utilizzando kubectl:

    kubectl apply -f my-gpu-vm.yaml
    
  6. Quando la VM è in esecuzione, connettiti alla VM e verifica che l'hardware GPU sia disponibile.

Passaggi successivi