Esegui il deployment dei carichi di lavoro GPU in Autopilot


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

Autopilot fornisce la classe di computing Accelerator specializzata per eseguire i pod GPU. Con questa classe di computing, GKE posiziona i pod sui nodi GPU, fornendo ai pod l'accesso a funzionalità avanzate sulla macchina virtuale (VM). Facoltativamente, puoi anche eseguire pod GPU senza selezionare la classe di computing Accelerator. Per scoprire di più sui vantaggi della classe di computing Accelerator, consulta Quando utilizzare classi di computing specifiche.

Prezzi

Autopilot addebita in modo diverso a seconda che tu abbia richiesto la classe di computing Accelerator per eseguire i carichi di lavoro GPU.

Vuoi usare la classe di computing Accelerator? Prezzi Compatibilità con le funzionalità di GKE
Ti vengono addebitati i costi per l'hardware Compute Engine che esegue i carichi di lavoro delle GPU, più un abbonamento premium Autopilot per la gestione e la scalabilità automatiche dei nodi. Per maggiori dettagli, vedi Prezzi della modalità Autopilot.

Compatibile con:

Gli addebiti avvengono in base alle richieste delle risorse dei pod GPU. Per i dettagli, consulta la sezione "Pod GPU" in Prezzi di Kubernetes Engine.

Compatibile con:

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 quindi initialize gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo gcloud components update.
  • Assicurati di avere un cluster GKE Autopilot che esegue una delle seguenti versioni:

    • Classe di calcolo dell'acceleratore: qualsiasi versione di patch 1.28 che inizia con 1.28.6-gke.1095000
      • GPU NVIDIA H100 (80 GB): 1.28.6-gke.1369000 o versioni successive e 1.29.1-gke.1575000 o versioni successive
      • Più pod GPU per VM: 1.29.2-gke.1355000 o versioni successive
    • Nessuna classe di calcolo selezionata:

      • GPU NVIDIA L4: 1.28.3-gke.1203000 o versioni successive
      • GPU NVIDIA A100 (80 GB): 1.27 o versioni successive
      • Tutte le altre GPU: 1.24.2-gke.1800 o versioni successive
  • Assicurati di disporre di quote sufficienti per le GPU disponibili nel progetto. Devi disporre di una quota GPU di Compute Engine sufficiente per i modelli di GPU che vuoi creare in ogni regione. Se hai bisogno di un'ulteriore quota GPU, richiedi una quota GPU.

Limitazioni

  • GPU con condivisione del tempo e GPU a più istanze sono disponibili con Autopilot in GKE versione 1.29.3-gke.1093000 e successive.
  • La disponibilità delle GPU dipende dalla regione Google Cloud del tuo cluster Autopilot e dalla tua quota GPU. Per trovare un modello di GPU per regione o zona, consulta Disponibilità di regioni e zone GPU.
  • Per le GPU NVIDIA A100 (80 GB), ti viene addebitato un prezzo fisso per gli SSD locali collegati ai nodi, indipendentemente dal fatto che i pod utilizzino o meno tale capacità.
  • Per le versioni GKE precedenti alla 1.29.2-gke.1355000, se richiedi esplicitamente un nodo GPU specifico esistente per il pod, quest'ultimo deve consumare tutte le risorse GPU sul nodo. Ad esempio, se il nodo esistente ha 8 GPU e i container del pod richiedono un totale di 4 GPU, Autopilot rifiuta il pod.
  • Per GKE versione 1.29.2-gke.1355000 o successive, se vuoi che più pod GPU entrino in un singolo nodo, la somma delle richieste GPU per questi pod deve essere minore o uguale al numero di risorse GPU collegate al nodo. Ad esempio, un nodo con un valore gke-accelerator-count di 4 potrebbe ospitare fino a quattro pod che richiedono una GPU ciascuno.

Posizionare più pod su un singolo nodo GPU è utile in situazioni come le seguenti:

  • Hai prenotazioni di capacità per tipi di macchine Accelerator di grandi dimensioni ed esegui carichi di lavoro con GPU singola, quindi il deployment di un pod per nodo sprecherebbe le altre GPU su quella macchina.
  • Hai carichi di lavoro GPU che devono essere eseguiti sullo stesso host

In queste situazioni, consigliamo di utilizzare tutte le GPU sul nodo verificando che la somma delle richieste di risorse GPU dei pod sul nodo sia uguale al numero di GPU collegate al nodo.

Richiedi GPU nei container

