Esegui GPU nei pool di nodi GKE Standard


Questa pagina mostra come eseguire e ottimizzare i carichi di lavoro a elevato utilizzo di risorse di calcolo, come l'intelligenza artificiale (AI) e l'elaborazione grafica, collegando e utilizzando gli acceleratori hardware delle unità di elaborazione grafica (GPU) NVIDIA® nei nodi dei cluster Google Kubernetes Engine (GKE) Standard. Se invece utilizzi i pod Autopilot, consulta Esegui il deployment dei carichi di lavoro GPU in Autopilot.

Se vuoi eseguire il deployment di cluster con GPU NVIDIA B200 o NVIDIA H200 da 141 GB, consulta le seguenti risorse:

Panoramica

Con GKE, puoi creare node pool dotati di GPU. Le GPU forniscono potenza di calcolo per eseguire attività di deep learning come il riconoscimento delle immagini, l'elaborazione del linguaggio naturale, nonché altre attività ad alta intensità di calcolo come la transcodifica video e l'elaborazione delle immagini. In modalità GKE Standard, puoi collegare hardware GPU ai nodi dei cluster e poi allocare risorse GPU ai carichi di lavoro containerizzati in esecuzione su questi nodi.

Per saperne di più sui casi d'uso delle GPU, consulta la pagina GPU di Google Cloud. Per saperne di più sulle GPU in GKE e sulle differenze tra la modalità Standard e la modalità Autopilot, consulta la sezione Informazioni sulle GPU in GKE.

Puoi utilizzare le GPU anche con le VM spot se i tuoi workload possono tollerare interruzioni frequenti dei nodi. L'utilizzo di VM spot riduce il prezzo di esecuzione delle GPU. Per saperne di più, consulta Utilizzare le VM spot con i pool di nodi GPU.

A partire dalla versione 1.29.2-gke.1108000, ora puoi creare node pool GPU su GKE Sandbox. Per maggiori informazioni, consulta GKE Sandbox e Configurazione di 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 inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima versione eseguendo gcloud components update.

Requisiti per le GPU su GKE

Le GPU su GKE hanno i seguenti requisiti:

  • Versione di Kubernetes: le versioni disponibili dipendono dall'immagine del nodo utilizzata dalle GPU:

  • Quota GPU: devi disporre della quota GPU di Compute Engine nella zona selezionata prima di poter creare nodi GPU. Per assicurarti di disporre di una quota GPU sufficiente nel progetto, consulta la sezione Quote nella console Google Cloud .

    Se hai bisogno di una quota GPU aggiuntiva, devi richiedere una quota GPU nella console Google Cloud . Se hai un account di fatturazione stabilito, il tuo progetto riceve automaticamente la quota dopo l'invio della richiesta.

    Per impostazione predefinita, gli account di prova gratuita non ricevono una quota di GPU.

  • Driver GPU NVIDIA: quando crei un cluster o un pool di nodi, puoi indicare a GKE di installare automaticamente una versione del driver in base alla tua versione di GKE. Se non indichi a GKE di installare automaticamente i driver GPU, devi installarli manualmente.

  • GPU A100: le GPU A100 sono supportate solo sui tipi di macchine A2. Devi assicurarti di disporre di una quota sufficiente per il tipo di macchina A2 sottostante per utilizzare la GPU A100.

  • GPU sui nodi Ubuntu: se utilizzi GPU con nodi Ubuntu, si applicano i seguenti requisiti dei driver:

    • GPU L4 e GPU H100: versione 535 o successive del driver NVIDIA.

    • GPU H200: driver NVIDIA versione 550 o successive.

    • GPU B200: driver NVIDIA versione 570 o successive.

    Se una versione del driver richiesta o una versione successiva non è la versione predefinita nella tua versione di GKE, devi installare manualmente un driver supportato sui tuoi nodi.

Best practice:

Utilizza Container-Optimized OS per i nodi GPU. Container-Optimized OS include i driver necessari per supportare la versione specifica di GKE per i nodi GPU.

Limitazioni dell'utilizzo delle GPU su GKE

Prima di utilizzare le GPU su GKE, tieni presente le seguenti limitazioni:

Disponibilità delle GPU per regioni e zone

Le GPU sono disponibili in regioni e zone specifiche. Quando richiedi la quota GPU, considera le regioni in cui intendi eseguire i tuoi cluster.

Per un elenco completo delle regioni e delle zone applicabili, consulta GPU su Compute Engine.

Puoi anche visualizzare le GPU disponibili nella tua zona utilizzando Google Cloud CLI. Per visualizzare un elenco di tutti i tipi di acceleratori GPU supportati in ogni zona, esegui questo comando:

gcloud compute accelerator-types list

Prezzi

