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 notebook di intelligenza artificiale (AI) e machine learning (ML) in un ambiente GPU. Il supporto GPU è abilitato per impostazione predefinita nell'appliance con air gap di Google Distributed Cloud (GDC).

Prima di iniziare

Per completare le attività descritte in questo documento, devi richiedere le autorizzazioni necessarie e preparare l'ambiente.

Richiedi i ruoli IAM

Per creare, eliminare, modificare o visualizzare le risorse in un cluster Kubernetes, chiedi all'amministratore IAM dell'organizzazione di concederti il ruolo Namespace Admin (namespace-admin) nello spazio dei nomi del progetto. Questo ruolo ti consente di eseguire il deployment dei carichi di lavoro GPU nello spazio dei nomi del progetto.

Prepara l'ambiente

  • Accedi e genera il file kubeconfig per il cluster Kubernetes bare metal.

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

Configura un container per utilizzare le risorse GPU

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

  1. Verifica che i nodi del cluster Kubernetes supportino l'allocazione delle risorse GPU:

    kubectl describe nodes NODE_NAME
    

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

    L'output pertinente è simile al seguente snippet:

    Capacity:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
    Allocatable:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
    
  2. Aggiungi i campi .containers.resources.requests e .containers.resources.limits alla specifica del container. Poiché il cluster Kubernetes è preconfigurato con macchine GPU, la configurazione è la stessa per tutti i carichi di lavoro:

     ...
     containers:
     - name: CONTAINER_NAME
       image: CONTAINER_IMAGE
       resources:
         requests:
           nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
         limits:
           nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
     ...
    

    Sostituisci quanto segue:

    • CONTAINER_NAME: il nome del container.
    • CONTAINER_IMAGE: l'immagine container per accedere alle macchine GPU. Devi includere il percorso del registro container e la versione dell'immagine, ad esempio REGISTRY_PATH/hello-app:1.0.
  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 NAMESPACE \
        --kubeconfig CLUSTER_KUBECONFIG
    

    Sostituisci quanto segue:

    • CONTAINER_MANIFEST_FILE: il file YAML per la risorsa personalizzata del carico di lavoro del container.
    • NAMESPACE: lo spazio dei nomi del progetto in cui eseguire il deployment dei carichi di lavoro del container.
    • CLUSTER_KUBECONFIG: il file kubeconfig per il cluster Kubernetes bare metal in cui stai eseguendo il deployment dei carichi di lavoro del container.
  5. Verifica che i pod siano in esecuzione e utilizzino le GPU:

    kubectl get pods -A | grep CONTAINER_NAME \
        -n NAMESPACE \
        --kubeconfig CLUSTER_KUBECONFIG
    

    L'output pertinente è simile al seguente snippet:

    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
    Ready:          True
    Restart Count:  0
    Limits:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE:  1
    Requests:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE:  1