Esecuzione di GPU nei pool di nodi GKE Standard


Questa pagina mostra come utilizzare gli acceleratori hardware delle unità di elaborazione grafica NVIDIA® nei tuoi nodi dei cluster Google Kubernetes Engine (GKE) Standard. Per ulteriori informazioni sulle GPU in GKE, consulta Informazioni sulle GPU in GKE.

Puoi anche utilizzare le GPU direttamente nei pod Autopilot. Per istruzioni, consulta Eseguire il deployment dei carichi di lavoro GPU in Autopilot.

Panoramica

Con GKE, puoi creare pool di nodi dotati di GPU NVIDIA Tesla® K80, P100, P4, V100, T4, L4 e A100. 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 di immagini.

Puoi anche utilizzare GPU con VM spot se i tuoi carichi di lavoro possono tollerare interruzioni frequenti dei nodi. L'uso delle VM spot riduce il costo dell'esecuzione delle GPU. Per saperne di più, consulta Utilizzo delle 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 initialize gcloud CLI. Se hai già installato gcloud CLI, scarica la versione più recente eseguendo gcloud components update.

Requisiti

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 nella versione GKE 1.9 o successiva. Per i pool di nodi che utilizzano l'immagine dei nodi Ubuntu, i nodi GPU sono disponibili in GKE versione 1.11.3 o successive.
  • Quota GPU: devi disporre di una 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 Quote nella console Google Cloud.

    Se hai bisogno di un'ulteriore quota GPU, devi richiedere una quota GPU nella console Google Cloud. Se hai un account di fatturazione stabilito, 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 dire a GKE di installare automaticamente una versione del driver in base alla tua versione di GKE. Se non dici a GKE di installare automaticamente i driver GPU, devi installarli manualmente.

  • GPU A100: le GPU A100 sono supportate solo sui tipi di macchine a2 e richiedono GKE versione 1.18.6-gke.3504 o successiva. Devi assicurarti di disporre di una quota sufficiente per consentire al tipo di macchina A2 sottostante di utilizzare la GPU A100.

  • GPU L4:

    • Devi utilizzare GKE versione 1.22.17-gke.5400 o successive.
    • La versione di GKE che scegli deve includere il driver NVIDIA versione 525 o successiva in Container-Optimized OS. Se il driver 525 o versioni successive non è quella predefinita o la versione più recente nella tua versione di GKE, devi installare manualmente un driver supportato sui tuoi nodi.

Limitazioni

Prima di utilizzare le 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 indicato di seguito:

    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 di Windows Server.

  • Nelle versioni GKE da 1.22 a 1.25, il gestore della scalabilità automatica dei cluster supporta solo lo scale up e lo scale down di base dei nodi con GPU L4. Questo limite non si applica a GKE 1.26 e versioni successive.

  • Per le GPU H100, per utilizzare gli SSD locali per l'archiviazione dei pod, devi specificare esplicitamente il numero esatto di SSD locali da collegare alla VM A3 sottostante 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 il blocco dell'accesso. Se ometti questo flag, non potrai utilizzare gli SSD locali nei tuoi pod. Questi flag sono obbligatori solo se vuoi utilizzare SSD locale per l'accesso ai dati.

    Le dimensioni della macchina supportate in GKE sono a3-highgpu-8g e il numero di SSD locali corrispondenti è 16.

Disponibilità

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 acceleratore 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 della GPU di Google Cloud.

Quota per le GPU

La quota GPU è il numero totale di GPU che possono essere eseguite nel progetto Google Cloud. Per creare cluster con GPU, il progetto deve avere 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 dei cluster, devi richiedere una quota GPU almeno equivalente al numero massimo di nodi del cluster moltiplicato per il numero di GPU per nodo.

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

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

Per cercare una 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, segui questi passaggi:

    1. Seleziona la proprietà Quota, inserisci il nome del modello GPU e premi Invio.
    2. (Facoltativo) Per applicare filtri più avanzati e restringere i risultati, seleziona la proprietà Dimensioni (ad esempio località), aggiungi il nome della regione o zona in uso e premi Invio.
  3. Dall'elenco delle quote GPU, seleziona la quota 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. Tocca 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 variazione della quota.

Esecuzione di GPU

Per eseguire GPU nei cluster GKE Standard, crea un pool di nodi con GPU collegate. 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

Inoltre, GKE applica automaticamente le tolleranze corrispondenti ai pod che richiedono GPU eseguendo il controller di ammissione ExtendedResourceToleration.

Ciò causa la pianificazione solo dei pod che richiedono GPU sui nodi GPU, il che consente una scalabilità automatica più efficiente: i nodi GPU possono fare rapidamente lo scale down se non ci sono abbastanza pod che richiedono GPU.