Per informazioni sui prezzi delle GPU, consulta la tabella dei prezzi nella pagina delle GPU Google Cloud .

Assicurati di disporre di una quota GPU sufficiente

La quota di GPU è il numero totale di GPU che possono essere eseguite nel tuo Google Cloud progetto. Per creare cluster con GPU, il progetto deve disporre di una quota GPU sufficiente.

La quota GPU deve essere almeno equivalente al numero totale di GPU che intendi eseguire nel cluster. Se abiliti la scalabilità automatica del cluster, devi richiedere una quota di GPU almeno equivalente al numero di GPU per nodo moltiplicato per il numero massimo di nodi del cluster.

Ad esempio, se crei un cluster con tre nodi che esegue due GPU per nodo, il tuo progetto richiede almeno sei quote GPU.

Richiesta di quota di GPU

Per richiedere una quota di GPU, utilizza la Google Cloud console. Per saperne di più sulla richiesta di quote, consulta Quote GPU nella documentazione di Compute Engine.

Per cercare la quota di GPU e inviare una richiesta di quota, utilizza la console Google Cloud :

  1. Vai alla pagina Quote di IAM e amministrazione nella console Google Cloud .

    Vai a Quote

  2. Nella casella Filtro, procedi nel seguente modo:

    1. Seleziona la proprietà Quota, inserisci il nome del modello di GPU e premi Invio.
    2. (Facoltativo) Per applicare filtri più avanzati per restringere i risultati, seleziona la proprietà Dimensioni (ad esempio, località), aggiungi il nome della regione o zona che stai utilizzando e premi Invio.
  3. Dall'elenco delle quote GPU, seleziona quella che vuoi modificare.

  4. Fai clic su Modifica quote. Si apre un modulo di richiesta.

  5. Compila il campo Nuovo limite di quota per ogni richiesta di quota.

  6. Compila il campo Descrizione della richiesta con i dettagli della richiesta.

  7. Fai clic su Avanti.

  8. Nella finestra di dialogo Conferma override, fai clic su Conferma.

  9. Nella schermata Dati di contatto, inserisci il tuo nome e un numero di telefono che gli approvatori potrebbero utilizzare per completare la richiesta di modifica della quota.

  10. Fai clic su Invia richiesta.

  11. Riceverai un'email di conferma per monitorare la modifica della quota.

Esecuzione di GPU nei cluster GKE Standard

Per eseguire GPU nei cluster GKE Standard, crea un node pool con GPU collegate.

Best practice:

Per migliorare il rapporto costo-efficienza, l'affidabilità e la disponibilità delle GPU su GKE, esegui le seguenti azioni:

  • Crea node pool GPU separati. Per ogni pool di nodi, limita la posizione del nodo alle zone in cui sono disponibili le GPU che ti interessano.
  • Abilita la scalabilità automatica in ogni pool di nodi.
  • Utilizza cluster regionali per migliorare la disponibilità replicando il control plane di Kubernetes in più zone della regione.
  • Configura GKE in modo che installi automaticamente i driver GPU predefiniti o più recenti sui pool di nodi, in modo da non dover installare e gestire manualmente le versioni dei driver.

Come descritto nelle sezioni seguenti, GKE utilizza le incompatibilità e le tolleranze dei nodi per garantire che i pod non vengano pianificati su nodi inappropriati.

Contrassegnare un pool di nodi GPU per evitare di pianificarlo in modo inappropriato

Un'incompatibilità dei nodi ti consente di contrassegnare un nodo in modo che lo scheduler ne eviti o impedisca l'utilizzo per determinati pod. In base agli scenari seguenti, GKE aggiunge automaticamente i taint oppure puoi aggiungerli manualmente:

  • Quando aggiungi un pool di nodi GPU a un cluster esistente che esegue già un pool di nodi non GPU, GKE applica automaticamente un taint ai nodi GPU con il seguente taint del nodo:

    • Chiave: nvidia.com/gpu
    • Effetto: NoSchedule

    GKE aggiunge questa contaminazione solo se nel cluster è presente almeno un pool di nodi non GPU.

  • Quando aggiungi un pool di nodi GPU a un cluster che ha solo pool di nodi GPU o se crei un nuovo cluster in cui il pool di nodi predefinito ha GPU collegate, puoi impostare manualmente i taint sul nuovo pool di nodi con i seguenti valori:

    • Chiave: nvidia.com/gpu
    • Effetto: NoSchedule
  • Quando in futuro aggiungerai un pool di nodi non GPU al cluster, GKE non applicherà retroattivamente questo taint ai nodi GPU esistenti. Devi impostare manualmente i taint per il nuovo pool di nodi.

Limitazione automatica della pianificazione con una tolleranza

