Gestire i carichi di lavoro GPU

Questa pagina descrive come gestire i carichi di lavoro delle unità di elaborazione grafica (GPU) su Google Distributed Cloud connected. Per usufruire di questa funzionalità, devi disporre di una configurazione hardware connessa a Distributed Cloud che contenga GPU. Per saperne di più, consulta Pianificare la configurazione hardware.

I carichi di lavoro connessi a Distributed Cloud possono essere eseguiti in container e su macchine virtuali:

  • Workload GPU in esecuzione nei container. 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 basati su container è 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.

Allocare risorse GPU

Per impostazione predefinita, 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:
        GPU_MODEL: 2
        limits:
        GPU_MODEL: 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.
  • GPU_MODEL: il modello di GPU NVIDIA installata nella macchina di destinazione connessa a Distributed Cloud. I valori validi sono:
    • nvidia.com/gpu-pod-NVIDIA_L4 per la GPU NVIDIA L4
    • nvidia.com/gpu-pod-TESLA_T4 per la GPU NVIDIA Tesla T4

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: GPU_MODEL
    quantity: 2

Sostituisci quanto segue: