Informazioni sulle strategie di condivisione delle GPU in GKE


Questa pagina illustra le caratteristiche e i migliori tipi di carichi di lavoro per ogni strategia di condivisione GPU disponibile in Google Kubernetes Engine (GKE), ad esempio GPU multi-istanza, condivisione del tempo delle GPU e NVIDIA MPS.

In questa pagina si presuppone che tu conosca i seguenti argomenti:

Come funzionano le richieste GPU in Kubernetes

Kubernetes consente ai carichi di lavoro di richiedere con precisione la quantità di risorse di cui hanno bisogno per funzionare. Sebbene sia possibile richiedere unità CPU frazionarie per i carichi di lavoro, non può richiedere unità GPU frazionarie. I manifest dei pod devono richiedere risorse GPU numeri interi, il che significa che a un container viene allocata un'intera GPU fisica anche se il container ha bisogno solo di una frazione delle risorse per funzionare in modo corretto. Si tratta di una soluzione inefficiente e può essere costosa, soprattutto quando l'esecuzione più carichi di lavoro con requisiti di GPU bassi simili.

Di conseguenza, ti consigliamo di utilizzare Strategie di condivisione delle GPU per migliorare l'utilizzo delle GPU quando i tuoi carichi di lavoro non utilizzano tutte le risorse GPU.

Quali sono le strategie di condivisione della GPU?

Le strategie di condivisione della GPU consentono a più container di utilizzare in modo efficiente con GPU collegate e risparmi sui costi di gestione. GKE fornisce le seguenti Strategie di condivisione delle GPU:

  • GPU multiistanza: GKE suddivide una singola GPU supportata in un massimo di sette sezioni. Ogni sezione può essere allocata a un container sul nodo in modo indipendente, per un massimo di sette container per GPU. GPU multi-istanza fornisce l'isolamento hardware tra i carichi di lavoro, oltre a servizi qualità del servizio (QoS) prevedibile per tutti i container in esecuzione sulla GPU.
  • Condivisione del tempo delle GPU: GKE utilizza la funzionalità di condivisione del tempo integrata offerta la GPU NVIDIA e lo stack software. A partire dall'architettura Pascal, NVIDIA Le GPU supportano il prerilascio a livello di istruzione. Quando si cambia contesto tra i processi in esecuzione su una GPU, il prerilascio a livello di istruzione di processo ha tempi discreti. La condivisione del tempo della GPU fornisce l'isolamento a livello di software tra i carichi di lavoro in termini di isolamento dello spazio di indirizzi, l'isolamento delle prestazioni ed l'isolamento degli errori.
  • NVIDIA MPS: GKE utilizza Servizio multiprocesso (MPS) di NVIDIA. NVIDIA MPS è un'implementazione alternativa e compatibile con il programma binario dell'API CUDA progettato per consentire in modo trasparente i carichi di lavoro CUDA multi-processo cooperativi di in contemporanea su un singolo dispositivo GPU. La GPU con NVIDIA MPS fornisce isolamento in termini di limiti delle risorse (percentuale di thread attivo e memoria del dispositivo bloccato).

Quale strategia di condivisione della GPU utilizzare

La tabella seguente riassume e confronta le caratteristiche dei modelli disponibili Strategie di condivisione delle GPU:

GPU multi-istanza Condivisione del tempo della GPU NVIDIA MPS
Generale Condivisione parallela di GPU tra container Cambio di contesto rapido Condivisione parallela di GPU tra container
Isolamento Una singola GPU è divisa in un massimo di sette sezioni ogni container sulla stessa GPU fisica dispone di computing, memoria e e la larghezza di banda. Di conseguenza, un container in una partizione ha una la velocità effettiva e la latenza anche quando altri container saturano altri partizioni di Compute Engine.

Ogni container accede all'intera capacità dell'infrastruttura fisica sottostante GPU passando da un processo all'altro in esecuzione su una GPU cambiando contesto.

Tuttavia, la condivisione del tempo non fornisce l'applicazione forzata dei limiti di memoria tra i job condivisi e il rapido cambio di contesto per l'accesso condiviso può introdurre overhead.

NVIDIA MPS ha un isolamento delle risorse limitato, ma ne guadagna di più flessibilità in altre dimensioni, ad esempio tipi di GPU e numero massimo di unità condivise, che semplificano l'allocazione delle risorse.
Adatto a questi carichi di lavoro Consigliata per carichi di lavoro in esecuzione in parallelo e che richiedono una certa resilienza e QoS. Ad esempio, quando esegui carichi di lavoro di inferenza AI, GPU multi-istanza GPU multi-istanza consente eseguire contemporaneamente più query di inferenza per ottenere risposte rapide, senza rallentamenti a vicenda.

Opzione consigliata per e carichi di lavoro interattivi con periodi di inattività. Questi carichi di lavoro non sono conveniente con una GPU completamente dedicata. Utilizzando la condivisione del tempo, i carichi di lavoro accedere rapidamente alla GPU quando è in fase attiva.