Le tolleranze consentono di designare i pod che possono essere utilizzati su nodi "contaminati". GKE applica automaticamente una tolleranza in modo che solo i pod che richiedono GPU vengano pianificati sui nodi GPU. Ciò consente una scalabilità automatica più efficiente, in quanto i nodi GPU possono esserefare lo scale downi rapidamente se non ci sono pod sufficienti che richiedono GPU. Per farlo, GKE esegue il controller di ammissione ExtendedResourceToleration.

Crea un pool di nodi GPU

Per creare un pool di nodi GPU separato in un cluster esistente, puoi utilizzare la consoleGoogle Cloud o Google Cloud CLI. Puoi anche utilizzare Terraform per il provisioning dei cluster GKE e del pool di nodi GPU.

GKE supporta l'installazione automatica dei driver NVIDIA nei seguenti scenari:

  • Per i cluster GKE con versione del control plane 1.32.2-gke.1297000 e successive, GKE installa automaticamente la versione predefinita del driver NVIDIA per tutti i nodi GPU, inclusi quelli creati con il provisioning automatico dei nodi.
  • Per i cluster GKE con versione del control plane da 1.30.1-gke.1156000 a 1.32.2-gke.1297000, GKE installa automaticamente la versione predefinita del driver NVIDIA per i nodi non creati con il provisioning automatico dei nodi.
  • Se vuoi, puoi scegliere l'ultima versione del driver disponibile o disattivare esplicitamente l'installazione automatica dei driver. Nelle versioni precedenti alla 1.30.1-gke.1156000, GKE non installa un driver per impostazione predefinita se non specifichi una versione del driver quando crei o aggiorni il pool di nodi.

gcloud

Per creare un pool di nodi con GPU in un cluster, esegui questo comando:

gcloud container node-pools create POOL_NAME \
  --accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \
  --machine-type MACHINE_TYPE \
  --cluster CLUSTER_NAME \
  --location CONTROL_PLANE_LOCATION \
  --node-locations COMPUTE_ZONE1[,COMPUTE_ZONE2] \
  [--sandbox=type=gvisor]
  [--enable-autoscaling \
   --min-nodes MIN_NODES \
   --max-nodes MAX_NODES] \
  [--scopes=SCOPES] \
  [--service-account=SERVICE_ACCOUNT] \
  [--reservation-affinity=specific --reservation=RESERVATION_NAME]

