Gestisci i carichi di lavoro dei container GPU

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_KUBECONFIG in 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_SERVER in 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:

  1. 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_SERVER
    

    Sostituisci 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 nomi platform. 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.

  2. Aggiungi i campi .containers.resources.requests e .containers.resources.limits alla 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.
    
  3. 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.
    
  4. Applica il file manifest del container:

    kubectl apply -f CONTAINER_MANIFEST_FILE \
        -n KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    Sostituisci 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 nomi platform. 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_KUBECONFIG
    

    Sostituisci 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.

Passaggi successivi