Puoi attivare e gestire le risorse dell'unità di elaborazione grafica (GPU) sui tuoi container. Ad esempio, potresti preferire eseguire notebook di intelligenza artificiale (AI) e machine learning (ML) in un ambiente GPU. Per eseguire i carichi di lavoro dei container GPU, devi disporre di un cluster Kubernetes che supporti i dispositivi GPU. Il supporto GPU è abilitato per impostazione predefinita per i cluster Kubernetes per cui sono state sottoposte a provisioning macchine GPU.
Questo documento è destinato agli sviluppatori di applicazioni all'interno del gruppo di operatori di applicazioni responsabili della creazione di carichi di lavoro delle applicazioni per la propria organizzazione. Per saperne di più, consulta la documentazione relativa ai segmenti di pubblico per GDC con air gap.
Prima di iniziare
Per completare le attività descritte in questo documento, devi richiedere le autorizzazioni necessarie e preparare l'ambiente.
Richiedere ruoli IAM
Devi disporre di ruoli specifici per ottenere le autorizzazioni necessarie per eseguire il deployment delle GPU nei tuoi contenitori. I ruoli necessari dipendono dal fatto che tu stia lavorando all'interno di un cluster condiviso con ambito organizzazione o di un cluster standard con ambito progetto. Per maggiori informazioni, consulta Configurazioni del cluster Kubernetes.
Ruoli del cluster condivisi
Per verificare i pool di nodi supportati dalla GPU e distribuire carichi di lavoro GPU in un cluster condiviso, richiedi i seguenti ruoli in base all'attività da eseguire:
- Amministratore cluster utente (
user-cluster-admin): crea, elimina, modifica o visualizza le risorse di un cluster condiviso ospitato sul server API di gestione. Questo ruolo ti consente di controllare le GPU nel cluster condiviso e non è vincolato allo spazio dei nomi del progetto. - Amministratore spazio dei nomi (
namespace-admin): crea, elimina, modifica o visualizza le risorse di un cluster condiviso ospitato nel progetto. Questo ruolo ti consente di eseguire il deployment di carichi di lavoro GPU in un cluster standard ed è associato allo spazio dei nomi del tuo progetto.
Ruoli del cluster standard
Per verificare i pool di nodi supportati dalla GPU e distribuire i carichi di lavoro GPU in un cluster standard, chiedi all'amministratore IAM del progetto di concederti i seguenti ruoli:
- Amministratore cluster standard (
standard-cluster-admin): crea, elimina, modifica o visualizza le risorse di un cluster standard ospitato sul server dell'API di gestione. Questo ruolo ti consente di controllare le GPU nel cluster condiviso ed è associato al tuo spazio dei nomi del progetto. - Sviluppatore cluster (
cluster-developer): crea, elimina, modifica o visualizza un cluster standard. Questo ruolo ti consente di eseguire il deployment di carichi di lavoro GPU in un cluster standard fornendo l'accesso alle API del data plane ospitate all'interno del cluster standard. Questo ruolo è associato allo spazio dei nomi del progetto.
prepara l'ambiente
Per configurare un container in modo che utilizzi le risorse GPU, assicurati di disporre delle seguenti risorse:
Un cluster Kubernetes con una classe di macchine GPU. Per saperne di più, consulta la sezione Schede GPU supportate.
Individua il nome del cluster Kubernetes o chiedi a un membro del gruppo di amministratori della piattaforma qual è il nome del cluster.
Accedi e genera il file kubeconfig per il cluster Kubernetes.
Utilizza il percorso kubeconfig del cluster Kubernetes per sostituire
KUBERNETES_CLUSTER_KUBECONFIGin queste istruzioni.Accedi e genera il file kubeconfig per il server API di gestione zonale che ospita il tuo cluster Kubernetes. Utilizza questo percorso per sostituire
MANAGEMENT_API_SERVERin queste istruzioni.Accedi e genera il file kubeconfig per il cluster di infrastruttura dell'organizzazione nella zona destinata a ospitare le GPU.
Configura un container in modo che utilizzi le risorse GPU
Per utilizzare queste GPU in un container, completa i seguenti passaggi:
Verifica che il cluster Kubernetes disponga di node pool che supportano le GPU:
kubectl describe clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \ -n KUBERNETES_CLUSTER_NAMESPACE \ --kubeconfig MANAGEMENT_API_SERVERSostituisci quanto segue:
KUBERNETES_CLUSTER_NAME: il nome del cluster.KUBERNETES_CLUSTER_NAMESPACE: lo spazio dei nomi del cluster. Per i cluster condivisi, utilizza lo spazio dei nomiplatform. Per i cluster standard, utilizza lo spazio dei nomi del progetto del cluster.MANAGEMENT_API_SERVER: il percorso kubeconfig del server API zonale in cui è ospitato il cluster Kubernetes. Se non hai ancora generato un file kubeconfig per il server API nella zona di destinazione, consulta Accedi.
L'output pertinente è simile al seguente snippet:
# Several lines of code are omitted here. spec: nodePools: - machineTypeName: a2-ultragpu-1g-gdc nodeCount: 2 # Several lines of code are omitted here.Per un elenco completo dei tipi di macchine GPU supportati e dei profili GPU multi-istanza (MIG), vedi Tipi di macchine dei nodi del cluster.
Aggiungi i campi
.containers.resources.requestse.containers.resources.limitsalla specifica del contenitore. Ogni nome di risorsa è diverso a seconda della classe di macchina. Controlla l'allocazione delle risorse GPU per trovare i nomi delle risorse GPU.Ad esempio, la seguente specifica del container richiede tre partizioni di una GPU da un nodo
a2-ultragpu-1g-gdc:# Several lines of code are omitted here. containers: - name: my-container image: "my-image" resources: requests: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3 limits: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3 # Several lines of code are omitted here.I container richiedono anche autorizzazioni aggiuntive per accedere alle GPU. Per ogni container che richiede GPU, aggiungi le seguenti autorizzazioni alla specifica del container:
# Several lines of code are omitted here. securityContext: seLinuxOptions: type: unconfined_t # Several lines of code are omitted here.Applica il file manifest del container:
kubectl apply -f CONTAINER_MANIFEST_FILE \ -n KUBERNETES_CLUSTER_NAMESPACE \ --kubeconfig KUBERNETES_CLUSTER_KUBECONFIGSostituisci quanto segue:
CONTAINER_MANIFEST_FILE: il file manifest YAML per il carico di lavoro del container.KUBERNETES_CLUSTER_NAMESPACE: lo spazio dei nomi del cluster. Per i cluster condivisi, utilizza lo spazio dei nomiplatform. Per i cluster standard, utilizza lo spazio dei nomi del progetto del cluster.KUBERNETES_CLUSTER_KUBECONFIG: il percorso kubeconfig del cluster.
Controlla l'allocazione delle risorse GPU
Per controllare l'allocazione delle risorse GPU, utilizza il seguente comando:
kubectl describe nodes NODE_NAME --kubeconfig KUBERNETES_CLUSTER_KUBECONFIGSostituisci quanto segue:
NODE_NAME: il nodo che gestisce le GPU che vuoi ispezionare.KUBERNETES_CLUSTER_KUBECONFIG: il percorso kubeconfig del cluster.
L'output pertinente è simile al seguente snippet:
# Several lines of code are omitted here. Capacity: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7 Allocatable: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7 # Several lines of code are omitted here.
Prendi nota dei nomi delle risorse per le GPU. Devi specificarli quando configuri un container per utilizzare le risorse GPU.