Per migliorare l'efficienza in termini di costi, l'affidabilità e la 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 che vuoi.
  • Abilita la scalabilità automatica in ogni pool di nodi.
  • Utilizza cluster a livello di regione per migliorare la disponibilità replicando il piano di controllo Kubernetes in più zone della regione.
  • Indica a GKE di installare 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.

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 predefinita o più recente del driver NVIDIA corrispondente alla tua versione Container-Optimized OS.

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 GPU. Può essere uno dei seguenti:
    • nvidia-tesla-k80
    • nvidia-tesla-p100
    • nvidia-tesla-p4
    • nvidia-tesla-v100
    • nvidia-tesla-t4
    • nvidia-tesla-a100
    • nvidia-a100-80gb
    • nvidia-l4
    • nvidia-h100-80gb
  • DRIVER_VERSION: la versione del driver NVIDIA da installare. Può corrispondere a uno dei seguenti:

    • default: installa la versione predefinita del driver per la tua versione di GKE.
    • 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. Se ometti gpu-driver-version, questa è l'opzione predefinita.
  • 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 di 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 durante la creazione del 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 gli SSD locali nei tipi di macchine A3 con GPU H100.

Ad esempio, il comando seguente crea un pool di nodi con scalabilità automatica ad alta disponibilità, p100, con due GPU P100 per ciascun nodo, nel cluster a livello di regione p100-cluster. GKE installa automaticamente i driver predefiniti su quei 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. 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 ciascun nodo.

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

  10. Nella sezione Installazione dei 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:
      • Predefinita: installa la versione predefinita del driver.
      • Più recente: installa la versione più recente del driver disponibile.
    • Gestita dal cliente: GKE non installa alcun 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 blocco seguente 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. Queste zone devono avere disponibili i tipi di GPU che hai definito. Per sapere quali zone dispongono di GPU, consulta la sezione 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 GPU. Può essere uno dei seguenti:

      • nvidia-tesla-k80
      • nvidia-tesla-p100
      • nvidia-tesla-p4
      • nvidia-tesla-v100
      • nvidia-tesla-t4
      • nvidia-tesla-a100
      • nvidia-a100-80gb
      • nvidia-l4
      • nvidia-h100-80gb
    • DRIVER_VERSION: la versione del driver GPU da installare automaticamente su GKE. Questo campo è facoltativo. Sono supportati i seguenti valori:

      • INSTALLATION_DISABLED: disattiva l'installazione automatica dei driver GPU. Per eseguire le GPU, devi installare manualmente i driver.
      • DEFAULT: installa automaticamente la versione predefinita del driver per la versione del sistema operativo del nodo.
      • LATEST: installa automaticamente la versione più recente disponibile del driver 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 configurazione di 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 saperne di più su Terraform, consulta la specifica delle risorse google_container_node_pool.

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

Se hai scelto di disabilitare l'installazione automatica del driver di dispositivo quando hai creato un pool di nodi GPU o se stai utilizzando una versione di GKE precedente alla versione minima supportata per l'installazione automatica, devi installare manualmente un driver GPU NVIDIA compatibile sui nodi. Google fornisce un DaemonSet che puoi applicare per installare i driver. Sui nodi GPU che utilizzano Container-Optimized OS, puoi anche scegliere tra la versione predefinita del driver GPU o una versione più recente.

Ti consigliamo di utilizzare l'installazione automatica del driver quando possibile, specificando l'opzione gpu-driver-version nel flag --accelerator quando crei il cluster Standard. Se hai utilizzato l'installazione DaemonSet per installare manualmente i driver GPU il 25 gennaio 2023 o prima, potresti dover applicare di nuovo il DaemonSet per ottenere una versione che ignori i nodi che utilizzano l'installazione automatica dei driver.

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

COS

Per eseguire il deployment dell'installazione DaemonSet e installare la versione predefinita del driver GPU, 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 di seguito), 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 mostra la capacità GPU NVIDIA tramite le API Kubernetes.

Ogni versione di un'immagine Container-Optimized OS ha almeno una versione supportata del driver GPU NVIDIA. 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 ogni versione di GKE:

Versione GKE driver NVIDIA
1,26 R470(predefinito), R510 o R525
1,25 R470(predefinito), R510 o R525
1,24 R470(predefinito), R510 o R525
1,23 R450(predefinito), R470, R510 o R525
1,22 R450(predefinito), R470, R510 o R525
1,21 R450(predefinito), R470 o R510
1,20 R450(predefinito), R470

Ubuntu

