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

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 che puoi configurare per le macchine del cluster.

  • Il ruolo Visualizzatore nodi cluster utente (user-cluster-node-viewer) per controllare le GPU e il ruolo Amministratore spazio dei nomi (namespace-admin) per eseguire il deployment dei carichi di lavoro GPU nello spazio dei nomi del progetto.

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

  • Il nome del cluster Kubernetes. Se non le hai, chiedi queste informazioni all'amministratore della piattaforma.

  • Il percorso kubeconfig del cluster Kubernetes. 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 nodepoolclaims -n KUBERNETES_CLUSTER_NAME \
        --kubeconfig ORG_INFRASTRUCTURE_CLUSTER
    

    L'output pertinente è simile al seguente snippet:

    Spec:
      Machine Class Name:  a2-ultragpu-1g-gdc
      Node Count:          2
    

    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 contenitore. Ogni nome di 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:

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

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

Controlla l'allocazione delle risorse GPU

  • Per controllare l'allocazione delle risorse GPU, utilizza il seguente comando:

    kubectl describe nodes NODE_NAME
    

    Sostituisci NODE_NAME con il nodo che gestisce le GPU che vuoi esaminare.

    L'output pertinente è simile al seguente snippet:

    Capacity:
      nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7
    Allocatable:
      nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7
    

Prendi nota dei nomi delle risorse per le GPU. Devi specificarli quando configuri un container per utilizzare le risorse GPU.