GPU la condivisione del tempo è ottimale per scenari che evitano l'inattività delle GPU costose in cui l'isolamento completo e la continuità L'accesso alla GPU potrebbe non essere necessario, ad esempio, quando più utenti eseguono test o carichi di lavoro prototipi.

Carichi di lavoro che utilizzano condivisione del tempo, devono tollerare determinate prestazioni e latenza compromissioni.

Opzione consigliata per l'elaborazione batch per job di piccole dimensioni poiché MPS massimizza la velocità effettiva e l'uso simultaneo di una GPU. MPS consente ai job batch in modo efficiente in parallelo per carichi di lavoro di piccole e medie dimensioni.

NVIDIA MPS è ottimale per i processi cooperativi che agiscono come un singolo un'applicazione. Ad esempio, i job MPI con parallelismo dei ranghi tra MPI. Con questi lavori, ogni piccolo processo CUDA (tipicamente i ranghi MPI) può essere eseguito contemporaneamente sulla GPU per saturare completamente l'intera GPU.

I carichi di lavoro che utilizzano CUDA MPS devono tollerare le limitazioni relative alla protezione della memoria e al contenimento degli errori.

Monitoraggio Le metriche di utilizzo della GPU non sono disponibili per GPU multi-istanza. Utilizzare Cloud Monitoring per monitorare le prestazioni la condivisione del tempo della GPU. Per scoprire di più sulle metriche disponibili, consulta Monitorare la condivisione del tempo della GPU o i nodi NVIDIA MPS. Utilizzare Cloud Monitoring per monitorare le prestazioni la tua NVIDIA MPS. Per scoprire di più sulle metriche disponibili, consulta Monitorare la condivisione del tempo della GPU o i nodi NVIDIA MPS.
Richiedi GPU condivise nei carichi di lavoro Esegui GPU multi-istanza Esegui GPU con condivisione del tempo Esegui GPU con NVIDIA MPS

Se vuoi massimizzare l'utilizzo della GPU, puoi combinare la condivisione della GPU strategie per la condivisione del tempo o NVIDIA MPS per ogni GPU multi-istanza della partizione di testo. Puoi quindi eseguire più container su ogni partizione, con dei container che condividono l'accesso alle risorse su quella partizione. È consigliabile puoi utilizzare una delle seguenti combinazioni:

  • Condivisione del tempo per GPU e GPU a più istanze.
  • GPU a più istanze e NVIDIA MPS.

Come funzionano le strategie di condivisione della GPU

Puoi specificare il numero massimo di container autorizzati a condividere una GPU fisica:

  • Nei cluster Autopilot, questa opzione è configurata nella specifica del carico di lavoro.
  • Sui cluster standard, questa configurazione viene configurata quando crei un nuovo pool di nodi con GPU collegate. Ogni GPU nel pool di nodi viene condivisa in base all'impostazione che hai specificato a livello di pool di nodi.

Le sezioni seguenti spiegano il comportamento di pianificazione e il funzionamento di ciascuna GPU strategia di condivisione.

GPU multi-istanza

Puoi richiedere una GPU multi-istanza nei carichi di lavoro specificando il Etichetta cloud.google.com/gke-gpu-partition-size nella specifica del pod nodeSelector, sotto spec: nodeSelector.

GKE pianifica i carichi di lavoro in base ai nodi disponibili appropriati abbinando queste etichette. Se non sono disponibili nodi appropriati, GKE utilizza la scalabilità automatica e il provisioning automatico dei nodi per creare nuovi nodi o pool di nodi corrispondenti dell'etichetta.

Condivisione del tempo della GPU o NVIDIA MPS

Puoi richiedere la condivisione del tempo della GPU o NVIDIA MPS nei carichi di lavoro specificando il seguire le etichette nel campo della specifica del pod nodeSelector, in spec:nodeSelector.

  • cloud.google.com/gke-max-shared-clients-per-gpu: seleziona i nodi che consentono con un numero specifico di client con cui condividere la GPU sottostante.
  • cloud.google.com/gke-gpu-sharing-strategy: seleziona i nodi che utilizzano con una strategia di condivisione del tempo o NVIDIA MPS per GPU.

La tabella seguente descrive come cambia il comportamento di pianificazione in base alla combinazione di nodi delle etichette specificate nei tuoi manifest.

Etichette nodo
cloud.google.com/gke-max-shared-clients-per-gpu

e

cloud.google.com/gke-gpu-sharing-strategy

GKE pianifica i carichi di lavoro nei nodi disponibili corrispondenti entrambe le etichette.

Se non ci sono nodi disponibili, GKE utilizza la scalabilità automatica il provisioning automatico dei nodi per creare nuovi nodi o pool di nodi le etichette.

Solo cloud.google.com/gke-max-shared-clients-per-gpu

Autopilot: GKE rifiuta il carico di lavoro.

