Esegui il deployment dei carichi di lavoro GPU in Autopilot


Questa pagina mostra come richiedere GPU per accelerare le attività nei tuoi carichi di lavoro Google Kubernetes Engine (GKE) Autopilot. Questa pagina descrive anche come Autopilot esegue le GPU, come cambia il modello di prezzi a seconda della versione di GKE, come impostare le richieste e i limiti delle risorse dei pod e come monitorare i carichi di lavoro GPU.

Questa pagina è rivolta agli amministratori e agli operatori della piattaforma e agli specialisti di dati e AI che vogliono richiedere GPU per carichi di lavoro che eseguono attività come l'addestramento o l'inferenza di machine learning (ML). Per scoprire di più sui ruoli, sulle responsabilità e sulle attività di esempio comuni a cui facciamo riferimento nei contenuti di Trusted Cloud , consulta la pagina Ruoli e attività comuni degli utenti di GKE Enterprise.

Prima di procedere, assicurati di avere familiarità con i seguenti concetti:

Selezionare gli acceleratori nei pod

Autopilot utilizza la classe di computing specializzata Accelerator per eseguire i pod GPU. Con questa classe di calcolo, GKE posiziona i pod sui nodi GPU, fornendo ai pod l'accesso a funzionalità avanzate sulla macchina virtuale (VM). Per utilizzare questa classe in un carico di lavoro GPU, esegui una delle seguenti azioni a seconda della versione di GKE:

  • Versione 1.29.4-gke.1427000 e successive: richiedi GPU nel manifest del carico di lavoro. Puoi anche utilizzare funzionalità di condivisione della GPU, come il time-sharing. GKE non modifica i manifest dei workload per aggiungere un selettore di nodi o un'annotazione per la classe di acceleratori.
  • Versioni da 1.29 fino alla versione 1.29.4-gke.142700 inclusa: specifica il selettore di nodi cloud.google.com/compute-class: Accelerator nel manifest del pod e richiedi le GPU. Se specifichi questo selettore di nodi, puoi anche utilizzare le funzionalità di condivisione della GPU, come la condivisione del tempo.
  • Versioni 1.28.9-gke.1069000 fino alla versione 1.29 inclusa: specifica il selettore di nodi cloud.google.com/compute-class: Accelerator nel manifest del pod insieme ai selettori GPU. Se specifichi questo selettore di nodi, puoi anche utilizzare le funzionalità di condivisione della GPU, come la condivisione a tempo.

La classe di calcolo Accelerator non è supportata nelle versioni precedenti a 1.28.9-gke.1069000. GKE tratta i pod GPU su queste versioni in modo simile agli altri pod Autopilot e ti viene addebitato l'importo delle richieste di risorse. Per i dettagli, consulta la pagina Prezzi.

Compatibilità degli acceleratori con le funzionalità di GKE

La seguente tabella mostra le funzionalità GKE compatibili per ogni metodo di selezione degli acceleratori in GKE Autopilot:

Accelerator classe di computing selezionata Compatibilità con le funzionalità di GKE

Prezzi

La tabella seguente descrive in che modo il modello di fatturazione utilizzato da GKE dipende dalla versione GKE del cluster. Per una descrizione dei modelli di fatturazione di GKE Autopilot, consulta Prezzi di Autopilot.

Versione GKE Prezzi
1.29.4-gke.1427000 e versioni successive

Modello di fatturazione basato sui nodi. Tutti i pod GPU utilizzano la classe di calcolo Accelerator. Ti viene addebitato l'hardware Compute Engine che esegue i tuoi carichi di lavoro GPU, oltre a un premio Autopilot per la gestione e la scalabilità dei nodi. Per i dettagli, consulta Prezzi della modalità Autopilot.

Dalla versione 1.29 fino alla versione 1.29.4-gke.1427000 esclusa

Il modello di fatturazione dipende dai selettori di nodi specificati, come segue:

  • cloud.google.com/compute-class: Accelerator: utilizza il modello di fatturazione basato sui nodi e la classe di calcolo degli acceleratori.
  • Nessun selettore di classe di calcolo: utilizza il modello di fatturazione basato sui pod.

Puoi utilizzare funzionalità come GPU multi-istanza o condivisione del tempo solo se specifichi esplicitamente il selettore di nodi cloud.google.com/compute-class: Accelerator.

Per maggiori dettagli, consulta la sezione "Pod con requisiti hardware specifici" nella pagina Prezzi di Kubernetes Engine.

Dalla versione 1.28.6-gke.1095000 fino alla versione 1.29 esclusa

Modello di fatturazione basato sui nodi, indipendentemente dal fatto che tu specifichi la classe di calcolo dell'acceleratore nei manifest dei pod.

Puoi utilizzare funzionalità come GPU multi-istanza o condivisione del tempo solo se specifichi esplicitamente il selettore di nodi cloud.google.com/compute-class: Accelerator.