Sostituisci quanto segue:

  • POOL_NAME: il nome che scegli per il pool di nodi.
  • GPU_TYPE: il tipo di acceleratore GPU che utilizzi. Ad esempio: nvidia-tesla-t4.
  • AMOUNT: il numero di GPU da collegare ai nodi nel pool di nodi.
  • DRIVER_VERSION: la versione del driver NVIDIA da installare. Può corrispondere a uno dei seguenti:

    • default: installa la versione del driver predefinita per la versione GKE del tuo nodo. In GKE versione 1.30.1-gke.1156000 e successive, se ometti il flag gpu-driver-version, questa è l'opzione predefinita. Nelle versioni precedenti, GKE non installa un driver se ometti questo flag.
    • latest: installa la versione più recente del driver disponibile per la tua versione di GKE. Disponibile solo per i nodi che utilizzano Container-Optimized OS.
    • disabled: salta l'installazione automatica del driver. Devi installare manualmente un driver dopo aver creato il pool di nodi. Nelle versioni di GKE precedenti alla 1.30.1-gke.1156000, questa è l'opzione predefinita.

    L'opzione gpu-driver-version è disponibile solo per GKE versione 1.27.2-gke.1200 e successive. Nelle versioni precedenti, ometti questo flag e installa manualmente un driver dopo aver creato il pool di nodi. Se esegui l'upgrade di un cluster o di pool di nodi esistente a questa versione o a una successiva, GKE installa automaticamente la versione del driver predefinita corrispondente alla versione GKE, a meno che non specifichi diversamente quando avvii l'upgrade.

  • MACHINE_TYPE: il tipo di macchina Compute Engine per i nodi. Obbligatorio per i seguenti tipi di GPU:

    • GPU NVIDIA B200 (corrispondenti al tipo di acceleratore nvidia-b200 e alla serie di macchine A4)
    • GPU NVIDIA H200 da 141 GB (corrispondenti al tipo di acceleratore nvidia-h200-141gb e al tipo di macchina A3 Ultra), GPU NVIDIA H100 da 80 GB (corrispondenti al tipo di acceleratore nvidia-h100-80gb e al tipo di macchina A3 High) o GPU NVIDIA H100 da 80 GB Mega (corrispondenti al tipo di acceleratore nvidia-h100-mega-80gb e al tipo di macchina A3 Mega). Per saperne di più, consulta la serie di macchine A3 nella documentazione di Compute Engine.
    • GPU NVIDIA A100 da 40 GB (corrispondenti al tipo di acceleratore nvidia-tesla-a100 e al tipo di macchina A2 Standard) o GPU NVIDIA A100 da 80 GB (corrispondenti al tipo di acceleratore nvidia-a100-80gb e al tipo di macchina A2 Ultra). Per saperne di più, consulta la serie di macchine A2 nella documentazione di Compute Engine.
    • GPU NVIDIA L4 (corrispondenti al tipo di acceleratore nvidia-l4 e alla serie di macchine G2).

    Per tutte le altre GPU, questo flag è facoltativo.

  • CLUSTER_NAME: il nome del cluster in cui creare ilpool di nodil.

  • CONTROL_PLANE_LOCATION: la posizione di Compute Engine del control plane del tuo cluster. Fornisci una regione per i cluster regionali o una zona per i cluster zonali.

  • COMPUTE_ZONE1,COMPUTE_ZONE2,[...]: le zone specifiche in cui GKE crea i nodi GPU. Le zone devono trovarsi nella stessa regione del cluster, specificata dal flag --location. I tipi di GPU che definisci devono essere disponibili in ogni zona selezionata. Se utilizzi una prenotazione, devi specificare le zone in cui la prenotazione ha capacità. Ti consigliamo di utilizzare sempre il flag --node-locations quando crei il pool di nodi per specificare la zona o le zone che contengono le GPU richieste.

  • Se vuoi, puoi creare node pool per eseguire carichi di lavoro in sandbox con gVisor. Per saperne di più, consulta la pagina GKE Sandbox per i dettagli.

  • MIN_NODES: il numero minimo di nodi per ogni zona nel pool di nodi in qualsiasi momento. Questo valore è pertinente solo se viene utilizzato il flag --enable-autoscaling.

  • MAX_NODES: il numero massimo di nodi per ogni zona nel pool di nodi in qualsiasi momento. Questo valore è pertinente solo se viene utilizzato il flag --enable-autoscaling.

  • Se vuoi, puoi creare il pool di nodi GPU utilizzando un account di servizio personalizzato aggiungendo i seguenti flag. Se omesso, il pool di nodi utilizza l'account di servizio predefinito di Compute Engine:

    • SERVICE_ACCOUNT: il nome del account di servizio IAM utilizzato dai nodi.
    • SCOPES: un elenco separato da virgole degli ambiti di accesso da concedere. Assicurati che uno degli ambiti sia storage-ro o https://www.googleapis.com/auth/devstorage.read_only. Per saperne di più sugli ambiti, consulta Impostare gli ambiti di accesso. Se ometti il flag scope, la creazione del pool di nodi GPU non riesce e viene visualizzato l'errore AccessDenied failed to download gpu_driver_versions.bin from GCS bucket.

  • RESERVATION_NAME: il nome della prenotazione GPU da utilizzare. Specifica il flag --reservation con --reservation-affinity=specific per utilizzare la capacità della GPU di una prenotazione specifica. Per saperne di più, consulta la sezione Utilizzo di una prenotazione specifica per un singolo progetto.

Ad esempio, il seguente comando crea un node pool con scalabilità automatica ad alta disponibilità, p100, con due GPU P100 per ogni nodo, nel cluster regionale p100-cluster. GKE installa automaticamente i driver predefiniti su questi nodi.

gcloud container node-pools create p100 \
  --accelerator type=nvidia-tesla-p100,count=2,gpu-driver-version=default \
  --cluster p100-cluster \
  --location us-central1 \
  --node-locations us-central1-c \
  --min-nodes 0 --max-nodes 5 --enable-autoscaling

Console

Per creare un pool di nodi con GPU:

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud .

    Vai a Google Kubernetes Engine

  2. Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.

  3. Fai clic su Aggiungi pool di nodi.

  4. (Facoltativo) Nella pagina Dettagli del pool di nodi, seleziona la casella di controllo Abilita scalabilità automatica.

  5. Configura il pool di nodi come preferisci.

  6. Nel riquadro di navigazione, seleziona Nodi.

  7. In Configurazione macchina, fai clic su GPU.

  8. Seleziona un Tipo di GPU e un Numero di GPU da eseguire su ogni nodo.

  9. Leggi l'avviso e seleziona Comprendo i limiti.

  10. Nella sezione Installazione del driver GPU, seleziona uno dei seguenti metodi:

    • Gestito da Google: GKE installa automaticamente un driver. Se selezioni questa opzione, scegli una delle seguenti dal menu a discesa Versione:
      • Predefinito: installa la versione del driver predefinita.
      • Più recente: installa l'ultima versione del driver disponibile.
    • Gestito dal cliente: GKE non installa un driver. Devi installare manualmente un driver compatibile seguendo le istruzioni riportate in Installazione dei driver di dispositivo GPU NVIDIA.
  11. Fai clic su Crea.

