Puoi abilitare e gestire le risorse della GPU (Graphics Processing Unit) sui container. Ad esempio, potresti preferire eseguire i notebook di intelligenza artificiale (AI) e machine learning (ML) in un ambiente GPU. Per eseguire carichi di lavoro con 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 le macchine GPU.
Questo documento è destinato agli sviluppatori di applicazioni del gruppo di operatori di applicazioni responsabili della creazione di carichi di lavoro delle applicazioni per la propria organizzazione. Per saperne di più, consulta Pubblico per la documentazione GDC con air gap.
Prima di iniziare
Per completare le attività descritte in questo documento, devi richiedere le autorizzazioni necessarie e preparare l'ambiente.
Richiedi i ruoli IAM
Devi disporre di ruoli specifici per ottenere le autorizzazioni necessarie per eseguire il deployment delle GPU nei container. I ruoli richiesti dipendono dal fatto che tu stia lavorando all'interno di un cluster condiviso con ambito a livello di organizzazione o di un cluster standard con ambito a livello di progetto. Per saperne di più, consulta Configurazione dei cluster Kubernetes.
Ruoli del cluster condiviso
Per verificare i pool di nodi supportati da GPU ed eseguire il deployment dei carichi di lavoro GPU in un cluster condiviso, richiedi i seguenti ruoli in base all'attività da eseguire:
- Amministratore del 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 dello 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 dei carichi di lavoro GPU in un cluster standard ed è vincolato allo spazio dei nomi del progetto.
Ruoli del cluster standard
Per verificare i pool di nodi supportati da GPU ed eseguire il deployment dei carichi di lavoro GPU in un cluster standard, chiedi all'amministratore IAM del progetto di concederti i seguenti ruoli:
- Amministratore del cluster standard (
standard-cluster-admin): crea, elimina, modifica o visualizza le risorse di un cluster standard ospitato sul server API di gestione. Questo ruolo ti consente di controllare le GPU nel cluster condiviso ed è vincolato allo spazio dei nomi del progetto. - Sviluppatore del cluster (
cluster-developer): crea, elimina, modifica o visualizza un cluster standard. Questo ruolo ti consente di eseguire il deployment dei carichi di lavoro GPU in un cluster standard fornendo l'accesso alle API del piano dati ospitate all'interno del cluster standard. Questo ruolo è vincolato 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 a livello di zona che ospita il 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 pool di nodi 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 a livello di zona in cui è ospitato il cluster Kubernetes. Se non hai ancora generato un file kubeconfig per il server API nella tua 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) , consulta Tipi di macchine dei nodi del cluster.
Aggiungi i campi
.containers.resources.requestse.containers.resources.limitsalla specifica del container. Ogni nome della risorsa è diverso a seconda della classe di macchine. 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 controllare.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 in modo che utilizzi le risorse GPU.