Standard:GKE pianifica i carichi di lavoro nei nodi disponibili corrispondenti l'etichetta. Se non sono disponibili nodi, GKE utilizza la scalabilità automatica il provisioning automatico per creare nuovi nodi o pool di nodi corrispondenti all'etichetta. Di ai nodi predefiniti di cui è stato eseguito il provisioning automatico vengono assegnati la seguente etichetta e valore per ogni strategia:

  • Condivisione del tempo delle GPU: cloud.google.com/gke-gpu-sharing-strategy=TIME_SHARING
  • NVIDIA MPS: cloud.google.com/gke-gpu-sharing-strategy=MPS
Solo cloud.google.com/gke-gpu-sharing-strategy

Autopilot: GKE rifiuta il carico di lavoro.

Standard:GKE pianifica i carichi di lavoro nei nodi disponibili che utilizzano strategie di condivisione specifiche.

  • Se esistono più pool di nodi condivisi con valori diversi per cloud.google.com/gke-max-shared-clients-per-gpu, il carico di lavoro può essere pianificato su qualsiasi nodo disponibile.
  • Se ci sono nessun nodo disponibile in nessun pool di nodi, il gestore della scalabilità automatica dei cluster fa lo scale up il pool di nodi con il valore più basso cloud.google.com/gke-max-shared-clients-per-gpu.
  • Se tutti i pool di nodi hanno raggiunto la capacità massima, il provisioning automatico dei nodi crea nuovo pool di nodi con il valore predefinito cloud.google.com/gke-max-shared-clients-per-gpu=2

Il processo di richiesta delle GPU che completi è lo stesso per la condivisione del tempo e Strategia NVIDIA MPS.

Se stai sviluppando applicazioni GPU eseguite su GPU condivisione del tempo o NVIDIA MPS, puoi richiedere una sola GPU per ogni container. GKE rifiuta le richieste per più GPU in un del container per evitare comportamenti imprevisti. Inoltre, il numero di GPU richieste con condivisione del tempo, mentre NVIDIA MPS non misura la potenza di calcolo disponibili per il container.

La tabella seguente mostra cosa aspettarti quando richiedi quantità specifiche di GPU.

Richieste GPU che si applicano alla condivisione del tempo delle GPU e a NVIDIA MPS
Una condivisione del tempo della GPU o NVIDIA MPS per container GKE consente la richiesta, anche se il nodo ha una GPU fisica o più GPU fisiche.
Più di una condivisione del tempo della GPU per container

GKE rifiuta la richiesta.

Questo comportamento è lo stesso quando ne richiedi più di uno GPU multi-istanza in un container, perché ogni istanza GPU è considerata una GPU fisica discreta.

Più di un NVIDIA MPS per container

Basata su il numero di GPU fisiche nel nodo, GKE esegue seguenti:

  • GKE consente la richiesta quando ha una sola GPU fisica.
  • GKE rifiuta quando il nodo ha più GPU fisiche. Questo comportamento è lo stesso quando ne richiedi più di uno GPU multi-istanza in un container, perché ogni istanza GPU è considerata una GPU fisica discreta.

Se GKE rifiuta il carico di lavoro, viene visualizzato un messaggio di errore simile a:

status:
  message: 'Pod Allocate failed due to rpc error: code = Unknown desc = [invalid request
    for sharing GPU (time-sharing), at most 1 nvidia.com/gpu can be requested on GPU nodes], which is unexpected'
  phase: Failed
  reason: UnexpectedAdmissionError

Monitora la condivisione del tempo della GPU o i nodi NVIDIA MPS

Utilizza Cloud Monitoring per monitorare le prestazioni dei tuoi Condivisione del tempo della GPU o nodi NVIDIA MPS. GKE invia metriche per ogni Nodo GPU a Cloud Monitoring. Queste metriche relative alla condivisione del tempo della GPU o ai nodi NVIDIA MPS si applicano a livello di nodo (node/accelerator/).

Puoi controllare le seguenti metriche per ogni nodo NVIDIA MPS o con condivisione del tempo della GPU In Cloud Monitoring:

  • Ciclo di servizio (node/accelerator/duty_cycle): percentuale di tempo nel corso l'ultimo periodo campione (10 secondi) durante il quale il nodo GPU è in fase di elaborazione attiva. Varia da 1% a 100%.
  • Utilizzo memoria (node/accelerator/memory_used): quantità dell'acceleratore di memoria allocata in byte per ogni nodo GPU.
  • Capacità memoria (node/accelerator/memory_total): acceleratore totale in byte per ogni nodo GPU.

Queste metriche sono diverse dalle metriche per GPU normali che non sono con condivisione temporale o nodi NVIDA MPS. Le metriche per GPU fisiche normali applica a livello di container (container/accelerator) e non vengono raccolti per i container pianificati su una GPU che utilizza la condivisione del tempo della GPU o NVIDIA MPS.

Passaggi successivi