Terraform

Puoi creare un cluster regionale con Terraform con GPU utilizzando un modulo Terraform.

  1. Imposta le variabili Terraform includendo il seguente blocco nel file variables.tf:

    variable "project_id" {
      default     = PROJECT_ID
      description = "the gcp_name_short project where GKE creates the cluster"
    }
    
    variable "region" {
      default     = CLUSTER_REGION
      description = "the gcp_name_short region where GKE creates the cluster"
    }
    
    variable "zone" {
      default     = "COMPUTE_ZONE1,COMPUTE_ZONE2"
      description = "the GPU nodes zone"
    }
    
    variable "cluster_name" {
      default     = "CLUSTER_NAME"
      description = "the name of the cluster"
    }
    
    variable "gpu_type" {
      default     = "GPU_TYPE"
      description = "the GPU accelerator type"
    }
    
    variable "gpu_driver_version" {
      default = "DRIVER_VERSION"
      description = "the NVIDIA driver version to install"
    }
    
    variable "machine_type" {
      default = "MACHINE_TYPE"
      description = "The Compute Engine machine type for the VM"
    }
    

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto.
    • CLUSTER_NAME: il nome del cluster GKE.
    • CLUSTER_REGION: la regione di computing del cluster.
    • COMPUTE_ZONE1,COMPUTE_ZONE2,[...]: le zone specifiche in cui GKE crea i nodi GPU. Le zone devono trovarsi nella stessa regione specificata dalla variabile region. Queste zone devono avere a disposizione i tipi di GPU che hai definito. Per scoprire quali zone dispongono di GPU, consulta la sezione Disponibilità. Devi utilizzare la variabile node_locations quando crei il pool di nodi GPU per specificare la zona o le zone contenenti le GPU richieste.
    • GPU_TYPE: il tipo di acceleratore GPU che utilizzi. Ad esempio: nvidia-tesla-t4.
    • DRIVER_VERSION: la versione del driver GPU da installare automaticamente in GKE. Questo campo è facoltativo. Sono supportati i seguenti valori:

      • INSTALLATION_DISABLED: disabilita l'installazione automatica dei driver GPU. Per eseguire le GPU, devi installare manualmente i driver. Nelle versioni di GKE precedenti alla 1.30.1-gke.1156000, questa è l'opzione predefinita se ometti questo campo.
      • DEFAULT: installa automaticamente la versione del driver predefinita per la versione del sistema operativo del nodo. In GKE 1.30.1-gke.1156000 e versioni successive, se ometti questo campo, questa è l'opzione predefinita. Nelle versioni precedenti, GKE non installa un driver se ometti questo campo.
      • LATEST: installa automaticamente l'ultima versione del driver disponibile per la versione del sistema operativo del nodo. Disponibile solo per i nodi che utilizzano Container-Optimized OS.

      Se ometti questo campo, GKE non installa automaticamente un driver. Questo campo non è supportato nei pool di nodi che utilizzano il provisioning automatico dei nodi. Per installare manualmente un driver, consulta la sezione Installare manualmente i driver GPU NVIDIA in questo documento.

    • MACHINE_TYPE: il tipo di macchina Compute Engine per i nodi. Obbligatorio per i seguenti tipi di GPU:

      • GPU NVIDIA B200 (corrispondenti al tipo di acceleratore nvidia-b200 e alla serie di macchine A4)
      • GPU NVIDIA H200 da 141 GB (corrispondenti al tipo di acceleratore nvidia-h200-141gb e al tipo di macchina A3 Ultra), GPU NVIDIA H100 da 80 GB (corrispondenti al tipo di acceleratore nvidia-h100-80gb e al tipo di macchina A3 High) o GPU NVIDIA H100 da 80 GB Mega (corrispondenti al tipo di acceleratore nvidia-h100-mega-80gb e al tipo di macchina A3 Mega). Per saperne di più, consulta la serie di macchine A3 nella documentazione di Compute Engine.
      • GPU NVIDIA A100 da 40 GB (corrispondenti al tipo di acceleratore nvidia-tesla-a100 e al tipo di macchina A2 Standard) o GPU NVIDIA A100 da 80 GB (corrispondenti al tipo di acceleratore nvidia-a100-80gb e al tipo di macchina A2 Ultra). Per saperne di più, consulta la serie di macchine A2 nella documentazione di Compute Engine.
      • GPU NVIDIA L4 (corrispondenti al tipo di acceleratore nvidia-l4 e alla serie di macchine G2).

      Per tutte le altre GPU, questo flag è facoltativo.

  2. Aggiungi il seguente blocco alla configurazione Terraform:

    provider "google" {
      project = var.project_id
      region  = var.region
    }
    
    resource "google_container_cluster" "ml_cluster" {
      name     = var.cluster_name
      location = var.region
      node_locations = [var.zone]
    }
    
    resource "google_container_node_pool" "gpu_pool" {
      name       = google_container_cluster.ml_cluster.name
      location   = var.region
      cluster    = google_container_cluster.ml_cluster.name
      node_count = 3
    
      autoscaling {
        total_min_node_count = "1"
        total_max_node_count = "5"
      }
    
      management {
        auto_repair  = "true"
        auto_upgrade = "true"
      }
    
      node_config {
        oauth_scopes = [
          "https://www.googleapis.com/auth/logging.write",
          "https://www.googleapis.com/auth/monitoring",
          "https://www.googleapis.com/auth/devstorage.read_only",
          "https://www.googleapis.com/auth/trace.append",
          "https://www.googleapis.com/auth/service.management.readonly",
          "https://www.googleapis.com/auth/servicecontrol",
        ]
    
        labels = {
          env = var.project_id
        }
    
        guest_accelerator {
          type  = var.gpu_type
          count = 1
          gpu_driver_installation_config {
            gpu_driver_version = var.gpu_driver_version
          }
        }
    
        image_type   = "cos_containerd"
        machine_type = var.machine_type
        tags         = ["gke-node", "${var.project_id}-gke"]
    
        disk_size_gb = "30"
        disk_type    = "pd-standard"
    
        metadata = {
          disable-legacy-endpoints = "true"
        }
      }
    }
    

