Esegui GPU in pool di nodi GKE Standard


Questa pagina mostra come eseguire e ottimizzare i carichi di lavoro ad alta intensità di calcolo, come l'intelligenza artificiale (AI) e l'elaborazione grafica, collegando e utilizzando gli acceleratori hardware GPU NVIDIA® nei nodi dei cluster Google Kubernetes Engine (GKE) Standard.

Se invece utilizzi pod Autopilot, consulta Eseguire il deployment dei carichi di lavoro GPU in Autopilot.

Panoramica

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

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

Puoi anche utilizzare GPU con VM spot se i tuoi carichi di lavoro possono tollerare frequenti interruzioni dei nodi. L'utilizzo delle VM spot riduce il prezzo dell'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, puoi creare pool di nodi GPU su GKE Sandbox. Per ulteriori informazioni, consulta GKE Sandbox e Configurazione di GKE Sandbox.

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.

Requisiti per le GPU su GKE

Le GPU su GKE hanno i seguenti requisiti:

  • Versione di Kubernetes: per i pool di nodi che utilizzano l'immagine del nodo Container-Optimized OS, i nodi GPU sono disponibili in GKE versione 1.9 o successive. Per i pool di nodi che utilizzano l'immagine dei nodi Ubuntu, i nodi GPU sono disponibili con GKE versione 1.11.3 o successiva.
  • Quota GPU: per poter creare nodi GPU, devi avere una quota GPU di Compute Engine nella zona selezionata. Per assicurarti di disporre di una quota GPU sufficiente nel tuo progetto, consulta Quote nella console Google Cloud.

    Se hai bisogno di un'ulteriore quota GPU, devi richiedere una quota GPU nella console Google Cloud. Se hai già un account di fatturazione, il progetto dovrebbe ricevere automaticamente la quota dopo che invii la richiesta di quota.

  • 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 versione di GKE. Se non indichi a GKE di installare automaticamente i driver GPU, devi installare manualmente i driver.

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

  • GPU sui nodi Ubuntu: se utilizzi GPU con nodi Ubuntu, si applicano i seguenti requisiti per i driver. Ti consigliamo di utilizzare Container-Optimized OS per i nodi GPU, perché includiamo i driver richiesti per una GPU specifica nella versione GKE minima richiesta per quella GPU.

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

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

Limitazioni all'utilizzo delle GPU su GKE

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

  • Non puoi aggiungere GPU a pool di nodi esistenti.
  • Non è possibile eseguire la migrazione live dei nodi GPU durante gli eventi di manutenzione.
  • Il tipo di GPU che puoi utilizzare dipende dalla serie di macchine, come segue:

    Assicurati di disporre di una quota sufficiente nel progetto per la serie di macchine corrispondente al tipo e alla quantità di GPU selezionati.

  • Le GPU non sono supportate nei pool di nodi Windows Server.

  • I cluster GKE Standard che eseguono la versione 1.28.2-gke.1098000 o precedenti non supportano la creazione di pool di nodi con GPU L4 mediante il provisioning automatico dei nodi. Tuttavia, i cluster che eseguono versioni precedenti supportano la scalabilità del gestore della scalabilità automatica dei cluster per i pool di nodi esistenti.

  • Se utilizzi GPU H100 e vuoi utilizzare un SSD locale nei tuoi pod, devi specificare esplicitamente il numero esatto di SSD locali da collegare alla VM A3 sottostante. Specifica il numero utilizzando il flag --ephemeral-storage-local-ssd=count=SSD_COUNT per l'archiviazione temporanea o il flag --local-nvme-ssd-block=count=SSD_COUNT per l'accesso al blocco. Se non aggiungi uno di questi flag, non potrai utilizzare gli SSD locali nei tuoi pod.

    La dimensione della macchina supportata in GKE è a3-highgpu-8g e il conteggio degli SSD locali corrispondente è 16.

Disponibilità di GPU per regioni e zone

Le GPU sono disponibili in regioni e zone specifiche. Quando richiedi una quota GPU, considera le regioni in cui intendi eseguire i 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 ciascuna 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 di Google Cloud.