Per richiedere risorse GPU per i container, aggiungi i seguenti campi alla specifica del pod. A seconda dei requisiti del carico di lavoro, puoi facoltativamente omettere i campi cloud.google.com/compute-class: "Accelerator" e cloud.google.com/gke-accelerator-count.

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  nodeSelector:
    cloud.google.com/compute-class: "Accelerator"
    cloud.google.com/gke-accelerator: GPU_TYPE
    cloud.google.com/gke-accelerator-count: GPU_COUNT
  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: il tipo di hardware GPU. I valori consentiti sono i seguenti:
    • nvidia-h100-80gb: NVIDIA H100 (80 GB) (disponibile solo con la classe di calcolo Accelerator)
    • nvidia-a100-80gb: NVIDIA A100 (80GB)
    • nvidia-tesla-a100: NVIDIA A100 (40GB)
    • nvidia-l4: NVIDIA L4
    • nvidia-tesla-t4: NVIDIA T4
  • GPU_COUNT: il numero totale di GPU disponibili da collegare al nodo. Deve essere maggiore o uguale a GPU_QUANTITY e una quantità di GPU supportata per il tipo di GPU selezionato. Se ometti questo nodeSelector, Autopilot inserisce un pod su ogni nodo GPU.
  • GPU_QUANTITY: il numero di GPU da allocare al container. Deve essere minore o uguale a GPU_COUNT e una quantità di GPU supportata per il tipo di GPU selezionato.

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

Quando esegui il deployment di questo manifest, Autopilot installa automaticamente i driver NVIDIA predefiniti per la versione GKE del nodo. Nella versione 1.29.2-gke.1108000 e successive, facoltativamente puoi scegliere di installare la versione del driver più recente per quella versione di GKE aggiungendo il seguente selettore di nodi al file manifest:

spec:
  nodeSelector:
    cloud.google.com/gke-gpu-driver-version: "DRIVER_VERSION"

Sostituisci DRIVER_VERSION con uno dei seguenti valori:

  • default: il driver stabile predefinito per la versione GKE del tuo nodo. Se ometti il nodeSelector nel manifest, questa è l'opzione predefinita.
  • latest: l'ultima versione del driver disponibile per la versione GKE del tuo nodo.

Richieste di CPU e memoria per i pod GPU Autopilot

Quando definisci i pod GPU, devi anche richiedere risorse di CPU e memoria in modo che i container funzionino come previsto. Autopilot applica valori minimi, massimi e predefiniti di CPU e memoria specifici in base al tipo e alla quantità di GPU. Se esegui più pod GPU su un singolo nodo, specifica CPU e memoria. In caso contrario, verrà utilizzata per impostazione predefinita l'intera capacità del nodo. 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/compute-class: "Accelerator"
    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
        cpu: "54"
        memory: "54Gi"
      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
        cpu: "18"
        memory: "18Gi"
      requests:
        cpu: "18"
        memory: "18Gi"

Questo manifest specifica limits per le risorse di CPU e memoria. Se ometti limits per CPU o memoria in GKE versione 1.29.2-gke.1060000 e successive, GKE assegna ai pod la classe QoS Burstable e consente ai pod di eseguire il burst in risorse inutilizzate dalla somma delle richieste di risorse sul nodo. Per ulteriori informazioni, consulta Configurare il bursting dei pod in GKE.

Richieste di archiviazione temporanea per i pod GPU Autopilot

Puoi anche richiedere spazio di archiviazione temporaneo nei pod che richiedono spazio di archiviazione di breve durata. La massima archiviazione temporanea disponibile e il tipo di hardware di archiviazione utilizzato dipende dal tipo e dalla quantità di GPU richieste dai pod. Puoi utilizzare l'SSD locale per l'archiviazione temporanea se utilizzi GPU NVIDIA L4, la classe di computing Accelerator ed esegui la patch GKE 1.28.6-gke.1369000 e successive o 1.29.1-gke.1575000 e successive.

Per utilizzare SSD locale per l'archiviazione temporanea, aggiungi il nodeSelector cloud.google.com/gke-ephemeral-storage-local-ssd: "true" al manifest del carico di lavoro. Vedi il manifest di esempio in Utilizzare l'archiviazione temporanea basata su SSD locale con cluster Autopilot. Le GPU NVIDIA H100 (80 GB) e NVIDIA A100 (80 GB) utilizzano sempre SSD locali per l'archiviazione temporanea e non puoi specificare questo selettore di nodi per queste GPU.

