Questa pagina fornisce istruzioni su come aumentare l'utilizzo e ridurre i costi eseguendo GPU multi-istanza. Con questa configurazione, partizioni una GPU (Graphics Processing Unit) NVIDIA A100, H100, H200 o B200 per condividere una singola GPU tra più container su Google Kubernetes Engine (GKE).
Prima di leggere questa pagina, assicurati di conoscere i concetti di Kubernetes come pod, nodi, deployment, spazi dei nomi e di conoscere i concetti di GKE come node pool, scalabilità automatica e provisioning automatico.
Introduzione
Kubernetes alloca una GPU completa per container anche se il container ha bisogno solo di una frazione della GPU per il suo workload, il che potrebbe portare a uno spreco di risorse e a un superamento dei costi, soprattutto se utilizzi l'ultima generazione di GPU potenti. Per migliorare l'utilizzo della GPU, le GPU multi-istanza consentono di partizionare una singola GPU supportata in un massimo di sette sezioni. Ogni slice può essere allocata a un container sul nodo in modo indipendente, per un massimo di sette container per GPU. Le GPU multi-istanza forniscono l'isolamento hardware tra i carichi di lavoro e una QoS coerente e prevedibile per tutti i container in esecuzione sulla GPU.
Per le applicazioni CUDA®, le GPU multi-istanza sono in gran parte trasparenti. Ogni partizione GPU viene visualizzata come una normale risorsa GPU e il modello di programmazione rimane invariato.
Per ulteriori informazioni sulle GPU multi-istanza, consulta la guida per l'utente delle GPU multi-istanza NVIDIA.
GPU supportate
I seguenti tipi di GPU supportano le GPU multi-istanza:
- NVIDIA A100 (40GB)
- NVIDIA A100 (80GB)
- NVIDIA H100 (80GB)
- NVIDIA H200 (141GB)
- NVIDIA B200 (180 GB) (1.32.2-gke.1586000 e versioni successive)
Partizioni GPU multi-istanza
Ogni GPU A100, H100, H200 e B200 è costituita da sette unità di calcolo e otto unità di memoria, che puoi partizionare in istanze GPU di dimensioni variabili. Per configurare le dimensioni delle partizioni GPU, utilizza la seguente sintassi:
[compute]g.[memory]gb
. Ad esempio, una dimensione della partizione GPU di 1g.5gb
si riferisce a
un'istanza GPU con un'unità di calcolo (1/7 dei multiprocessori di streaming sulla
GPU) e un'unità di memoria (5 GB). Le dimensioni della partizione per le GPU possono essere
specificate quando esegui il deployment di un workload Autopilot o quando crei un
cluster Standard.
La tabella di partizionamento nella guida utente della GPU NVIDIA multi-istanza elenca tutte le diverse dimensioni delle partizioni GPU, insieme alla quantità di risorse di calcolo e di memoria disponibili in ogni partizione GPU. La tabella mostra anche il numero di istanze GPU per ogni dimensione di partizione che può essere creata sulla GPU.
La tabella seguente elenca le dimensioni delle partizioni supportate da GKE:
Dimensioni partizione | Istanze GPU |
---|---|
GPU: NVIDIA A100 (40GB) (nvidia-tesla-a100 ) |
|
1g.5gb |
7 |
2g.10gb |
3 |
3g.20gb |
2 |
7g.40gb |
1 |
GPU: NVIDIA A100 (80GB) (nvidia-a100-80gb ) |
|
1g.10gb |
7 |
2g.20gb |
3 |
3g.40gb |
2 |
7g.80gb |
1 |
GPU: NVIDIA H100 (80 GB) (nvidia-h100-80gb e nvidia-h100-mega-80gb ) |
|
1g.10gb |
7 |
1g.20gb |
4 |
2g.20gb |
3 |
3g.40gb |
2 |
7g.80gb |
1 |
GPU: NVIDIA H200 (141GB) (nvidia-h200-141gb ) |
|
1g.18gb |
7 |
1g.35gb |
4 |
2g.35gb |
3 |
3g.71gb |
2 |
4g.71gb |
1 |
7g.141gb |
1 |
GPU: NVIDIA B200 (nvidia-b200 ) |
|
1g.23gb |
7 |
1g.45gb |
4 |
2g.45gb |
3 |
3g.90gb |
2 |
4g.90gb |
1 |
7g.180gb |
1 |
Ogni GPU su ogni nodo all'interno di un pool di nodi viene partizionata allo stesso modo. Ad esempio, considera un pool di nodi con due nodi, quattro GPU su ogni nodo e una dimensione della partizione di 1g.5gb
. GKE crea sette partizioni di dimensioni
1g.5gb
su ogni GPU. Poiché su ogni nodo sono presenti quattro GPU, su ogni nodo sono disponibili 28
1g.5gb
partizioni GPU. Poiché nel pool di nodi sono presenti due nodi, nell'intero pool di nodi sono disponibili un totale di 56 partizioni GPU 1g.5gb
.
Per creare un cluster GKE Standard con più di un tipo
di partizione GPU, devi creare più pool di nodi. Ad esempio, se vuoi nodi con partizioni GPU 1g.5gb
e 3g.20gb
in un cluster, devi creare due node pool: uno con le dimensioni della partizione GPU impostate su 1g.5gb
e l'altro con 3g.20gb
.
Un cluster GKE Autopilot crea automaticamente nodi con la configurazione di partizione corretta quando crei carichi di lavoro che richiedono dimensioni di partizione diverse.
Ogni nodo è etichettato con le dimensioni delle partizioni GPU disponibili sul
nodo. Questa etichettatura consente ai workload di scegliere come target i nodi con le dimensioni della partizione GPU necessarie. Ad esempio, su un nodo con 1g.5gb
istanze GPU, il nodo è
etichettato come:
cloud.google.com/gke-gpu-partition-size=1g.5gb
Come funziona
Per utilizzare le GPU multi-istanza, esegui le seguenti attività:
- Crea un cluster con GPU multi-istanza abilitate.
- Installa manualmente i driver.
- Verifica quante risorse GPU sono presenti sul nodo.
- Esegui il deployment di container utilizzando GPU multi-istanza.
Prezzi
Le GPU multi-istanza sono esclusive delle GPU A100, H100, H200 e B200 e sono soggette ai prezzi delle GPU corrispondenti, oltre a eventuali altri prodotti utilizzati per eseguire i tuoi carichi di lavoro. Per il partizionamento, puoi collegare solo GPU intere ai nodi del cluster. Per informazioni sui prezzi delle GPU, consulta la pagina Prezzi delle GPU.
Limitazioni
- L'utilizzo di partizioni GPU multi-istanza con GKE non è consigliato per i carichi di lavoro non attendibili.
- Il provisioning automatico e la scalabilità automatica delle partizioni GPU sono completamente supportati su GKE versione 1.20.7-gke.400 o successive. Nelle versioni precedenti, solo i node pool con almeno un nodo possono essere scalati automaticamente in base alla domanda di dimensioni specifiche delle partizioni GPU dai workload.
- Le metriche di utilizzo della GPU (ad esempio
duty_cycle
) non sono disponibili per le GPU multi-istanza. - La funzionalità multi-istanza divide una GPU fisica in istanze discrete, ognuna delle quali è isolata dalle altre a livello hardware. Un container che utilizza un'istanza GPU multi-istanza può accedere solo alle risorse di CPU e memoria disponibili per quell'istanza.
- Un pod può utilizzare al massimo un'istanza GPU multi-istanza.
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à,
installala e poi
inizializza
gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima versione
eseguendo
gcloud components update
.
- In Autopilot, le GPU multi-istanza sono supportate in GKE versione 1.29.3-gke.1093000 e successive.
- Devi disporre di una quota GPU NVIDIA A100 sufficiente. Consulta Richiesta di aumento della quota.
- Se vuoi utilizzare le GPU multi-istanza con Autopilot, puoi scoprire di più sull'utilizzo delle GPU con Autopilot nella pagina Esegui il deployment dei carichi di lavoro GPU in Autopilot.
- GKE assegna la classe di computing
Accelerator
a tutti i carichi di lavoro GPU multi-istanza nei cluster Autopilot.
Crea un cluster con GPU multi-istanza abilitate
Se utilizzi GKE Standard, devi abilitare le GPU multi-istanza nel cluster. I cluster Autopilot che eseguono la versione 1.29.3-gke.1093000 e successive abilitano le GPU multi-istanza per impostazione predefinita. Per utilizzare le GPU multi-istanza in Autopilot, consulta la sezione Deployment di container utilizzando GPU multi-istanza di questa pagina.
Quando crei un cluster Standard con GPU multi-istanza, devi specificare gpuPartitionSize
insieme a acceleratorType
e acceleratorCount
.
acceleratorType
deve essere nvidia-tesla-a100
, nvidia-a100-80gb
,
nvidia-h100-80gb
, nvidia-h200-141gb
o nvidia-b200
.
L'esempio seguente mostra come creare un cluster GKE con un nodo e sette partizioni GPU di dimensioni 1g.5gb
sul nodo. Gli altri passaggi di
questa pagina utilizzano una dimensione della partizione GPU di 1g.5gb
, che crea sette partizioni
su ogni GPU. Puoi anche utilizzare una delle dimensioni di partizione GPU supportate menzionate
in precedenza.
Puoi utilizzare Google Cloud CLI o Terraform.
gcloud
Crea un cluster con GPU multi-istanza abilitate:
gcloud container clusters create CLUSTER_NAME \
--project=PROJECT_ID \
--location CONTROL_PLANE_LOCATION \
--cluster-version=CLUSTER_VERSION \
--accelerator type=nvidia-tesla-a100,count=1,gpu-partition-size=1g.5gb,gpu-driver-version=DRIVER_VERSION \
--machine-type=a2-highgpu-1g \
--num-nodes=1
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del nuovo cluster.PROJECT_ID
: l'ID del tuo Google Cloud progetto.CONTROL_PLANE_LOCATION
: la posizione di Compute Engine del control plane del tuo cluster. Fornisci una regione per i cluster regionali o una zona per i cluster zonali.CLUSTER_VERSION
: la versione deve essere1.19.7-gke.2503
o successiva.DRIVER_VERSION
: la versione del driver NVIDIA da installare. Può corrispondere a uno dei seguenti:default
: installa la versione del driver predefinita 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 cluster. Se omettigpu-driver-version
, questa è l'opzione predefinita.
Terraform
Per creare un cluster con le GPU multi-istanza abilitate utilizzando Terraform, consulta il seguente esempio:
Per scoprire di più sull'utilizzo di Terraform, consulta Supporto di Terraform per GKE.
Connettiti al cluster
Configura kubectl
per connetterti al cluster appena creato:
gcloud container clusters get-credentials CLUSTER_NAME
Installa i driver
Se hai scelto di disabilitare l'installazione automatica dei driver durante la creazione del cluster o se esegui una versione di GKE precedente alla 1.27.2-gke.1200, devi installare manualmente un driver NVIDIA compatibile al termine della creazione. Le GPU multi-istanza richiedono la versione 450.80.02 o successive del driver NVIDIA.
Una volta installato il driver, la modalità GPU multi-istanza viene attivata. Se hai installato automaticamente i driver, i nodi vengono riavviati quando il plug-in del dispositivo GPU inizia a creare partizioni GPU. Se hai installato manualmente i driver, i nodi si riavviano al termine dell'installazione. Il riavvio potrebbe richiedere alcuni minuti.
Verifica quante risorse GPU sono presenti sul nodo
Esegui questo comando per verificare che la capacità e il conteggio allocabile delle risorse nvidia.com/gpu
siano 7:
kubectl describe nodes
Ecco l'output del comando:
...
Capacity:
...
nvidia.com/gpu: 7
Allocatable:
...
nvidia.com/gpu: 7
Deployment di container utilizzando la GPU multi-istanza
Puoi eseguire il deployment di un massimo di un container per dispositivo GPU multi-istanza sul nodo. In
questo esempio, con una dimensione della partizione di 1g.5gb
, sul nodo sono disponibili sette partizioni GPU
multi-istanza. Di conseguenza, puoi eseguire il deployment di un massimo di sette
container che richiedono GPU su questo nodo.
Ecco un esempio che avvia il container
cuda:11.0.3-base-ubi7
ed eseguenvidia-smi
per stampare l'UUID della GPU all'interno del container. In questo esempio, ci sono sette container e ogni container riceve una partizione GPU. Questo esempio imposta anche il selettore di nodicloud.google.com/gke-gpu-partition-size
per scegliere come target i nodi con partizioni GPU1g.5gb
.Autopilot
kubectl apply -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: cuda-simple spec: replicas: 7 selector: matchLabels: app: cuda-simple template: metadata: labels: app: cuda-simple spec: nodeSelector: cloud.google.com/gke-gpu-partition-size: 1g.5gb cloud.google.com/gke-accelerator: nvidia-tesla-a100 cloud.google.com/gke-accelerator-count: "1" containers: - name: cuda-simple image: nvidia/cuda:11.0.3-base-ubi7 command: - bash - -c - | /usr/local/nvidia/bin/nvidia-smi -L; sleep 300 resources: limits: nvidia.com/gpu: 1 EOF
Questo manifest fa quanto segue:
- Richiede il tipo di GPU
nvidia-tesla-a100
impostando il selettore di nodicloud.google.com/gke-accelerator
. - Divide la GPU in partizioni di dimensioni
1g.5gb
. - Collega una singola GPU al nodo impostando il
selettore di nodi
cloud.google.com/gke-accelerator-count
.
Standard
kubectl apply -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: cuda-simple spec: replicas: 7 selector: matchLabels: app: cuda-simple template: metadata: labels: app: cuda-simple spec: nodeSelector: cloud.google.com/gke-gpu-partition-size: 1g.5gb containers: - name: cuda-simple image: nvidia/cuda:11.0.3-base-ubi7 command: - bash - -c - | /usr/local/nvidia/bin/nvidia-smi -L; sleep 300 resources: limits: nvidia.com/gpu: 1 EOF
Questo manifest fa quanto segue:
- Richiede una singola GPU con dimensioni della partizione
1g.5gb
.
- Richiede il tipo di GPU
Verifica che tutti e sette i pod siano in esecuzione:
kubectl get pods
Ecco l'output del comando:
NAME READY STATUS RESTARTS AGE cuda-simple-849c47f6f6-4twr2 1/1 Running 0 7s cuda-simple-849c47f6f6-8cjrb 1/1 Running 0 7s cuda-simple-849c47f6f6-cfp2s 1/1 Running 0 7s cuda-simple-849c47f6f6-dts6g 1/1 Running 0 7s cuda-simple-849c47f6f6-fk2bs 1/1 Running 0 7s cuda-simple-849c47f6f6-kcv52 1/1 Running 0 7s cuda-simple-849c47f6f6-pjljc 1/1 Running 0 7s
Visualizza i log per vedere l'UUID della GPU, utilizzando il nome di un pod del comando precedente:
kubectl logs cuda-simple-849c47f6f6-4twr2
Ecco l'output del comando:
GPU 0: A100-SXM4-40GB (UUID: GPU-45eafa61-be49-c331-f8a2-282736687ab1) MIG 1g.5gb Device 0: (UUID: MIG-GPU-45eafa61-be49-c331-f8a2-282736687ab1/11/0)
Passaggi successivi
- Scopri di più sulle GPU.
- Scopri come configurare la condivisione del tempo sulle GPU.
- Scopri di più sul multi-tenancy del cluster.
- Scopri di più sulle best practice per l'architettura multi-tenancy aziendale.