Assicurati che sia disponibile una quota GPU sufficiente

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

La tua quota di GPU deve essere almeno equivalente al numero totale di GPU che intendi eseguire nel cluster. Se abiliti la scalabilità automatica dei cluster, dovresti richiedere una quota 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 progetto richiede almeno sei quote GPU.

Richiesta di quota GPU in corso...

Per richiedere la quota GPU, utilizza la console Google Cloud. Per ulteriori informazioni sulla richiesta di quote, consulta Quote GPU nella documentazione di Compute Engine.

Per cercare la quota 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 GPU e premi Invio.
    2. (Facoltativo) Per applicare filtri più avanzati per restringere i risultati, seleziona la proprietà Dimensioni (ad es. località), aggiungi il nome della regione o zona in uso e premi Invio.
  3. Dall'elenco delle quote di GPU, seleziona quella che vuoi modificare.

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

  5. Compila il campo Nuovo limite 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 Informazioni 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 in cluster GKE Standard

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

Per una migliore efficienza in termini di costi, affidabilità e disponibilità delle GPU su GKE, consigliamo le seguenti azioni:

  • Crea pool di nodi GPU separati. Per ogni pool di nodi, limita la località dei nodi alle zone in cui sono disponibili le GPU.
  • Abilita la scalabilità automatica in ogni pool di nodi.
  • Usa cluster a livello di regione per migliorare la disponibilità replicando il piano di controllo Kubernetes tra le zone della regione.
  • Indica a GKE di installare automaticamente i driver GPU predefiniti o più recenti sui pool di nodi, in modo che non sia necessario 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 siano pianificati su nodi inappropriati.

Incompatibilità automatica di un pool di nodi GPU per evitare di pianificarlo in modo inappropriato

Un'incompatibilità del nodo consente di contrassegnare un nodo in modo che lo scheduler ne eviti o ne impedisca l'utilizzo per determinati pod. Quando aggiungi un pool di nodi GPU a un cluster esistente che esegue già un pool di nodi non GPU, GKE incompatibilità automaticamente i nodi GPU con la seguente incompatibilità:

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

Limitazione automatica della programmazione con una tolleranza

Le tolleranze consentono di designare i pod che possono essere utilizzati su nodi "incompatibili". GKE applica automaticamente una tolleranza, quindi solo i pod che richiedono GPU sono pianificati sui nodi GPU. Ciò consente una scalabilità automatica più efficiente, in quanto i nodi GPU possono fare rapidamente fare lo scale down se non ci sono abbastanza pod 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 console Google Cloud o Google Cloud CLI. Puoi anche utilizzare Terraform per eseguire il provisioning dei cluster GKE e del pool di nodi GPU.

Puoi indicare a GKE di installare automaticamente la versione del driver NVIDIA predefinita o più recente che corrisponde alla versione GKE di ciascun nodo.

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] \
  --region COMPUTE_REGION --cluster CLUSTER_NAME \
  --node-locations COMPUTE_ZONE1[,COMPUTE_ZONE2] \
  [--enable-autoscaling \
   --min-nodes MIN_NODES \
   --max-nodes MAX_NODES] \
  [--ephemeral-storage-local-ssd=count=SSD_COUNT]

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.
  • 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 di GKE del tuo nodo.
    • latest: installa l'ultima versione del driver disponibile per la tua versione 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. Se ometti gpu-driver-version, GKE non installa automaticamente un driver.
  • AMOUNT: il numero di GPU da collegare ai nodi nel pool di nodi.

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

    Per tutte le altre GPU, questo flag è facoltativo.

  • COMPUTE_REGION: l'area geografica Compute Engine del cluster, ad esempio us-central1. Scegli una regione con almeno una zona in cui sono disponibili le GPU richieste.

  • CLUSTER_NAME: il nome del cluster in cui creare il pool di nodi.

  • 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 --region. I tipi di GPU che definisci devono essere disponibili in ogni zona selezionata. Ti consigliamo di utilizzare sempre il flag --node-locations quando crei il pool di nodi per specificare la zona o le zone contenenti le GPU richieste.

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

  • SSD_COUNT: il numero di SSD locali da collegare per l'archiviazione temporanea. Questo flag è obbligatorio per utilizzare SSD locali nei tipi di macchine A3 con GPU H100.