Terraform chiama le API Google Cloud per impostare la creazione di un nuovo cluster con un pool di nodi che utilizza le GPU. Il pool di nodi inizialmente ha tre nodi e la scalabilità automatica è abilitata. Per scoprire di più su Terraform, consulta la specifica della risorsa google_container_node_pool su terraform.io.

Best practice:

Per evitare di incorrere in ulteriori costi, rimuovi tutte le risorse definite nel file di configurazione utilizzando il comando terraform destroy.

Best practice: puoi anche creare un nuovo cluster con GPU e specificare le zone utilizzando il flag --node-locations. Tuttavia, ti consigliamo di creare un pool di nodi GPU separato in un cluster esistente, come mostrato in questa sezione.

Installa manualmente i driver GPU NVIDIA

Puoi installare manualmente i driver GPU NVIDIA sui nodi eseguendo il deployment di un DaemonSet di installazione su questi nodi. Utilizza l'installazione manuale nelle seguenti situazioni:

  • Hai scelto di disattivare l'installazione automatica dei driver del dispositivo quando hai creato un pool di nodi GPU.
  • Utilizzi una versione di GKE precedente alla versione minima supportata per l'installazione automatica.
  • Il tuo carico di lavoro richiede una versione specifica del driver NVIDIA che non è disponibile come driver predefinito o più recente con installazione automatica. Ad esempio, utilizzando le GPU con Confidential GKE Nodes (anteprima).
Best practice:

Utilizza l'installazione automatica dei driver, se possibile. Per farlo, specifica l'opzione gpu-driver-version nel flag --accelerator quando crei il cluster standard. Se hai utilizzato DaemonSet di installazione per installare manualmente i driver GPU entro il 25 gennaio 2023, potresti dover riapplicare DaemonSet per ottenere una versione che ignora i nodi che utilizzano l'installazione automatica dei driver.

Per eseguire il DaemonSet di installazione, il pool di nodi GPU richiede l'ambito https://www.googleapis.com/auth/devstorage.read_only per comunicare con Cloud Storage. Senza questo ambito, il download del manifest del DaemonSet di installazione non riesce. Questo ambito è uno degli ambiti predefiniti, che viene in genere aggiunto quando crei il cluster.

Le seguenti istruzioni mostrano come installare i driver sui nodi Container-Optimized OS (COS) e Ubuntu e utilizzando Terraform.

COS

  • Per eseguire il deployment di DaemonSet di installazione e installare la versione predefinita del driver GPU, esegui il seguente comando:

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml
    
  • Per installare una versione più recente del driver GPU dalla tabella delle versioni dei driver in questa sezione, esegui il seguente comando:

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded-latest.yaml
    
  • Per installare una versione del driver GPU che supporti l'esecuzione di carichi di lavoro GPU su Confidential GKE Nodes (anteprima), esegui il seguente comando:

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/refs/heads/master/nvidia-driver-installer/cos/daemonset-confidential.yaml
    

Il completamento dell'installazione richiede alcuni secondi. Al termine dell'installazione, il plug-in del dispositivo GPU NVIDIA utilizza l'API Kubernetes per rendere disponibile la capacità della GPU NVIDIA.

Ogni versione di Container-Optimized OS ha almeno una versione del driver GPU NVIDIA supportata. Per saperne di più sulla versione del driver predefinita supportata, consulta le note di rilascio per la milestone LTS di Container-Optimized OS.