Per eseguire il deployment dell'installazione DaemonSet per tutte le GPU tranne le GPU NVIDIA L4, esegui questo comando:

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

Il completamento dell'installazione richiede diversi secondi. Una volta installato, il plug-in del dispositivo GPU NVIDIA mostra la capacità GPU NVIDIA tramite le API Kubernetes.

Per le GPU NVIDIA L4, installa il driver R525 utilizzando il seguente comando:

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

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

Versione GKE driver NVIDIA
1,27 R470
1,26 R470
1,25 R470
1,24 R470
1,23 R470
1,22 R450
1,21 R450
1,20 R450

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 kubectl_manifest tipo di risorsa Terraform.

  • 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 di 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
      }
    

Utilizzo del provisioning automatico dei nodi con le 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 per 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 che GKE possa installarla 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 nodo. Se ometti il nodeSelector nel manifest, questa è l'opzione predefinita.
  • latest: la versione più recente disponibile del driver per la versione GKE del nodo.

Per saperne di più sul provisioning automatico, consulta Utilizzare il provisioning automatico dei nodi.

Configurazione dei pod per il consumo di GPU

Utilizzi un limite di risorse per configurare i pod che consumano GPU. Puoi specificare 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

Di seguito è riportato un esempio di specifica del 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 acceleratore GPU per cluster, devi creare più pool di nodi, ciascuno con il proprio tipo di acceleratore. GKE collega ai nodi GPU un selettore di nodi univoco per posizionare i carichi di lavoro delle GPU sui nodi con tipi di GPU specifici:

  • Chiave: cloud.google.com/gke-accelerator
  • Valore: nvidia-tesla-k80, nvidia-tesla-p100, nvidia-tesla-p4, nvidia-tesla-v100, nvidia-tesla-t4, nvidia-tesla-a100, nvidia-a100-80gb, nvidia-h100-80gb o nvidia-l4.

Puoi scegliere come target determinati tipi di GPU aggiungendo questo selettore di nodi alla specifica dei pod del tuo 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-k80

Esegui l'upgrade dei pool di nodi utilizzando acceleratori (GPU e TPU)

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

Puoi anche configurare una strategia di upgrade dei nodi per il pool di nodi, ad esempio gli upgrade di incremento o gli 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, anziché utilizzare la strategia di upgrade dei nodi configurati, GKE ricrea a livello atomico l'intero pool di nodi in un unico passaggio. Per saperne di più, consulta la definizione di atomicità in Terminologia relativa alla TPU in GKE.

L'uso di una strategia di upgrade dei nodi richiederà 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 tuo pool di nodi, ad esempio visualizzi errori di disponibilità delle risorse quando provi a 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 parallela e il modello di programmazione di NVIDIA per GPU. Per utilizzare le applicazioni CUDA, l'immagine utilizzata deve avere le librerie. Per aggiungere le librerie NVIDIA CUDA-X, utilizza uno dei seguenti metodi:

  • Consigliato: utilizza un'immagine con le librerie NVIDIA CUDA-X preinstallate. Ad esempio, puoi utilizzare Deep Learning Containers. Questi container preinstallano i framework chiave di data science, le librerie e gli strumenti NVIDIA CUDA-X. In alternativa, l' immagine NVIDIA CUDA contiene solo le librerie NVIDIA CUDA-X.
  • Crea e utilizza la tua immagine. In questo caso, includi i seguenti valori nella variabile di ambiente LD_LIBRARY_PATH della specifica del container:
    1. /usr/local/cuda-CUDA_VERSION/lib64: la località delle librerie NVIDIA CUDA-X sul nodo. Sostituisci CUDA_VERSION con la versione 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.
    2. /usr/local/nvidia/lib64: la posizione dei driver di dispositivo NVIDIA.

Per controllare la versione minima del driver GPU richiesta per la tua versione di CUDA, consulta CUDA Toolkit e versioni dei driver compatibili. 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 Container-Optimized OS corrispondente nella tabella delle versioni attuali di GKE.

Monitora i nodi GPU

Se nel 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à di memoria (container/accelerator/memory_total): memoria totale dell'acceleratore in byte.

Puoi utilizzare le 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 metriche di utilizzo per i carichi di lavoro

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

Per visualizzare l'utilizzo della GPU dei carichi 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 della 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 con cluster Standard utilizzando Google Cloud Managed Service per Prometheus.

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

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

Puoi configurare GKE per terminare in modo controllato i carichi di lavoro 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 ricevere una 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 in modo controllato i pod ed eseguire l'azione di terminazione da te definita, ad esempio salvando uno stato di addestramento.

Passaggi successivi