Ad esempio, il seguente comando crea un pool di nodi con scalabilità automatica a disponibilità elevata, p100, con due GPU P100 per ogni nodo, nel cluster a livello di regione 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 \
  --region us-central1 --cluster p100-cluster \
  --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. Facoltativamente, nella pagina Dettagli del pool di nodi, seleziona la casella di controllo Abilita scalabilità automatica.

  5. Configura il pool di nodi come preferisci.

  6. Dal 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 ciascun nodo.

  9. Leggi l'avviso e seleziona Ho compreso le limitazioni.

  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 opzioni dal menu a discesa Versione:
      • Predefinito: installa la versione del driver predefinita.
      • Più recente: installa la versione del driver più recente disponibile.
    • Gestita dall'utente: GKE non installa un driver. Devi installare manualmente un driver compatibile seguendo le istruzioni riportate in Installazione dei driver di dispositivi GPU NVIDIA.
  11. Fai clic su Crea.

Terraform

Puoi creare un cluster a livello di regione 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 per il 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. In queste zone devono essere disponibili i tipi di GPU definiti. Per sapere quali zone hanno GPU, consulta Disponibilità. Devi utilizzare la variabile node_locations durante la creazione del 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 che GKE deve installare automaticamente. Questo campo è facoltativo. Sono supportati i seguenti valori:

      • INSTALLATION_DISABLED: disattiva l'installazione automatica del driver GPU. Per eseguire le GPU, devi installare manualmente i driver.
      • DEFAULT: installa automaticamente la versione del driver predefinita per la versione del sistema operativo del nodo.
      • LATEST: installa automaticamente l'ultima versione del driver disponibile per la versione del sistema operativo del nodo.

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

    Per tutte le altre GPU, questo flag è facoltativo.

  2. Aggiungi il blocco seguente alla tua 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 GPU. Il pool di nodi ha inizialmente tre nodi e la scalabilità automatica è abilitata. Per scoprire di più su Terraform, consulta le specifiche delle risorse di google_container_node_pool su terraform.io.

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 tuoi nodi eseguendo il deployment di un DaemonSet di installazione su quei nodi. Utilizza l'installazione manuale nelle seguenti situazioni:

  • Hai scelto di disabilitare l'installazione automatica del driver di dispositivo quando hai creato un pool di nodi GPU.
  • Per l'installazione automatica, utilizzi una versione di GKE precedente a quella minima supportata.
  • Il carico di lavoro richiede una versione del driver NVIDIA specifica che non è disponibile come driver predefinito o più recente con installazione automatica.

Quando possibile, ti consigliamo di utilizzare l'installazione automatica dei driver specificando l'opzione gpu-driver-version nel flag --accelerator quando crei il cluster Standard. Se hai utilizzato il DaemonSet di installazione per installare manualmente i driver GPU entro il 25 gennaio 2023, potresti dover applicare di nuovo il DaemonSet per ottenere una versione che ignori 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 la comunicazione con Cloud Storage. Senza questo ambito, il download del manifest DaemonSet di installazione non riesce. Questo ambito è uno degli ambiti predefiniti, che in genere vengono aggiunti al momento della creazione del cluster.

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

COS

Per eseguire il deployment dell'installazione DaemonSet e installare la versione del driver GPU predefinita, esegui questo comando:

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

In alternativa, per installare la versione più recente del driver GPU (vedi la tabella seguente), esegui questo comando:

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

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

Ogni versione dell'immagine Container-Optimized OS ha almeno una versione del driver GPU NVIDIA supportata. Consulta le note di rilascio dei principali traguardi LTS di Container-Optimized OS per la versione predefinita supportata.

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

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

Ubuntu

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

  • Per tutte le GPU tranne le GPU NVIDIA L4 e NVIDIA H100, esegui questo comando:

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded.yaml
    
  • Per le GPU NVIDIA L4 o H100 con versioni dei nodi a partire dalla release 2024-R05 o successive, installa il driver R535:

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded-R535.yaml
    
  • Per le GPU NVIDIA L4 o H100 che eseguono versioni dei nodi dalle release anteriori alla release 2024-R05 o successive, installa il driver R525:

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