La tabella seguente elenca le versioni dei driver disponibili in ciascuna versione di GKE:

Versioni del driver NVIDIA per GKE
1,30 R535 (impostazione predefinita) o R550
1,29 R535 (impostazione predefinita) o R550
1,28 R535 (impostazione predefinita) o R550
1,27 R470 (predefinito), R525, R535 o R550
1,26 R470 (predefinito), R525, R535 o R550

Ubuntu

Il DaemonSet di installazione che esegui il deployment dipende dal tipo di GPU e dalla versione del nodo GKE come segue:

  • Per tutte le GPU tranne le GPU NVIDIA H200, esegui il seguente comando:

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded.yaml
    
  • Per le GPU NVIDIA H200, installa il driver R550:

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/refs/heads/master/nvidia-driver-installer/ubuntu/daemonset-preloaded-R550.yaml
    

Il completamento dell'installazione richiede alcuni secondi. Una volta installato, il plug-in del dispositivo GPU NVIDIA utilizza l'API Kubernetes per rendere disponibile la capacità della GPU NVIDIA.

La tabella seguente elenca le versioni dei driver disponibili in ciascuna versione di GKE:

Driver GPU Ubuntu e versioni di GKE
1,30 R470 o R535
1,29 R470 o R535
1,28 R470 o R535
1,27 R470 o R535
1,26 R470 o R535

Terraform

Puoi utilizzare Terraform per installare la versione predefinita del driver della GPU in base al tipo di nodi. In entrambi i casi, devi configurare il tipo di risorsa Terraform kubectl_manifest.

  • Per installare DaemonSet su COS, aggiungi il seguente blocco alla configurazione Terraform:

      data "http" "nvidia_driver_installer_manifest" {
        url = "https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml"
      }
    
      resource "kubectl_manifest" "nvidia_driver_installer" {
        yaml_body = data.http.nvidia_driver_installer_manifest.body
      }
    
  • Per installare DaemonSet su Ubuntu, aggiungi il seguente blocco alla configurazione Terraform:

      data "http" "nvidia_driver_installer_manifest" {
        url = "https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded.yaml"
      }
    
      resource "kubectl_manifest" "nvidia_driver_installer" {
        yaml_body = data.http.nvidia_driver_installer_manifest.body
      }
    

Installazione dei driver utilizzando il provisioning automatico dei nodi con GPU

Quando utilizzi il provisioning automatico dei nodi con le GPU, per impostazione predefinita i pool di nodi di cui è stato eseguito il provisioning automatico non dispongono di ambiti sufficienti per installare i driver. Per concedere gli ambiti richiesti, modifica gli ambiti predefiniti per il provisioning automatico dei nodi in modo da aggiungere logging.write, monitoring, devstorage.read_only e compute, come nell'esempio seguente.

gcloud container clusters update CLUSTER_NAME --enable-autoprovisioning \
    --min-cpu=1 --max-cpu=10 --min-memory=1 --max-memory=32 \
    --autoprovisioning-scopes=https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring,https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/compute

Per i cluster che eseguono GKE versione 1.32.2-gke.1297000 e successive, GKE installa automaticamente la versione predefinita del driver NVIDIA per tutti i nodi GPU, inclusi quelli creati con il provisioning automatico dei nodi. Puoi saltare le seguenti istruzioni per i cluster che eseguono GKE versione 1.32.2-gke.1297000 e successive.

In GKE versione 1.29.2-gke.1108000 e successive, puoi selezionare una versione del driver GPU da installare automaticamente in GKE nei nodi GPU di cui è stato eseguito il provisioning automatico. Aggiungi il seguente campo 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 tuo nodo.
  • latest: l'ultima versione del driver disponibile per la versione di GKE del tuo nodo.
  • disabled: disattiva l'installazione automatica dei driver GPU. Se selezioni questo valore, devi installare manualmente i driver per eseguire le GPU. Nelle versioni di GKE precedenti alla 1.32.2-gke.1297000, questa è l'opzione predefinita se ometti il selettore di nodi.

Per saperne di più sul provisioning automatico, vedi Utilizzo del provisioning automatico dei nodi.

Configurazione dei pod per l'utilizzo delle GPU

Utilizzi un limite di risorse per configurare i pod in modo che consumino le GPU. Specifichi un limite di risorse in una specifica del pod utilizzando la seguente coppia chiave-valore

  • Chiave: nvidia.com/gpu
  • Valore:numero di GPU da utilizzare

alpha.kubernetes.io/nvidia-gpu non è supportato come nome risorsa in GKE. Utilizza invece nvidia.com/gpu come nome della risorsa.