Per maggiori dettagli, consulta la sezione "Pod con requisiti hardware specifici" nella pagina Prezzi di Kubernetes Engine.

Versioni precedenti alla 1.28.6-gke.1095000

Modello di fatturazione basato sui pod. La fatturazione viene effettuata in base alle richieste di risorse del pod GPU. Per maggiori dettagli, consulta la sezione "Pod con requisiti hardware specifici" nella pagina Prezzi di Kubernetes Engine.

Tieni presente le seguenti considerazioni sui prezzi per le GPU Autopilot:

  • Tutti i nodi GPU A100 (80 GB) utilizzano SSD locali per i dischi di avvio dei nodi a dimensioni fisse in base al numero di GPU. Le unità SSD locali collegate vengono fatturate separatamente. Questi prezzi non si applicano alle GPU A100 (40 GB).

  • I prezzi di GKE Sandbox sono gli stessi di quelli predefiniti di Autopilot. Per saperne di più sul sandboxing dei carichi di lavoro dell'acceleratore, consulta GKE Sandbox e Introduzione a GKE Sandbox.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:

  • Attiva l'API Google Kubernetes Engine.
  • Attiva l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installala e poi inizializzala. Se hai già installato gcloud CLI, scarica l'ultima versione eseguendo gcloud components update.
  • Assicurati di avere un cluster GKE Autopilot che esegue una delle seguenti versioni:

    • Classe di computing con acceleratore: qualsiasi versione patch di 1.28 a partire da 1.28.6-gke.1095000
      • GPU NVIDIA B200 (180 GB): 1.32.2-gke.1422000 o versioni successive
      • GPU NVIDIA H200 (141 GB): 1.31.4-gke.1183000 o versioni successive
      • GPU NVIDIA H100 Mega (80 GB): 1.28.9-gke.1250000 o versioni successive e 1.29.4-gke.1542000 o versioni successive
      • 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 selezione della classe di computing:

      • GPU NVIDIA L4: 1.28.3-gke.1203000 o versioni successive
      • GPU NVIDIA A100 (80 GB): 1.27 o versioni successive
  • Assicurati di disporre di quote GPU sufficienti disponibili nel tuo 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 una quota di GPU aggiuntiva, richiedi un aggiustamento della quota.

Limitazioni

  • Le GPU in time-sharing e le GPU multi-istanza sono disponibili con Autopilot su GKE versione 1.29.3-gke.1093000 e successive.
  • La disponibilità delle GPU dipende dalla Trusted Cloud by S3NS regione del cluster Autopilot e dalla 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 questa capacità.
  • Per le versioni di GKE precedenti alla 1.29.2-gke.1355000, se richiedi esplicitamente un nodo GPU esistente specifico per il tuo pod, il pod deve utilizzare 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 rientrino in un singolo nodo, la somma delle richieste di GPU per questi pod deve essere inferiore o uguale al numero di risorse GPU collegate a quel nodo. Ad esempio, un nodo con un gke-accelerator-count di 4 può ospitare fino a quattro pod che richiedono una GPU ciascuno.

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

  • Hai prenotazioni di capacità per tipi di macchine con acceleratore di grandi dimensioni ed esegui carichi di lavoro con una sola GPU, quindi il deployment di un pod per nodo sprecherebbe le altre GPU della macchina
  • Hai carichi di lavoro GPU che devono essere eseguiti sullo stesso host

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

Richiedere GPU nei container

Per richiedere risorse GPU per i tuoi container, aggiungi i seguenti campi alla specifica del pod. A seconda dei requisiti del tuo workload, puoi omettere facoltativamente il selettore cloud.google.com/gke-accelerator-count.

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  # Optional: Use GKE Sandbox
  # runtimeClassName: gvisor
  nodeSelector:
    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-b200: NVIDIA B200 (180GB)
    • nvidia-h200-141gb: NVIDIA H200 (141GB)
    • nvidia-h100-mega-80gb: NVIDIA H100 Mega (80GB)
    • nvidia-h100-80gb: NVIDIA H100 (80GB)
    • 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 a una quantità di GPU supportata per il tipo di GPU selezionato. Se ometti questo nodeSelector, Autopilot posiziona un pod su ogni nodo GPU.
  • GPU_QUANTITY: il numero di GPU da allocare al container. Deve essere inferiore o uguale a GPU_COUNT e a una quantità di GPU supportata per il tipo di GPU selezionato.
  • Facoltativo runtimeClassname: gvisor: l'impostazione che consente di eseguire questo pod in GKE Sandbox. Per utilizzarlo, rimuovi il commento da questa riga. Per saperne di più, consulta GKE Sandbox.

Per informazioni dettagliate su come viene fatturato l'utilizzo degli acceleratori in modalità Autopilot, consulta la sezione Prezzi.

