Gestisci i carichi di lavoro dei container GPU

Puoi attivare e gestire le risorse dell'unità di elaborazione grafica (GPU) sui tuoi 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 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 air-gapped.

Prima di iniziare

Per eseguire il deployment delle GPU nei container, devi disporre di quanto segue:

  • Un cluster Kubernetes con una classe di macchine GPU. Consulta la sezione Schede GPU supportate per scoprire le opzioni di configurazione delle macchine del cluster.

  • Il ruolo Amministratore cluster utente (user-cluster-admin) per controllare le GPU in un cluster condiviso e il ruolo Amministratore spazio dei nomi (namespace-admin) nello spazio dei nomi del progetto per eseguire il deployment dei workload GPU in un cluster condiviso.

  • Il ruolo Amministratore cluster Standard (standard-cluster-admin) per controllare le GPU in un cluster standard e il ruolo Sviluppatore cluster (cluster-developer) nel cluster standard per eseguire il deployment dei carichi di lavoro GPU in un cluster standard.

  • Per eseguire comandi su un cluster Kubernetes, assicurati di disporre delle seguenti risorse:

    • 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 se non ne hai uno.

    • Utilizza il percorso kubeconfig del cluster Kubernetes per sostituire KUBERNETES_CLUSTER_KUBECONFIG in queste istruzioni.

  • Il percorso kubeconfig per il server API di gestione zonale che ospita il tuo cluster Kubernetes. Accedi e genera il file kubeconfig se non ne hai uno.

  • Il percorso kubeconfig per il cluster di infrastruttura dell'organizzazione nella zona destinata a ospitare le GPU. Accedi e genera il file kubeconfig se non ne hai uno.

Configura un container per utilizzare le risorse GPU

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

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

  2. Aggiungi i campi .containers.resources.requests e .containers.resources.limits alla 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:

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

    ...
    securityContext:
     seLinuxOptions:
       type: unconfined_t
    ...
    
  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 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.

Passaggi successivi