Gestisci i carichi di lavoro dei container GPU

Puoi attivare e gestire le risorse delle unità di elaborazione grafica (GPU) sui tuoi container. Ad esempio, potresti preferire l'esecuzione di notebook di intelligenza artificiale (AI) e machine learning (ML) in un ambiente GPU. Per eseguire i workload dei container GPU, devi disporre di un cluster Kubernetes che supporti i dispositivi GPU. Il supporto delle GPU è abilitato per impostazione predefinita per i cluster Kubernetes per i quali è stato eseguito il provisioning di macchine GPU.

Questo documento è rivolto agli sviluppatori di applicazioni del gruppo di operatori di applicazioni responsabili della creazione dei workload delle applicazioni per la propria organizzazione. Per saperne di più, consulta la documentazione sui 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.

Richiedi ruoli IAM

Devi disporre di ruoli specifici per ottenere le autorizzazioni necessarie per eseguire il deployment delle GPU nei tuoi container. I ruoli necessari 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 ulteriori informazioni, consulta Configurazioni dei cluster Kubernetes.

Ruoli cluster condivisi

Per verificare i node pool supportati da GPU ed eseguire il deployment dei workload 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 è associato allo spazio dei nomi del progetto.
  • Namespace Admin (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 workload GPU in un cluster standard ed è associato allo spazio dei nomi del progetto.

Ruoli cluster standard

Per verificare i node pool supportati dalla GPU ed eseguire il deployment dei workload GPU in un cluster standard, chiedi all'amministratore del progetto IAM 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 API di gestione. Questo ruolo ti consente di controllare le GPU nel cluster condiviso ed è associato allo spazio dei nomi del tuo progetto.
  • Sviluppatore cluster (cluster-developer): crea, elimina, modifica o visualizza un cluster standard. Questo ruolo ti consente di eseguire il deployment dei workload GPU in un cluster standard fornendo l'accesso alle API del piano dati 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 macchina 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 tuo cluster Kubernetes. Utilizza questo percorso per sostituire MANAGEMENT_API_SERVER in queste istruzioni.

  • Accedi e genera il file kubeconfig per il cluster dell'infrastruttura dell'organizzazione nella zona destinata a ospitare le GPU.

Configura un container per l'utilizzo delle risorse GPU

Per utilizzare queste GPU in un container, completa i seguenti passaggi:

  1. Verifica che il cluster Kubernetes abbia node pool 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 di zona 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 allo snippet seguente:

    # 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 e dei profili GPU multi-istanza (MIG) supportati, 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 della 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.
    
  3. I container richiedono inoltre 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 workload 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 ispezionare.
    • KUBERNETES_CLUSTER_KUBECONFIG: il percorso kubeconfig del cluster.

    L'output pertinente è simile allo snippet seguente:

    # 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 l'utilizzo delle risorse GPU.

Passaggi successivi