Devi specificare sia il tipo di GPU sia 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, puoi scegliere facoltativamente di installare l'ultima versione del driver per quella versione di GKE aggiungendo il seguente selettore di nodi al 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 nodo. Se ometti nodeSelector nel manifest, questa è l'opzione predefinita.
  • latest: la versione del driver più recente disponibile per la versione GKE del nodo.

Richiedere CPU e memoria per i pod GPU Autopilot

Quando definisci i tuoi pod GPU, devi anche richiedere risorse CPU e memoria in modo che i tuoi container funzionino come previsto. Autopilot applica valori minimi, massimi e predefiniti specifici per CPU e memoria in base al tipo e alla quantità di GPU. Se esegui più pod GPU su un singolo nodo, specifica la CPU e la memoria, altrimenti viene utilizzata l'intera capacità del nodo. Per maggiori dettagli, consulta la sezione Richieste di risorse in Autopilot.

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

apiVersion: v1
kind: Pod
metadata:
  name: t4-pod
spec:
  # Optional: Use GKE Sandbox
  # runtimeClassName: gvisor
  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
        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"
  • Facoltativo runtimeClassname: gvisor: l'impostazione che consente di eseguire questo pod in GKE Sandbox. Per utilizzarlo, rimuovi il commento da questa riga. Per saperne di più, consulta GKE Sandbox.

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 tuoi pod la classe QoS Burstable e consente ai tuoi pod di utilizzare le risorse inutilizzate dalla somma delle richieste di risorse sul nodo. Per maggiori informazioni, consulta la pagina Configurare il bursting dei pod in GKE.

Richiedere spazio di archiviazione temporanea per i pod GPU Autopilot

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

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

Verificare l'allocazione delle GPU di cui è stato eseguito il deployment

Per verificare che un carico di lavoro GPU di cui è stato eseguito il deployment disponga delle GPU richieste, esegui il seguente 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
    ...
...

Controllare la versione del driver GPU

Nei cluster Autopilot, GKE installa automaticamente i driver del dispositivo NVIDIA su tutti i nodi GPU. Per trovare la versione del driver che GKE ha installato nel cluster, esegui questo comando:

kubectl logs --selector=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 e aver 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 facilitare l'hardware.
  2. Autopilot aggiunge taint dei nodi al nodo GPU e aggiunge le tolleranze corrispondenti al pod. In questo modo, GKE non pianifica altri pod sul nodo GPU.

Autopilot inserisce esattamente un pod GPU su ogni nodo GPU, nonché tutti i carichi di lavoro gestiti da GKE che vengono eseguiti su tutti i nodi e tutti i DaemonSet che configuri in modo da tollerare tutti i taint 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 del cluster. Puoi configurare questi DaemonSet in modo che ignorino le incompatibilità dei nodi, in modo che GKE posizioni questi workload su ogni nodo.

Per eseguire DaemonSet su ogni nodo del 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

Sostituisci IMAGE_PATH con il percorso dell'immagine del container.

Per eseguire 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 uno dei seguenti:

  • nvidia-b200: NVIDIA B200 (180GB)
  • nvidia-h200-141gb: NVIDIA H200 (141GB)
  • nvidia-h100-mega-80gb: NVIDIA H100 Mega (80GB)
  • nvidia-h100-80gb: NVIDIA H100 (80GB)
  • 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 GPU ai container nei pod Autopilot per facilitare carichi di lavoro come i seguenti:

  • Inferenza di machine learning (ML)
  • Addestramento 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à 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
1, 2, 4, 8
NVIDIA H100 Mega (80GB)
nvidia-h100-mega-80gb
8
NVIDIA H200 (141GB)
nvidia-h200-141gb
8
NVIDIA B200 (180GB)
nvidia-b200
8

Monitorare il rendimento del carico di lavoro del nodo GPU

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

  • Ciclo di lavoro (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à memoria (container/accelerator/memory_total): Memoria acceleratore totale, in byte.

Queste metriche si applicano a livello di container (container/accelerator) e non vengono raccolte per i container pianificati su una GPU che utilizza la condivisione del tempo della GPU o NVIDIA MPS.

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

Visualizzare le metriche di utilizzo per i workload

Puoi visualizzare le metriche di utilizzo della GPU del carico di lavoro dalla dashboard Workload nella console Trusted Cloud .

Per visualizzare l'utilizzo della GPU del tuo workload:

  1. Vai alla pagina Workload nella console Trusted Cloud .

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

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

Visualizzare le metriche NVIDIA Data Center GPU Manager (DCGM)

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

Per istruzioni su come eseguire il deployment del pacchetto DCGM gestito da GKE, consulta Raccogliere e visualizzare le metriche NVIDIA Data Center GPU Manager (DCGM).

Passaggi successivi