Gestire i carichi di lavoro GPU

Questa pagina descrive come abilitare e gestire i carichi di lavoro della GPU (Graphics Processing Unit) su Google Distributed Cloud connected. Per usufruire di questa funzionalità, devi disporre di una configurazione hardware connessa a Distributed Cloud che contenga GPU. Il supporto della GPU è disattivato per impostazione predefinita. Devi abilitare esplicitamente il supporto GPU sul cluster Distributed Cloud connected. Tieni presente che Distributed Cloud Servers non supporta i carichi di lavoro delle GPU.

Per pianificare e ordinare una configurazione di questo tipo, scegli la configurazione 2 nei seguenti documenti:

Se il rack Distributed Cloud connected include GPU, puoi configurare i carichi di lavoro Distributed Cloud connected in modo che utilizzino le risorse GPU.

I carichi di lavoro connessi a 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 connected 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 connected. 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 connected 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 connected, 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 connessa 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 Google Distributed Cloud connesso. 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 VMRuntime esistente
  • Per i cluster del piano di controllo locale, devi modificare la risorsa VMRuntime esistente.

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 sul supporto GDC per abilitare il supporto GPU sul tuo cluster connesso a 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 nel cluster connesso 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

  1. Per allocare risorse GPU su un nodo connesso a Distributed Cloud, utilizza il seguente comando per modificare la risorsa personalizzata GPUAllocation sul nodo di destinazione:

    kubectl edit gpuallocation NODE_NAME --namespace vm-system

    Sostituisci NODE_NAME con 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 workloads
    
  2. Imposta le allocazioni delle risorse GPU nel seguente modo:

    • Per allocare una risorsa GPU ai workload containerizzati, aumenta il valore del campo pod e diminuisci il valore del campo vm dello stesso importo.
    • Per allocare una risorsa GPU ai carichi di lavoro delle macchine virtuali, aumenta il valore del campo vm e diminuisci il valore del campo pod dello stesso importo.

    Il numero totale di risorse GPU allocate non deve superare il numero di GPU installate sulla macchina fisica connessa a Distributed Cloud 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 workloads
    

    Al termine, applica la risorsa GPUAllocation modificata al cluster e attendi che il suo stato cambi in AllocationFulfilled.

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_NAME con il nome del nodo Distributed Cloud connesso 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 connesso a utilizzare le risorse GPU, configura la relativa specifica come mostrato nel seguente esempio, 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 connesso a 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 di destinazione Distributed Cloud connesso.

Configurare una macchina virtuale per l'utilizzo delle risorse GPU

Per configurare una macchina virtuale in esecuzione su Distributed Cloud connessa per utilizzare le risorse GPU, configura la relativa 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