Esecuzione di GPU


Questa pagina mostra come utilizzare gli acceleratori hardware delle unità di elaborazione grafica NVIDIA® nei tuoi cluster Google Kubernetes Engine (GKE); nodi.

Panoramica

Con GKE, puoi creare pool di nodi dotati di GPU NVIDIA® K80, P100, P4, V100, T4 e A100. Le GPU forniscono potenza di calcolo per promuovere 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.

Puoi anche utilizzare le GPU con VM Spot se i tuoi carichi di lavoro possono tollerare interruzioni frequenti dei nodi. L'utilizzo delle VM Spot riduce il prezzo dell'esecuzione delle GPU. Per scoprire di più, consulta l'articolo sull'utilizzo delle VM Spot con i pool di nodi GPU.

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 1.9 o successiva di GKE. Per i pool di nodi che utilizzano l'immagine del nodo Ubuntu, i nodi GPU sono disponibili in GKE 1.11.3 o versioni successive.
  • Quota GPU: per poter creare nodi GPU, devi disporre della quota GPU di Compute Engine nella zona che preferisci. Per assicurarti di avere una quota GPU sufficiente nel tuo progetto, consulta l'articolo Quote in Google Cloud Console.

    Se hai bisogno di una quota GPU aggiuntiva, devi richiedere la quota GPU nella console. Se hai già un account di fatturazione, il progetto deve ricevere automaticamente la quota dopo che hai inviato la richiesta di quota.

  • Driver GPU NVIDIA: devi installare manualmente i driver GPU NVIDIA sui tuoi nodi. Più avanti in questa pagina, spieghiamo come installare i driver.

  • GPU A100: le GPU A100 sono supportate solo sui tipi di macchine a2 e richiedono GKE versione 1.18.6-gke.3504 o successiva.

Limitazioni

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

  • Non puoi aggiungere GPU ai 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, in questo modo:
  • Le GPU non sono supportate nei pool di nodi di Windows Server.

Disponibilità

Le GPU sono disponibili in aree geografiche e zone specifiche. Quando richiedi la quota GPU, tieni conto delle aree geografiche in cui intendi eseguire i tuoi cluster.

Per un elenco completo delle aree geografiche e delle zone applicabili, consulta la sezione GPU su Compute Engine.

Puoi anche visualizzare le GPU disponibili nella tua zona utilizzando l'interfaccia a riga di comando di Google Cloud. Per visualizzare un elenco di tutti i tipi di acceleratori GPU supportati in ogni zona, esegui il comando seguente:

gcloud compute accelerator-types list

Prezzi

Per informazioni sui prezzi delle GPU, consulta la tabella dei prezzi alla pagina della GPU di Google Cloud.

Quota per le GPU

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

La quota GPU dovrebbe 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 massimo di nodi del cluster moltiplicato per il numero di GPU per nodo.

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

Richiesta di quota GPU

Per richiedere la quota GPU, utilizza la console. Per ulteriori informazioni sulla richiesta di quote, consulta la sezione Richiesta di quota aggiuntiva nella documentazione di Compute Engine.

Per cercare la quota GPU, segui questi passaggi nella console:

  1. Vai alla pagina IAM Quote amministratore nella console.

    Vai a Quote

  2. Nel menu a discesa Metriche, fai clic su Nessuno, quindi inserisci "gpus" nel campo di ricerca.

  3. Dai risultati di ricerca, seleziona le GPU che ti interessano:

    Uno screenshot del menu a discesa Metriche, che mostra le metriche GPU selezionate.

  4. Chiudi il menu a discesa Metriche.

Invio della richiesta di quota

Per inviare una richiesta di quota, procedi nel seguente modo nella console:

  1. Dall'elenco delle quote della GPU, seleziona le quote per le aree geografiche desiderate, ad esempio us-central1.
  2. Fai clic su Modifica quote. Sul lato destro della console si apre un modulo di richiesta.
  3. Compila il campo Nuovo limite quota per ogni richiesta di quota.
  4. Compila il campo Descrizione della richiesta con i dettagli relativi alla richiesta.
  5. Fai clic su Fine.
  6. Fai clic su Invia richiesta.

Esecuzione di GPU

Le sezioni seguenti spiegano come eseguire le GPU nei cluster GKE.

Creazione di un pool di nodi GPU a scalabilità automatica

Per sfruttare al meglio i vantaggi più convenienti delle GPU su GKE e per usufruire della scalabilità automatica dei cluster, ti consigliamo di creare nei tuoi cluster pool di nodi GPU separati.

Quando aggiungi un pool di nodi GPU a un cluster esistente che esegue già un pool di nodi non GPU, GKE genera un'incompatibilità automatica dei nodi GPU con la seguente incompatibilità dei nodi:

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

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

In questo modo solo i pod che richiedono la GPU possono essere pianificati sui nodi GPU, il che consente una scalabilità automatica più efficiente: i nodi GPU possono fare lo scale down rapido se non ci sono abbastanza pod che richiedono le GPU.

Puoi creare un pool di nodi GPU in un cluster esistente utilizzando la console o l'interfaccia a riga di comando di Google Cloud.

gcloud

Per creare un pool di nodi con GPU, esegui il comando seguente:

gcloud container node-pools create POOL_NAME \
  --accelerator type=GPU_TYPE,count=AMOUNT \
  --zone COMPUTE_ZONE --cluster CLUSTER_NAME \
  [--num-nodes 3 --min-nodes 0 --max-nodes 5 --enable-autoscaling
  --machine-type a2-highgpu-1g]

Sostituisci quanto segue:

  • POOL_NAME: il nome che scegli per il pool di nodi.
  • GPU_TYPE: tipo di GPU, nvidia-tesla-k80, nvidia-tesla-p100, nvidia-tesla-p4, nvidia-tesla-v100, nvidia-tesla-t4 o nvidia-tesla-a100.
  • AMOUNT: il numero di GPU da collegare ai nodi nel pool.
  • COMPUTE_ZONE: la zona di calcolo in cui creare il pool di nodi, ad esempio us-central1-c. Il cluster deve essere già eseguito nella zona specificata.
  • CLUSTER_NAME: il nome del cluster in cui creare il pool di nodi.

Le opzioni aggiuntive sono le seguenti:

  • --num-nodes specifica il numero iniziale di nodi da creare.
  • --min-nodes specifica il numero minimo di nodi da eseguire in un dato momento.
  • --max-nodes specifica il numero massimo di nodi che possono essere eseguiti.
  • --enable-autoscaling consente la scalabilità automatica del pool di nodi quando la domanda del carico di lavoro cambia.
  • --machine-type specifica il tipo di macchina per i nodi. Obbligatorio per le GPU nvidia-tesla-a100, che possono essere eseguite solo su tipi di macchine A2.

Ad esempio, il comando seguente crea un pool di nodi a scalabilità automatica, p100, con due GPU P100, nel cluster p100-cluster:

gcloud container node-pools create p100 \
  --accelerator type=nvidia-tesla-p100,count=2 \
  --zone us-central1-c --cluster p100-cluster \
  --num-nodes 3 --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.

    Vai a Google Kubernetes Engine

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

  3. Fai clic su Aggiungi pool di nodi.

  4. Se vuoi, 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 Famiglia di macchine, fai clic su GPU.

  8. Seleziona un tipo di GPU e un numero di GPU da eseguire su ogni nodo.

  9. Leggi l'avviso e seleziona Sono consapevole delle limitazioni.

  10. Configura la macchina come preferisci.

  11. Fai clic su Crea.

Creazione di un nuovo cluster di zona con GPU

Crei un cluster di zona che esegue le GPU utilizzando la console o l'interfaccia a riga di comando di Google Cloud.

gcloud

Per creare un cluster di zona con GPU in esecuzione nel pool di nodi predefinito, esegui il comando seguente:

gcloud container clusters create CLUSTER_NAME \
  --accelerator type=GPU_TYPE,count=AMOUNT \
  --zone COMPUTE_ZONE

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome che scegli per il cluster.
  • GPU_TYPE: tipo di GPU, nvidia-tesla-k80, nvidia-tesla-p100, nvidia-tesla-p4, nvidia-tesla-v100, nvidia-tesla-t4 o nvidia-tesla-a100.
  • AMOUNT: il numero di GPU da eseguire nel pool di nodi predefinito.
  • COMPUTE_ZONE: zona di calcolo del cluster, ad esempio us-central1-c.

Ad esempio, il comando seguente crea un cluster, p100, con tre nodi (l'impostazione predefinita quando --num-nodes viene omesso) e due GPU P100 per nodo:

gcloud container clusters create p100 \
  --accelerator type=nvidia-tesla-p100,count=2 \
  --zone us-central1-c

console

  1. Vai al modello di cluster GPU Accelerated Computing.

    Vai al modello GPU Accelerated Computing

  2. Configura il cluster come preferisci. Personalizza il pool di nodi GPU o aggiungi pool di nodi GPU aggiuntivi.

  3. Leggi l'avviso e seleziona Sono consapevole delle limitazioni.

  4. Fai clic su Crea.

Creazione di un nuovo cluster a livello di area geografica con GPU

Per impostazione predefinita, i cluster a livello di area geografica creano nodi in tre zone di un'area geografica. Tuttavia, nessuna area geografica Google Cloud ha GPU in tutte e tre le zone. Quando crei un cluster a livello di area geografica con GPU, devi specificare le zone utilizzando il comando --node-locations. Puoi utilizzare questo comando anche dopo aver creato il cluster. Per sapere quali zone hanno una GPU, consulta Disponibilità.

Puoi creare un cluster GPU a livello di area geografica utilizzando l'interfaccia a riga di comando o la console di Google Cloud.

gcloud

Per creare un cluster a livello di area geografica con GPU, esegui il comando seguente:

gcloud container clusters create CLUSTER_NAME \
  --accelerator type=GPU_TYPE,count=AMOUNT \
  --region COMPUTE_REGION \
  --node-locations COMPUTE_ZONE,COMPUTE_ZONE1

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome che scegli per il cluster.
  • GPU_TYPE: tipo di GPU: nvidia-tesla-k80, nvidia-tesla-p100, nvidia-tesla-p4, nvidia-tesla-v100, nvidia-tesla-t4 o nvidia-tesla-a100.
  • AMOUNT: il numero di GPU da eseguire per nodo.
  • COMPUTE_REGION: l'area geografica del cluster, ad esempio us-central1.
  • COMPUTE_ZONE,COMPUTE_ZONE1,[...]: le zone in cui creare i nodi. Le zone devono trovarsi nello stesso COMPUTE_REGION dei piani di controllo del cluster, specificati dal flag --region. Queste zone devono avere i tipi di GPU specificati.

Ad esempio, il comando seguente crea un cluster, p100, con tre nodi (l'impostazione predefinita quando viene omesso --num-nodes) e due GPU P100 per nodo, in due zone all'interno di us-central1:

gcloud container clusters create p100 \
  --accelerator type=nvidia-tesla-p100,count=2 \
  --region us-central1 \
  --node-locations us-central1-a,us-central1-c

console

  1. Vai al modello di cluster GPU Accelerated Computing.

    Vai al modello GPU Accelerated Computing

  2. In Tipo di località, seleziona Regionale.

  3. Nell'elenco a discesa Regione, seleziona l'area geografica desiderata.

  4. Configura il cluster come preferisci. Personalizza il pool di nodi GPU o aggiungi pool di nodi GPU aggiuntivi.

  5. Leggi l'avviso e seleziona Sono consapevole delle limitazioni.

  6. Fai clic su Crea.

Installazione dei driver per dispositivi GPU NVIDIA

Dopo aver aggiunto i nodi GPU al cluster, devi installare i driver di dispositivo NVIDIA's sui nodi. Google fornisce un DaemonSet che puoi applicare per installare i driver. Sui nodi GPU che utilizzano immagini di Container-Optimized OS, hai anche la possibilità di scegliere tra la versione predefinita del driver della GPU o una versione più recente. La tabella seguente descrive le versioni del driver GPU disponibili per versioni specifiche di GKE.

Fai riferimento alla sezione di seguito per le istruzioni di installazione per i nodi Container-Optimized OS (COS) e Ubuntu.

COS

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

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 seguente), esegui il comando seguente:

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 visualizza la capacità GPU NVIDIA tramite le API Kubernetes.

La tabella riportata di seguito elenca la versione di GKE supportata da ciascuna versione del driver Nvidia:

Versione GKE Driver Nvidia
1.20 e versioni successive 450.119.04(predefinito), 470.82.01
1.18 e versioni successive 450.119.04(predefinito)
Da 1,14 in su 418.67(valore predefinito)

Ubuntu

Tieni presente che il supporto GPU richiede la versione 1.11.3 o successiva per i nodi Ubuntu.

Per eseguire il deployment dell'installazione DaemonSet, esegui il comando seguente:

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 visualizza la capacità GPU NVIDIA tramite le API Kubernetes.

La tabella riportata di seguito elenca la versione di GKE supportata da ciascuna versione del driver Nvidia:

Versione GKE Driver Nvidia
1.19.8-gke.1200 e versioni successive 450.102.04
1.14.6-gke.13 e versioni successive 418,74
1.14.6-gke.12 e versioni precedenti 410,104
1.13.9-gke.11 e versioni successive 418,74
1.13.9-gke.10 e versioni precedenti 410,104

Utilizzo del provisioning automatico dei nodi con GPU

Quando utilizzi il provisioning automatico dei nodi con GPU, i pool di nodi di cui è stato eseguito il provisioning automatico per impostazione predefinita non dispongono di ambiti sufficienti per eseguire l'installazione del DaemonSet. Per concedere gli ambiti obbligatori, modifica gli ambiti predefiniti per il provisioning automatico dei nodi per aggiungere logging_write, monitoring, devstorage.read_only e compute, ad esempio nell'esempio seguente:

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

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

Configurazione dei pod per consumare le GPU

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

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

Di seguito è riportato 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 acceleratore GPU per cluster, devi creare più pool di nodi, ciascuno con il proprio tipo di acceleratore. GKE collega un selettore dei nodi univoco ai nodi GPU 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 o nvidia-tesla-a100.

Puoi scegliere come target determinati tipi di GPU aggiungendo questo selettore di nodi alla specifica del pod di 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 # or nvidia-tesla-p100 or nvidia-tesla-p4 or nvidia-tesla-v100 or nvidia-tesla-t4 or nvidia-tesla-a100

Informazioni sulle librerie CUDA

CUDA® è la piattaforma di calcolo parallelo e il modello di programmazione parallelo di NVIDIA per le GPU. I driver dei dispositivi NVIDIA che installi nel cluster includono le librerie CUDA.

Le librerie CUDA e le utilità di debug sono disponibili all'interno del container, rispettivamente, in /usr/local/nvidia/lib64 e /usr/local/nvidia/bin.

Le applicazioni CUDA in esecuzione in pod che consumano GPU NVIDIA devono individuare in modo dinamico le librerie CUDA. È necessario includere /usr/local/nvidia/lib64 nella variabile di ambiente LD_LIBRARY_PATH.

Per verificare la versione minima del driver GPU necessaria per la tua versione di CUDA, consulta Versioni del driver CUDA e del driver compatibile. Assicurati che la versione patch GKE in esecuzione sui tuoi nodi includa una versione del driver GPU compatibile con la versione CUDA scelta. Per un elenco delle versioni dei driver GPU associate alla versione di GKE, consulta la corrispondente pagina del sistema operativo ottimizzato per i container, collegata tramite la tabella delle versioni correnti di GKE.

Monitoraggio dei nodi GPU

GKE espone le seguenti metriche di Cloud Monitoring per i container che utilizzano le GPU. Puoi utilizzare queste metriche per monitorare le prestazioni dei tuoi carichi di lavoro GPU:

  • Duty Cycle (container/accelerator/duty_cycle): percentuale di tempo durante il periodo campione precedente (10 secondi) durante il quale l'acceleratore era in fase di elaborazione attiva. Tra 1 e 100.
  • Utilizzo memoria (container/accelerator/memory_used): quantità di memoria dell'acceleratore allocata in byte.
  • Memory Capacity (container/accelerator/memory_total): Memoria totale in byte.

Queste metriche sono rese disponibili in Cloud Monitoring.

Per ulteriori informazioni sul monitoraggio dei cluster e delle relative risorse, consulta Monitoraggio.

Visualizza metriche di utilizzo

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

Per visualizzare l'utilizzo della GPU dei carichi di lavoro:

  1. Vai alla pagina Carichi di lavoro nella console.

    Vai a Carichi di lavoro

  2. Seleziona il carico di lavoro desiderato.

La dashboard Carichi di lavoro visualizza grafici relativi all'utilizzo e alla capacità della memoria GPU e al ciclo di servizio delle GPU.

Passaggi successivi