Verifica l'allocazione delle GPU

Per verificare che un carico di lavoro GPU di cui è stato eseguito il deployment disponga delle GPU richieste, esegui questo comando:

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

Controlla la versione del driver GPU

Nei cluster Autopilot, GKE installa automaticamente i driver di dispositivi NVIDIA su tutti i nodi GPU. Per trovare la versione del driver installata da GKE nel tuo cluster, esegui questo comando:

kubectl logs --label=k8s-app=nvidia-gpu-device-plugin \
    --container="nvidia-gpu-device-plugin" \
    --tail=-1 \
    --namespace=kube-system | grep Driver

L'output è simile al seguente:

I1206 18:37:08.251742    5851 metrics.go:144] nvml initialized successfully. Driver version: 535.104.12

Come funziona l'allocazione delle GPU in Autopilot

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

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

Autopilot posiziona esattamente un pod GPU su ogni nodo GPU, nonché tutti i carichi di lavoro gestiti da GKE in esecuzione su tutti i nodi e qualsiasi DaemonSet configurato per tollerare tutte le incompatibilità dei nodi.

Esegui DaemonSet su ogni nodo

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

Per eseguire DaemonSet su ogni nodo nel tuo cluster, inclusi i nodi GPU, aggiungi la seguente tolleranza alla 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 DaemonSet su nodi GPU specifici nel tuo 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ò corrispondere a uno dei seguenti:

  • nvidia-h100-80gb: NVIDIA H100 (80 GB) (disponibile solo con la classe di calcolo Accelerator)
  • nvidia-a100-80gb: NVIDIA A100 (80GB)
  • nvidia-tesla-a100: NVIDIA A100 (40GB)
  • nvidia-l4: NVIDIA L4
  • nvidia-tesla-t4: NVIDIA T4

Casi d'uso delle GPU in Autopilot

Puoi allocare le GPU ai container nei pod Autopilot per facilitare i carichi di lavoro come quelli seguenti:

  • Inferenza del machine learning (ML)
  • Addestramento ML
  • Rendering

Quantità di GPU supportate

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

Quantità di GPU
NVIDIA L4
nvidia-l4
1, 2, 4, 8
NVIDIA T4
nvidia-tesla-t4
1, 2, 4
NVIDIA A100 (40GB)
nvidia-tesla-a100
1, 2, 4, 8, 16
NVIDIA A100 (80GB)
nvidia-a100-80gb
1, 2, 4, 8
NVIDIA H100 (80GB)
nvidia-h100-80gb
8

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

Monitora i nodi GPU

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

  • Duty Cycle (container/accelerator/duty_cycle): percentuale di tempo nell'ultimo periodo di campionamento (10 secondi) durante il quale l'acceleratore ha eseguito attivamente l'elaborazione. Tra 1 e 100.
  • Utilizzo memoria (container/accelerator/memory_used): quantità di memoria dell'acceleratore allocata in byte.
  • Capacità di memoria (container/accelerator/memory_total): memoria dell'acceleratore totale in byte.

Puoi usare dashboard predefinite per monitorare i cluster con nodi GPU. Per maggiori informazioni, consulta Visualizzare le metriche di osservabilità. Per informazioni generali sul monitoraggio dei cluster e delle relative risorse, consulta Osservabilità per GKE.

Visualizza le metriche di utilizzo per i carichi di lavoro

Puoi visualizzare le metriche di utilizzo delle GPU dei carichi di lavoro nella dashboard Carichi di lavoro della console Google Cloud.

Per visualizzare l'utilizzo delle GPU del carico di lavoro, segui questi passaggi:

  1. Vai alla pagina Carichi di lavoro nella console Google Cloud.

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

La dashboard Carichi di lavoro mostra i grafici relativi all'utilizzo e alla capacità della memoria GPU e al ciclo di servizio della GPU.

Visualizza le metriche di NVIDIA Data Center GPU Manager (DCGM)

Puoi raccogliere e visualizzare le metriche NVIDIA DCGM utilizzando Google Cloud Managed Service per Prometheus. Per i cluster Standard, devi installare i driver NVIDIA. Per i cluster Autopilot, GKE installa i driver.

Per istruzioni su come eseguire il deployment di DCGM e dell'esportatore DCGM di Prometheus, consulta NVIDIA Data Center GPU Manager (DCGM) nella documentazione di Google Cloud Observability.

Passaggi successivi