Questa pagina mostra come eseguire e ottimizzare i carichi di lavoro con utilizzo intensivo 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 utilizzi invece i pod Autopilot, consulta Esegui 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 eseguire 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 dei tuoi cluster e poi allocare le risorse GPU ai carichi di lavoro containerizzati in esecuzione su questi nodi.
Per scoprire di più sui casi d'uso delle 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 le GPU con le VM spot se i tuoi carichi di lavoro possono tollerare interruzioni frequenti dei nodi. L'utilizzo di VM spot riduce il prezzo di esecuzione delle GPU. Per saperne di più, consulta l'articolo Utilizzare le VM spot con i pool di nodi GPU.
A partire dalla versione 1.29.2-gke.1108000, ora 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 operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installa e poi
inizializza 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: le versioni disponibili dipendono dall'immagine del nodo utilizzata dalle GPU:
- Sistema operativo ottimizzato per i container: versione GKE 1.9 o superiore.
- Ubuntu: GKE 1.11.3 o versioni successive.
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 in Google Cloud Console.
Se hai bisogno di una quota GPU aggiuntiva, devi richiedere una quota GPU nella console Google Cloud. Se hai un account di fatturazione, il progetto riceve automaticamente la quota dopo che hai inviato la richiesta.
Per impostazione predefinita, gli account in prova gratuita non ricevono quota GPU.
Driver GPU NVIDIA: quando crei un cluster o un pool di nodi, puoi chiedere a GKE di installare automaticamente una versione del driver in base alla tua versione di GKE. Se non chiedi a GKE di installare automaticamente i driver GPU, devi installarli manualmente.
GPU A100: le GPU A100 sono supportate solo su 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 per i driver.
GPU L4 e GPU H100: driver NVIDIA versione 535 o successiva.
Se una versione del driver richiesta o una versione successiva non è la versione predefinita nella tua versione GKE, devi installare manualmente un driver supportato sui tuoi nodi.
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:
- Non puoi aggiungere GPU ai node pool 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:
- Serie di macchine A3: GPU H100.
- Serie di macchine A2: GPU A100.
- Serie di macchine G2: GPU L4.
- Serie di macchine N1: tutte le GPU tranne A100 e L4.
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 node pool Windows Server.
I cluster GKE Standard che eseguono la versione 1.28.2-gke.1098000 o precedente non supportano l'autoprovisioning dei nodi per la creazione di pool di nodi con GPU L4. Tuttavia, i cluster che eseguono versioni precedenti supportano la scalabilità del gestore della scalabilità automatica dei cluster dei pool di nodi esistenti.
Se utilizzi GPU H100 e vuoi utilizzare l'unità SSD locale nei tuoi pod, devi specificare esplicitamente il numero esatto di unità SSD locali da collegare alla VM A3 sottostante. Specifica il numero utilizzando il
--ephemeral-storage-local-ssd=count=SSD_COUNT
flag per lo spazio di archiviazione temporaneo o il--local-nvme-ssd-block=count=SSD_COUNT
flag per bloccare l'accesso. Se non aggiungi uno di questi flag, non potrai utilizzare le unità SSD locali nei tuoi pod.Per visualizzare il numero esatto di dischi SSD locali per ogni tipo di macchina supportato, controlla la riga Tipi di macchine A3 nella tabella Tipi di macchine che collegano automaticamente i dischi SSD locali.
Disponibilità delle GPU per regioni e zone
Le GPU sono disponibili in regioni e zone specifiche. Quando richiedi la quota GPU, prendi in considerazione 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 il seguente comando:
gcloud compute accelerator-types list
Prezzi
Per informazioni sui prezzi delle GPU, consulta la tabella dei prezzi nella pagina GPU di Google Cloud.
Assicurati di disporre di 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 quota GPU deve essere almeno equivalente al numero totale di GPU che intendi eseguire nel cluster. Se attivi la scalabilità automatica del cluster, devi 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 eseguono due GPU per nodo, il tuo progetto richiede almeno sei GPU di quota.
Richiesta di quota GPU
Per richiedere una quota GPU, utilizza la console Google Cloud. Per ulteriori informazioni su come richiedere le quote, consulta la sezione Quote GPU nella documentazione di Compute Engine.
Per cercare la quota GPU e inviare una richiesta di quota, utilizza Google Cloud Console:
Vai alla pagina Quote di IAM e amministrazione nella console Google Cloud.
Nella casella Filtro, procedi nel seguente modo:
- Seleziona la proprietà Quota, inserisci il nome del modello di GPU e premi Invio.
- (Facoltativo) Per applicare filtri più avanzati per restringere i risultati, seleziona la proprietà Dimensioni (ad es. località), aggiungi il nome della regione o della zona che stai utilizzando e premi Invio.
Dall'elenco delle quote GPU, seleziona quella che vuoi modificare.
Fai clic su Modifica quote. Si apre un modulo di richiesta.
Compila il campo Nuovo limite quota per ogni richiesta di quota.
Compila il campo Descrizione della richiesta con i dettagli della richiesta.
Fai clic su Avanti.
Nella finestra di dialogo Conferma dell'override, fai clic su Conferma.
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.
Fai clic su Invia richiesta.
Riceverai un'email di conferma per monitorare la modifica della quota.
GPU in esecuzione nei cluster GKE Standard
Per eseguire le GPU nei cluster GKE Standard, crea un pool di nodi con GPU collegate.
Per migliorare il rapporto costo-efficienza, l'affidabilità e la disponibilità delle GPU su GKE, svolgi le seguenti azioni:
- Crea pool di nodi GPU separati. Per ogni pool di nodi, limita la posizione dei nodi alle zone in cui sono disponibili le GPU che ti interessano.
- Abilita la scalabilità automatica in ogni pool di nodi.
- Utilizza i cluster a livello di regione per migliorare la disponibilità replicando il piano di controllo di Kubernetes nelle zone della regione.
- Configura GKE in modo da 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.
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.
Contaminazione automatica di 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. Quando aggiungi un pool di nodi GPU a un cluster esistente che esegue già un pool di nodi non GPU, GKE automaticamente contamina i nodi GPU con il seguente taint del nodo:
- Chiave:
nvidia.com/gpu
- Effetto:
NoSchedule
GKE aggiunge questo taint solo se nel cluster è presente un pool di nodi non GPU. Se aggiungi un pool di nodi GPU a un cluster in cui tutti i pool di nodi esistenti sono pool di nodi GPU o se crei un nuovo cluster in cui al pool di nodi predefinito sono collegate GPU, l'alterazione precedente non viene aggiunta ai nodi GPU.
Se in futuro aggiungi un pool di nodi non GPU al cluster, GKE non applica in modo retroattivo questo taint ai nodi GPU esistenti.
Limitare automaticamente la pianificazione con una tolleranza
Le tolleranze ti 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 ridurre rapidamente le dimensioni se non ci sono pod sufficienti che richiedono GPU. A questo scopo, 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.
Nella versione del piano di controllo GKE 1.30.1-gke.1156000 e successive, GKE installa automaticamente la versione predefinita del driver NVIDIA per la versione del nodo GKE. Se vuoi, puoi scegliere la versione più recente del driver disponibile o disattivare esplicitamente l'installazione automatica del 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 il seguente 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] \
[--scopes=SCOPES] \
[--service-account=SERVICE_ACCOUNT]
Sostituisci quanto segue:
POOL_NAME
: il nome scelto 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 predefinita del driver per la versione GKE del tuo nodo. In GKE 1.30.1-gke.1156000 e versioni successive, se ometti il flaggpu-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 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 versione 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 un pool di nodi esistente a questa versione o a una successiva, GKE installa automaticamente la versione predefinita del driver corrispondente alla versione GKE, a meno che non specifichi diversamente quando avvii l'upgrade.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:- GPU NVIDIA H100 da 80 GB (corrispondenti al tipo di acceleratore
nvidia-h100-80gb
e al tipo di macchina A3 High), oppure GPU NVIDIA H100 Mega da 80 GB (corrispondenti al tipo di acceleratorenvidia-h100-mega-80gb
e al tipo di macchina A3 Mega). Per ulteriori informazioni, 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 acceleratorenvidia-a100-80gb
e al tipo di macchina A2 Ultra). Per ulteriori informazioni, consulta la serie di macchine A2 nella documentazione di Compute Engine. - GPU NVIDIA L4 (corrispondenti al
nvidia-l4
tipo di acceleratore e alla serie di macchine G2).
Per tutte le altre GPU, questo flag è facoltativo.
- GPU NVIDIA H100 da 80 GB (corrispondenti al tipo di acceleratore
COMPUTE_REGION
: la regione Compute Engine del cluster, ad esempious-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 lo spazio di archiviazione temporaneo. Questo flag è necessario per utilizzare le unità SSD locali nei tipi di macchine A3 con GPU H100.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 dell'account di servizio IAM utilizzato dai nodi.SCOPES
: è un elenco separato da virgole degli ambiti di accesso da concedere. Assicurati che uno degli ambiti siastorage-ro
ohttps://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 pool di nodi GPU non va a buon fine con un errore AccessDenied Impossibile scaricare gpu_driver_versions.bin dal bucket GCS.
Ad esempio, il seguente comando crea un node pool di 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 \
--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:
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.
Fai clic su add_box Aggiungi pool di nodi.
(Facoltativo) Nella pagina Dettagli del pool di nodi, seleziona la casella di controllo Attiva la scalabilità automatica.
Configura il pool di nodi come preferisci.
Nel riquadro di navigazione, seleziona Nodi.
In Configurazione macchina, fai clic su GPU.
Seleziona un tipo di GPU e il numero di GPU da eseguire su ogni nodo.
Leggi l'avviso e seleziona Sono consapevole delle limitazioni.
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.
- Ultima: installa la versione più recente 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.
- Gestito da Google: GKE installa automaticamente un driver.
Se selezioni questa opzione, scegli una delle seguenti opzioni dal menu a discesa Versione:
Fai clic su Crea.
Terraform
Puoi creare un cluster regionale con Terraform con GPU utilizzando un modulo Terraform.
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 calcolo 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 variabileregion
. Queste zone devono avere i tipi di GPU che hai definito disponibili. Per scoprire quali zone dispongono di GPU, consulta Disponibilità. Devi utilizzare la variabilenode_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 da GKE. Questo campo è facoltativo. Sono supportati i seguenti valori:INSTALLATION_DISABLED
: disattiva l'installazione automatica dei driver GPU. Devi installare manualmente i driver per eseguire le tue GPU. 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 tuo nodo. In GKE 1.30.1-gke.1156000 e versioni successive, se ometti questo campo, l'opzione predefinita è questa. Nelle versioni precedenti, GKE non installa un driver se ometti questo campo.LATEST
: installa automaticamente la versione più recente del driver disponibile per la versione del sistema operativo del tuo 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 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 H100 da 80 GB (corrispondenti al tipo di acceleratore
nvidia-h100-80gb
e al tipo di macchina A3 High), oppure GPU NVIDIA H100 Mega da 80 GB (corrispondenti al tipo di acceleratorenvidia-h100-mega-80gb
e al tipo di macchina A3 Mega). Per ulteriori informazioni, 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 acceleratorenvidia-a100-80gb
e al tipo di macchina A2 Ultra). Per ulteriori informazioni, consulta la serie di macchine A2 nella documentazione di Compute Engine. - GPU NVIDIA L4 (corrispondenti al
nvidia-l4
tipo di acceleratore e alla serie di macchine G2).
Per tutte le altre GPU, questo flag è facoltativo.
- GPU NVIDIA H100 da 80 GB (corrispondenti al tipo di acceleratore
Aggiungi il seguente blocco 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 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.
Per evitare di sostenere 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
--node-locations
flag. Tuttavia, ti consigliamo di creare un pool di nodi GPU separato in un cluster esistente, come mostrato in questa sezione.
Installare manualmente i driver GPU NVIDIA
Puoi installare manualmente i driver GPU NVIDIA sui tuoi nodi dispiegando un DaemonSet di installazione su questi nodi. Utilizza l'installazione manuale nelle seguenti situazioni:
- Hai scelto di disattivare l'installazione automatica dei driver di 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 non disponibile come predefinita o come driver più recente con installazione automatica.
Se possibile, utilizza l'installazione automatica dei driver.
Per farlo, specifica 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 nuovamente 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 comunicare con Cloud Storage.
Senza questo ambito, il download del manifest del DaemonSet di installazione non va a buon fine.
Questo ambito è uno degli ambiti predefiniti, solitamente aggiunto durante la creazione del cluster.
Le istruzioni riportate di seguito mostrano come installare i driver su nodi COS (Container-Optimized OS) e Ubuntu e utilizzando Terraform.
COS
Per eseguire il deployment del 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
In alternativa, per installare la versione più recente del driver della GPU (vedi la tabella di seguito), esegui il seguente 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 alcuni 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 di Container-Optimized OS ha almeno una versione del driver della GPU NVIDIA supportata. Consulta le note di rilascio dei principali traguardi LTS di Container-Optimized OS per la versione supportata predefinita.
La tabella seguente elenca le versioni dei driver disponibili in ogni versione GKE:
Versioni dei driver NVIDIA di 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 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 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 L4 o H100 che eseguono versioni dei nodi 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 delle release precedenti 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 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 ogni versione 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
kubectl_manifest
tipo di risorsa Terraform.
Per installare il DaemonSet su COS, 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/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 }
Installazione dei driver utilizzando il provisioning automatico dei nodi con le GPU
Quando utilizzi il provisioning automatico dei nodi con le GPU, per impostazione predefinita i pool di nodi sottoposti a provisioning automatico non hanno ambiti sufficienti per installare i driver. Per
concedere gli ambiti richiesti, modifica gli ambiti predefiniti per il provisioning automatico dei nodi
aggiungendo 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 da installare automaticamente da GKE nei nodi GPU con 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. Se ometti il nodeSelector nel manifest, questa è l'opzione predefinita.latest
: la versione del driver più recente disponibile per la versione GKE del tuo nodo.
Per scoprire di più sul provisioning automatico, consulta Utilizzare il 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 GPU. Specifica un limite di risorse in una specifica del pod utilizzando la seguente coppia chiave-valore
- Chiave:
nvidia.com/gpu
- Valore: numero di GPU da consumare
alpha.kubernetes.io/nvidia-gpu
non è supportato come nome della risorsa in GKE. Utilizza invece nvidia.com/gpu
come nome della risorsa.
Il manifest seguente è un esempio di specifica del pod che utilizza le 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 associa un selettore di nodi univoco ai nodi GPU per contribuire a 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 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
Eseguire l'upgrade dei pool di nodi utilizzando gli acceleratori (GPU e TPU)
GKE esegue automaticamente l'upgrade dei cluster standard, inclusi i pool di nodi. Puoi anche eseguire manualmente l'upgrade dei pool di nodi se vuoi che i tuoi nodi passino a una versione successiva prima. Per controllare il funzionamento degli upgrade per il tuo cluster, utilizza i canali di rilascio, i periodi di manutenzione ed esclusioni e la sequenziazione del rollout.
Puoi anche configurare una strategia di upgrade dei nodi per il tuo pool di nodi, ad esempio gli upgrade per picchi di domanda o gli upgrade blue-green. Configurando queste strategie, puoi assicurarti che l'upgrade dei pool di nodi venga eseguito in modo da ottenere un equilibrio ottimale tra velocità e interruzione per il tuo ambiente. Per i pool di nodi con sezioni TPU multi-host, anziché utilizzare la strategia di upgrade dei nodi configurata, GKE ricrea l'intero pool di nodi in un unico passaggio. Per scoprire di più, consulta la definizione di atomicità in Terminologia relativa alle 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 tuo pool di nodi, ad esempio visualizzi errori di disponibilità delle risorse quando provi a creare altri 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 avere 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 contenitore:
/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 controllare la versione minima del driver GPU richiesta per la tua versione di CUDA, consulta CUDA Toolkit e versioni dei driver compatibili.
/usr/local/nvidia/lib64
: la posizione dei driver di dispositivo NVIDIA.
Monitorare il rendimento del carico di lavoro del nodo GPU
Se nel tuo cluster GKE sono attivate le metriche di sistema, in Cloud Monitoring sono disponibili le seguenti metriche per monitorare le prestazioni del carico di lavoro 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 della memoria (
container/accelerator/memory_used
): Quantità di memoria dell'acceleratore allocata in byte. - Capacità memoria (
container/accelerator/memory_total
): Memoria acceleratore totale in byte.
Puoi utilizzare le dashboard predefinite per monitorare i cluster con nodi GPU. Per ulteriori informazioni, consulta Visualizzare le metriche di osservabilità. Per informazioni generali sul monitoraggio dei cluster e delle relative risorse, consulta Osservabilità per GKE.
Visualizzare le metriche di utilizzo per i workload
Puoi visualizzare le metriche sull'utilizzo della GPU del tuo carico di lavoro dalla dashboard Workload nella console Google Cloud.
Per visualizzare l'utilizzo della GPU del tuo carico di lavoro:
Vai alla pagina Carichi di lavoro nella console Google Cloud.
Vai a Carichi di lavoro- Seleziona un carico di lavoro.
La dashboard Carichi di lavoro mostra i grafici relativi all'utilizzo e alla capacità della memoria GPU, nonché al ciclo di lavoro della GPU.
Visualizzare 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 di NVIDIA Data Center GPU Manager (DCGM).
Configurare l'interruzione controllata dei nodi GPU
Nei cluster GKE con il piano di controllo in esecuzione nella versione 1.29.1-gke.1425000 o successive, i nodi GPU supportano gli indicatori SIGTERM
che avvisano il nodo di un imminente spegnimento. La notifica di arresto imminente è configurabile fino a 60 minuti
nei nodi GPU.
Per configurare GKE in modo che termini i carichi di lavoro in modo corretto in questo periodo di tempo della notifica, segui i passaggi descritti in Gestire l'interruzione dei nodi GKE per GPU e TPU.
Passaggi successivi
- Scopri di più sui pool di nodi.
- Scopri come utilizzare una piattaforma CPU minima per i tuoi nodi.
- Scopri come creare e configurare un container di deep learning locale con Docker.