Il seguente manifest è un esempio di specifica del pod che utilizza le GPU:

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  # Optional: Use GKE Sandbox
  # runtimeClassName: gvisor
  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: 2

Utilizzo di più tipi di GPU

Se vuoi utilizzare più tipi di acceleratori GPU per cluster, devi creare più pool di nodi, ognuno con il proprio tipo di acceleratore. GKE collega un selettore di nodi univoco ai nodi GPU per facilitare il posizionamento dei carichi di lavoro GPU sui nodi con tipi di GPU specifici:

  • Chiave: cloud.google.com/gke-accelerator
  • Valore:il tipo di acceleratore GPU che utilizzi. Ad esempio: nvidia-tesla-t4.

Puoi scegliere come target tipi specifici di GPU aggiungendo questo selettore di nodi alla specifica del pod del tuo workload. Ad esempio:

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  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: 2
  nodeSelector:
    cloud.google.com/gke-accelerator: nvidia-tesla-t4

Esegui l'upgrade dei node pool utilizzando gli acceleratori (GPU e TPU)

GKE esegue automaticamente l'upgrade dei cluster Standard, inclusi i node pool. Puoi anche eseguire l'upgrade manuale dei pool di nodi se vuoi che i tuoi nodi utilizzino una versione successiva prima. Per controllare il funzionamento degli upgrade per il tuo cluster, utilizza i canali di rilascio, i periodi di manutenzione e le esclusioni e il sequenziamento del rollout.

Puoi anche configurare una strategia di upgrade dei nodi per il tuo pool di nodi, ad esempio upgrade di incremento, upgrade blue-green o upgrade di breve durata. Configurando queste strategie, puoi assicurarti che i pool di nodi vengano sottoposti a upgrade in modo da ottenere l'equilibrio ottimale tra velocità e interruzione per il tuo ambiente. Per i node pool TPU multi-host, anziché utilizzare la strategia di upgrade dei nodi configurata, GKE ricrea in modo atomico l'intero pool di nodi in un unico passaggio. Per scoprire di più, consulta la definizione di atomicità nella sezione Terminologia relativa a TPU in GKE.

L'utilizzo di una strategia di upgrade dei nodi richiede temporaneamente a GKE di eseguire il provisioning di risorse aggiuntive, a seconda della configurazione. Se Google Cloud ha una capacità limitata per le risorse del pool di nodi, ad esempio se visualizzi errori di disponibilità delle risorse quando tenti di creare più nodi con GPU o TPU, consulta Eseguire l'upgrade in un ambiente con risorse limitate.

Informazioni sulle librerie NVIDIA CUDA-X

CUDA è la piattaforma di calcolo parallelo e il modello di programmazione di NVIDIA per le GPU. Per utilizzare le applicazioni CUDA, l'immagine che utilizzi deve contenere le librerie. Per aggiungere le librerie NVIDIA CUDA-X, puoi creare e utilizzare la tua immagine includendo i seguenti valori nella variabile di ambiente LD_LIBRARY_PATH nella specifica del container:

  • /usr/local/cuda-CUDA_VERSION/lib64: la posizione delle librerie NVIDIA CUDA-X sul nodo.

    Sostituisci CUDA_VERSION con la versione dell'immagine CUDA-X che hai utilizzato. Alcune versioni contengono anche utilità di debug in /usr/local/nvidia/bin. Per maggiori dettagli, vedi l'immagine NVIDIA CUDA su DockerHub.

    Per controllare la versione minima del driver GPU richiesta per la tua versione di CUDA, consulta CUDA Toolkit and Compatible Driver Versions.

  • /usr/local/nvidia/lib64: la posizione dei driver del dispositivo NVIDIA.
Assicurati che la versione della patch GKE in esecuzione sui tuoi nodi includa una versione del driver GPU compatibile con la versione CUDA che hai scelto. Per un elenco delle versioni dei driver GPU associate alla versione di GKE, consulta la pagina di Container-Optimized OS corrispondente collegata nella tabella delle versioni attuali di GKE.

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, vedi 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 Google Cloud .

Per visualizzare l'utilizzo della GPU del tuo workload:

  1. Vai alla pagina Workload nella console Google 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 di NVIDIA Data Center GPU Manager (DCGM).

Configura l'arresto controllato dei nodi GPU

Nei cluster GKE con il piano di controllo in esecuzione 1.29.1-gke.1425000 o versioni successive, i nodi GPU supportano i segnali SIGTERM che avvisano il nodo di un arresto imminente. La notifica di arresto imminente è configurabile fino a 60 minuti nei nodi GPU.

Per configurare GKE in modo da terminare i carichi di lavoro in modo controllato entro questo periodo di tempo di notifica, segui i passaggi descritti in Gestire l'interruzione dei nodi GKE per GPU e TPU.

Passaggi successivi