Il completamento dell'installazione richiede diversi 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 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 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

In GKE versione 1.29.2-gke.1108000 e successive, puoi selezionare una versione del driver GPU per GKE da installare automaticamente nei nodi GPU di cui è stato eseguito il provisioning automatico. Aggiungi il seguente campo 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 di GKE del tuo nodo.

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

Configurazione dei pod per il consumo di GPU

Puoi utilizzare un limite di risorse per configurare i pod in modo che utilizzino le GPU. Puoi specificare un limite di risorse in una specifica di pod utilizzando la seguente coppia chiave-valore

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

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

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

Utilizzo di più tipi di GPU

Se vuoi utilizzare più tipi di acceleratori GPU per cluster, devi creare più pool di nodi, ciascuno con il proprio tipo di acceleratore. GKE collega un selettore di nodi univoco ai nodi GPU per consentire di posizionare i carichi di lavoro GPU su 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 determinati tipi di GPU aggiungendo questo selettore di nodi alla specifica del pod del carico di lavoro. 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 pool di nodi utilizzando acceleratori (GPU e TPU)

GKE esegue gli upgrade automatici dei cluster standard, inclusi i pool di nodi. Puoi anche eseguire l'upgrade manuale dei pool di nodi se vuoi che i nodi vengano aggiornati prima in una versione successiva. Per controllare il funzionamento degli upgrade per il tuo cluster, utilizza canali di rilascio, periodi di manutenzione ed esclusioni e sequenze di implementazione.

Puoi anche configurare una strategia di upgrade dei nodi per il tuo pool di nodi, ad esempio upgrade di sovraccarico o upgrade blu/verde. Configurando queste strategie, puoi garantire che l'upgrade dei pool di nodi venga eseguito in modo da raggiungere l'equilibrio ottimale tra velocità e interruzione per il tuo ambiente. Per i pool di nodi della sezione TPU multi-host, invece di utilizzare la strategia di upgrade dei nodi configurati, GKE ricrea a livello atomico l'intero pool di nodi in un unico passaggio. Per ulteriori informazioni, consulta la definizione di atomicità in Terminologia relativa alle TPU in GKE.

L'utilizzo di una strategia di upgrade dei nodi richiede temporaneamente GKE per il provisioning di risorse aggiuntive, a seconda della configurazione. Se Google Cloud ha una capacità limitata per le risorse del tuo pool di nodi (ad esempio, riscontri errori di disponibilità delle risorse quando cerchi 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 computing parallelo e il modello di programmazione per GPU di NVIDIA. Per utilizzare applicazioni CUDA, l'immagine che utilizzi deve contenere le librerie. Per aggiungere le librerie NVIDIA CUDA-X, puoi creare e utilizzare una 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, consulta l'immagine NVIDIA CUDA su DockerHub.

    Per verificare la versione minima del driver GPU richiesta per la tua versione di CUDA, consulta Versioni del toolkit CUDA e dei driver compatibili.

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

Monitora le prestazioni del carico di lavoro del nodo 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 utilizzare 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 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).

Configura la terminazione controllata 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 indicatori SIGTERM che avvisano il nodo di un arresto imminente. La notifica di arresto imminente è configurabile fino a un massimo di 60 minuti nei nodi GPU.

Puoi configurare GKE per terminare i carichi di lavoro in modo controllato entro questo periodo di notifica. Nel manifest del pod, imposta il campo spec.terminationGracePeriodSeconds su un valore massimo di 60 minuti (3600 secondi). Ad esempio, per ottenere un tempo di notifica di 10 minuti, nel manifest del pod imposta il campo spec.terminationGracePeriodSeconds su 600 secondi come segue:

  spec:
    terminationGracePeriodSeconds: 600

GKE fa il possibile per terminare questi pod in modo controllato e eseguire l'azione di terminazione che hai definito, ad esempio il salvataggio dello stato di addestramento.

Passaggi successivi