Questa pagina fornisce istruzioni su come aumentare l'utilizzo e ridurre i costi eseguendo GPU a più istanze. Con questa configurazione, esegui il partizionamento di una scheda grafica NVIDIA A100 o H100 di un'unità di elaborazione (GPU) per condividere una singola GPU in più container Google Kubernetes Engine (GKE).
Prima di leggere questa pagina, assicurati di conoscere i concetti di Kubernetes come pod, nodi, deployment e spazi dei nomi, nonché i concetti di GKE come pool di nodi, scalabilità automatica e provisioning automatico.
Introduzione
Kubernetes alloca una GPU completa per contenitore anche se il contenitore necessita solo di una frazione della GPU per il proprio carico di lavoro, il che potrebbe comportare uno spreco di risorse e un aumento dei costi, soprattutto se utilizzi GPU potenti di ultima generazione. Per migliorare l'utilizzo delle GPU, le GPU multi-istanza consentono di partizionare una singola GPU supportata in un massimo di sette sezioni. Ogni slice può essere allocato a un container sul nodo in modo indipendente, per un massimo di sette container per GPU. Le GPU multi-istanza forniscono isolamento tra i carichi di lavoro e QoS coerente e prevedibile per tutti di container in esecuzione sulla GPU.
Per CUDA® nelle applicazioni, le GPU multi-istanza sono ampiamente trasparenti. Ogni partizione GPU viene visualizzato come una normale risorsa GPU e il modello di programmazione rimane invariato.
Per ulteriori informazioni sulle GPU a più istanze, consulta la guida dell'utente per le GPU a più istanze NVIDIA.
GPU supportate
I seguenti tipi di GPU supportano le GPU a più istanze:
- NVIDIA A100 (40 GB)
- NVIDIA A100 (80GB)
NVIDIA H100 (80 GB)
Partizioni GPU multiistanza
Le GPU A100 e H100 sono costituite da sette unità di calcolo e otto unità di memoria, che possono essere suddivise in istanze GPU di dimensioni diverse. Le dimensioni delle partizioni GPU utilizzano
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 di multiprocessori in streaming sulla GPU) e un'unità di memoria (5 GB). La
per le GPU possono essere specificate durante il deployment
carico di lavoro o quando crei un cluster Standard.
La tabella di partizione nella guida dell'utente della GPU multi-istanza NVIDIA elenca tutte le diverse dimensioni delle partizioni GPU, nonché la quantità di risorse di calcolo e memoria disponibili su ogni partizione GPU. La tabella mostra anche il numero di istanze GPU per ogni delle partizioni che possono essere create sulla GPU.
La tabella seguente elenca le dimensioni delle partizioni supportate da GKE:
Dimensione 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 (80 GB) (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 |
Ogni GPU su ogni nodo all'interno di un pool di nodi è partizionata nello 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 dimensione1g.5gb
su ogni GPU. Poiché su ciascun nodo ci sono quattro GPU, sono disponibili 28
1g.5gb
partizioni GPU disponibili su ciascun nodo. Poiché il
pool di nodi contiene 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ù tipi
della 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
pool di nodi: uno con la dimensione della partizione GPU impostata 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 diverse dimensioni della partizione.
Ogni nodo è etichettato con le dimensioni delle partizioni GPU disponibili sul
nodo. Questa etichettatura consente ai carichi di lavoro di scegliere come target i nodi con la GPU necessaria
dimensioni della partizione. Ad esempio, su un nodo con 1g.5gb
istanze GPU, il nodo viene
etichettato come:
cloud.google.com/gke-gpu-partition-size=1g.5gb
Come funziona
Per utilizzare le GPU a più istanze, svolgi 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 dei container utilizzando GPU multi-istanza.
Prezzi
Le GPU multi-istanza sono esclusive delle GPU A100 e H100 e sono soggette ai prezzi delle GPU corrispondenti, oltre a qualsiasi altro prodotto utilizzato per eseguire i carichi di lavoro. Puoi allegare solo intere GPU in nodi nel cluster per il partizionamento. Per i prezzi delle GPU informazioni, consulta la pagina sui prezzi delle GPU.
Limitazioni
- L'utilizzo di partizioni GPU multi-istanza con GKE non è consigliato per i carichi di lavoro non attendibili.
- Le partizioni GPU con scalabilità automatica e provisioning automatico sono completamente supportate su GKE versione 1.20.7-gke.400 o successive. Solo nelle versioni precedenti i pool di nodi con almeno un nodo possono essere scalati automaticamente in base alla domanda per specifiche di dimensioni delle partizioni GPU da carichi di lavoro.
- Le metriche relative all'utilizzo della GPU (ad esempio
duty_cycle
) non sono disponibili per le GPU a più istanze. - L'istanza multi-istanza suddivide una GPU fisica in istanze discrete, ciascuna delle quali è isolata dalle altre a livello di hardware. Un contenitore che utilizza un'istanza GPU multi-istanza può accedere solo alle risorse di CPU e memoria disponibili per quell'istanza.
- Un pod può utilizzare fino a una sola istanza GPU a più istanze.
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à,
install e poi
inizializzare
con gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo
gcloud components update
.
- In Autopilot, sono supportate GPU multi-istanza 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 GPU multi-istanza con Autopilot, puoi scoprire di più sull'utilizzo delle GPU con Autopilot nella pagina Eseguire il deployment dei carichi di lavoro GPU in Autopilot.
- GKE assegna la classe di calcolo
Accelerator
a tutti i carichi di lavoro GPU multi-istanza nei cluster Autopilot.
Crea un cluster con GPU multiistanza abilitate
Se utilizzi GKE Standard, devi attivare le GPU con più istanze nel cluster. Cluster Autopilot che eseguono la versione 1.29.3-gke.1093000 e abilitare GPU multiistanze per impostazione predefinita. Per utilizzare GPU multi-istanza Autopilot, consulta Eseguire il deployment dei container utilizzando una 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
o nvidia-h100-80gb
.
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 della GPU pari a 1g.5gb
, che crea sette partizioni su ogni GPU. Puoi anche utilizzare una delle dimensioni delle partizioni GPU supportate menzionate
in precedenza.
Puoi usare Google Cloud CLI o Terraform.
gcloud
Crea un cluster con GPU a più istanze abilitate:
gcloud container clusters create CLUSTER_NAME \
--project=PROJECT_ID \
--zone ZONE \
--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 progetto Google Cloud.ZONE
: la zona di calcolo per il piano di controllo del cluster.CLUSTER_VERSION
: la versione deve essere1.19.7-gke.2503
o successiva.DRIVER_VERSION
: la versione del driver NVIDIA da installare. Può essere uno dei seguenti:default
: installa la versione del driver predefinita per GKE completamente gestita.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 GPU multi-istanza abilitate utilizzando Terraform, consulta al seguente esempio:
Per scoprire di più sull'utilizzo di Terraform, consulta Assistenza 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 disattivare l'installazione automatica dei driver durante la creazione del cluster o se utilizzi una versione di GKE precedente alla 1.27.2-gke.1200, devi installare manualmente un driver NVIDIA compatibile al termine della creazione. Le GPU a più istanze richiedono una versione del driver NVIDIA 450.80.02 o versioni successive.
Una volta installato il driver, viene attivata la modalità GPU a più istanze. Se driver installati automaticamente, i nodi si riavviano quando il 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 il seguente comando per verificare che la capacità e il numero allocatile delle risorse nvidia.com/gpu
siano pari a 7:
kubectl describe nodes
Ecco l'output del comando:
...
Capacity:
...
nvidia.com/gpu: 7
Allocatable:
...
nvidia.com/gpu: 7
Esegui il deployment dei container utilizzando GPU multi-istanza
Sul nodo puoi eseguire il deployment di un solo container per dispositivo GPU multi-istanza. In questo esempio, con una dimensione della partizione pari a 1g.5gb
, sono disponibili sette partizioni GPU multi-istanza sul nodo. Di conseguenza, puoi eseguire il deployment di un massimo di sette
contenuti 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 Ad esempio, ci sono sette container, ognuno dei quali riceve una GPU della partizione di testo. Questo esempio imposta anchecloud.google.com/gke-gpu-partition-size
selettore di nodi per scegliere come target i nodi con1g.5gb
partizioni GPU.Autopilot
cat <<EOF | kubectl apply -f - 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
Il file manifest esegue le seguenti operazioni:
- Richiede il tipo di GPU
nvidia-tesla-a100
impostando il selettore di nodicloud.google.com/gke-accelerator
. - Suddivide la GPU in parti di dimensioni
1g.5gb
. - Collega una singola GPU al nodo impostando il selettore di nodi
cloud.google.com/gke-accelerator-count
.
Standard
cat <<EOF | kubectl apply -f - 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
Il file manifest esegue le seguenti operazioni:
- 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 GPU, utilizzando il nome di qualsiasi 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ù sull'architettura multitenancy del cluster.
- Scopri di più sulle best practice per l'architettura multi-tenancy aziendale.