Esegui il deployment dei carichi di lavoro GPU in Autopilot

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questa pagina mostra come richiedere acceleratori hardware (GPU) nei carichi di lavoro Autopilot di Google Kubernetes Engine (GKE).

Prezzi

Per informazioni sui prezzi dell'hardware GPU disponibile in Autopilot, consulta la pagina Prezzi di GKE. Puoi richiedere GPU in pod Spot.

Le GPU nei normali pod Autopilot sono idonei agli sconti per impegno di utilizzo (CUD).

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti attività:

  • Abilita l'API Google Kubernetes Engine.
  • Abilita l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installa e poi inizializza l'interfaccia a riga di comando gcloud.

Limitazioni

  • Non puoi utilizzare GPU di condivisione del tempo e GPU multi-istanza con Autopilot.
  • La disponibilità delle GPU dipende dall'area geografica di Google Cloud del cluster Autopilot e dalla quota GPU.
  • Se richiedi esplicitamente un nodo GPU specifico esistente per il pod, quest'ultimo dovrà consumare tutte le risorse GPU sul nodo. Ad esempio, se il nodo esistente ha 8 GPU e i container del tuo pod richiedono un totale di 4 GPU, Autopilot rifiuta il pod.

Richiedere GPU nei container

Per richiedere risorse GPU per i container, aggiungi i seguenti campi alla specifica del pod:

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  nodeSelector:
    cloud.google.com/gke-accelerator: GPU_TYPE
  containers:
  - name: my-gpu-container
    image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
    command: ["/bin/bash", "-c", "--"]
    args: ["while true; do sleep 600; done;"]
    resources:
      limits:
        nvidia.com/gpu: GPU_QUANTITY

Sostituisci quanto segue:

  • GPU_TYPE: tipo di hardware GPU. I valori consentiti sono i seguenti:
    • nvidia-tesla-t4
    • nvidia-tesla-a100
  • GPU_QUANTITY: numero di GPU da allocare al container. Deve essere una quantità di GPU supportata per il tipo di GPU selezionato.

Devi specificare sia il tipo di GPU sia la quantità della GPU nella specifica del pod. Se ometti uno di questi valori, Autopilot rifiuta il pod.

Richieste di CPU e memoria per i pod GPU Autopilot

Quando definisci i pod GPU, devi richiedere risorse CPU e di memoria anche in modo che i container funzionino come previsto. Autopilot applica valori minimi, massimi e CPU specifici in base al tipo e alla quantità di GPU. Per maggiori dettagli, consulta Richieste di risorse in Autopilot.

La specifica del pod dovrebbe essere simile all'esempio seguente, che richiede quattro GPU T4:

apiVersion: v1
kind: Pod
metadata:
  name: t4-pod
spec:
  nodeSelector:
    cloud.google.com/gke-accelerator: "nvidia-tesla-t4"
  containers:
  - name: t4-container-1
    image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
    command: ["/bin/bash", "-c", "--"]
    args: ["while true; do sleep 600; done;"]
    resources:
      limits:
        nvidia.com/gpu: 3
      requests:
        cpu: "54"
        memory: "54Gi"
  - name: t4-container-2
    image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
    command: ["/bin/bash", "-c", "--"]
    args: ["while true; do sleep 600; done;"]
    resources:
      limits:
        nvidia.com/gpu: 1
      requests:
        cpu: "18"
        memory: "18Gi"

Verifica allocazione GPU

Per verificare che un carico di lavoro GPU di cui sia stato eseguito il deployment abbia le GPU richieste, esegui il comando seguente:

kubectl describe node NODE_NAME

Sostituisci NODE_NAME con il nome del nodo su cui è stato pianificato il pod.

L'output è simile al seguente:


apiVersion: v1
kind: Node
metadata:
...
  labels:
    ...
    cloud.google.com/gke-accelerator: nvidia-tesla-t4
    cloud.google.com/gke-accelerator-count: "1"
    cloud.google.com/machine-family: custom-48
    ...
...

Come funziona l'allocazione della GPU in Autopilot

Dopo aver richiesto un tipo GPU e una quantità per i container in un pod ed eseguito il deployment del pod, si verifica quanto segue:

  1. Se non esiste un nodo GPU allocabile, Autopilot esegue il provisioning di un nuovo nodo GPU per pianificare il pod. Autopilot installa automaticamente i driver NVIDIA per agevolare l'hardware.
  2. Autopilot aggiunge incompatibilità dei nodi al nodo GPU e le tolleranze corrispondenti al pod. Questo impedisce a GKE di pianificare altri pod sul nodo GPU.

Autopilot posiziona esattamente un pod GPU su ciascun nodo GPU, nonché qualsiasi carico di lavoro gestito da GKE in esecuzione su tutti i nodi, nonché eventuali DaemonSet che configuri per tollerare tutte le incompatibilità dei nodi.

Esegui DaemonSet su ogni nodo

Potresti voler eseguire DaemonSet su tutti i nodi, anche quelli a cui sono applicate incompatibilità. Ad esempio, alcuni agenti di logging e monitoraggio devono essere eseguiti su ogni nodo nel cluster. Puoi configurare questi DaemonSet in modo da ignorare le incompatibilità dei nodi in modo che GKE posizioni questi carichi di lavoro su ogni nodo.

Per eseguire i DaemonSet su ogni nodo del tuo cluster, inclusi i nodi GPU, aggiungi la seguente tolleranza alla tua specifica:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: logging-agent
spec:
  tolerations:
  - key: ""
    operator: "Exists"
    effect: ""
  containers:
  - name: logging-agent-v1
    image: IMAGE_PATH

Per eseguire i DaemonSet su nodi GPU specifici nel cluster, aggiungi quanto segue alla specifica:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: logging-agent
spec:
  nodeSelector:
    cloud.google.com/gke-accelerator: "GPU_TYPE"
  tolerations:
  - key: ""
    operator: "Exists"
    effect: ""
  containers:
  - name: logging-agent-v1
    image: IMAGE_PATH

Sostituisci GPU_TYPE con il tipo di GPU nei nodi di destinazione. Può essere nvidia-tesla-t4 o nvidia-tesla-a100.

Casi d'uso delle GPU in Autopilot

Puoi allocare le GPU ai container dei pod Autopilot per agevolare i carichi di lavoro, come i seguenti:

  • Inferenza machine learning (ML)
  • Formazione ML
  • Rendering

Quantità di GPU supportate

Quando richiedi GPU nella specifica del pod, devi utilizzare le seguenti quantità in base al tipo di GPU:

Quantità GPU
NVIDIA T4
nvidia-tesla-t4
1, 2, 4
NVIDIA A100
nvidia-tesla-a100
1, 2, 4, 8, 16

Se richiedi una quantità di GPU non supportata per quel tipo, Autopilot rifiuta il pod.

Monitora i nodi GPU

Se il tuo cluster GKE ha metriche di sistema abilitate, le seguenti metriche sono disponibili in Cloud Monitoring per monitorare le prestazioni del carico di lavoro GPU:

  • Ciclo di lavoro (container/accelerator/duty_cycle): percentuale di tempo nel precedente periodo di campionamento (10 secondi) durante il quale l'acceleratore è stato elaborato attivamente. 1-100.
  • Utilizzo memoria (container/accelerator/memory_used): quantità di memoria dell'acceleratore allocata in byte.
  • Capacità di memoria (container/accelerator/memory_total): memoria totale dell'acceleratore in byte.

Per ulteriori informazioni sul monitoraggio dei cluster e delle relative risorse, consulta Monitoraggio.

Visualizza metriche di utilizzo

Puoi visualizzare le metriche di utilizzo delle GPU dei carichi di lavoro dalla dashboard Carichi di lavoro in Google Cloud Console.

Per visualizzare l'utilizzo delle GPU dei carichi di lavoro, procedi come segue:

  1. Vai alla pagina Carichi di lavoro di Google Cloud Console.

    Vai a Carichi di lavoro
  2. Seleziona un carico di lavoro.

La dashboard Carichi di lavoro mostra i grafici per l'utilizzo e la capacità di memoria della GPU, nonché il ciclo di lavoro della GPU.

Passaggi successivi