Configurare e utilizzare le GPU NVIDIA

L'aspetto Bring Your Own Node di Google Distributed Cloud (solo software) su bare metal ti consente di sfruttare l'hardware avanzato, incluse le macchine con GPU, per ottenere le migliori prestazioni e flessibilità per i tuoi cluster.

Questo documento descrive come installare e utilizzare NVIDIA GPU Operator per configurare i cluster bare metal creati con Google Distributed Cloud per l'utilizzo con le GPU NVIDIA.

L'operatore GPU NVIDIA utilizza Operator Framework per gestire i componenti software NVIDIA necessari per il provisioning e la gestione dei dispositivi GPU. Ti consigliamo di utilizzare l'operatore GPU NVIDIA per la seguente flessibilità e vantaggi:

  • Scelta del tipo di GPU: la versione solo software di Google Distributed Cloud è compatibile con un'ampia gamma di tipi di GPU supportati dall'operatore GPU NVIDIA più recente.

  • Scelta del sistema operativo supportato: i nodi worker del cluster possono utilizzare qualsiasi sistema operativo (OS) supportato con GPU NVIDIA e hai la possibilità di utilizzare i driver GPU preinstallati o l'installazione dinamica dei driver con l'operatore GPU NVIDIA.

  • Scelta dei modelli di deployment: puoi utilizzare le GPU NVIDIA su qualsiasi tipo di cluster con nodi worker: cluster utente, cluster autonomi o cluster ibride.

Questa pagina è rivolta agli amministratori IT e agli operatori che gestiscono il ciclo di vita dell'infrastruttura tecnologica di base. Per scoprire di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei contenuti di Google Cloud, consulta Ruoli e attività comuni degli utenti di GKE Enterprise.

Prima di iniziare

Prima di eseguire i passaggi descritti nelle sezioni seguenti, assicurati di soddisfare i seguenti requisiti:

  • Cluster operativo: assicurati di avere un cluster bare metal funzionale creato con Google Distributed Cloud.

  • GPU NVIDIA: assicurati che le GPU NVIDIA siano installate sui nodi worker del cluster. La sezione seguente sull'installazione di NVIDIA GPU Operator include i passaggi per verificare che le GPU siano installate correttamente e riconosciute dal sistema operativo.

  • Versione del driver NVIDIA compatibile: la versione del driver NVIDIA in uso deve essere compatibile con la GPU, il sistema operativo e la versione CUDA utilizzata dalle applicazioni. Hai a disposizione le seguenti opzioni di installazione del driver NVIDIA:

    • Utilizza l'operatore GPU NVIDIA per installare la versione corretta del driver GPU NVIDIA come descritto nelle sezioni seguenti.

    • Utilizza il driver NVIDIA preinstallato nell'immagine del sistema operativo.

    • Segui le istruzioni riportate nella Guida di avvio rapido all'installazione del driver NVIDIA per installare manualmente il driver NVIDIA.

  • Helm versione 3.0.0 o successiva: installa l'interfaccia a riga di comando di Helm per la gestione dei pacchetti sulla workstation di amministrazione. Utilizza Helm per installare l'operatore GPU NVIDIA. Per scaricare e installare lo strumento a riga di comando Helm, puoi eseguire i seguenti comandi:

    curl -fsSL -o get_helm.sh \
        https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
    chmod 700 get_helm.sh \
        ./get_helm.sh
    

Installa e verifica l'operatore GPU NVIDIA

I passaggi che seguono illustrano la procedura di installazione di NVIDIA GPU Operator sul tuo cluster bare metal e ti aiutano a verificare che funzioni con le tue GPU:

  1. Per i dispositivi GPU collegati tramite Peripheral Component Interconnect Express (PCIe), esegui il seguente comando per ottenere un elenco dei bus PCI di sistema con "NVIDIA" nel nome:

    sudo lspci | grep NVIDIA
    

    L'output è simile al seguente:

    25:00.0 3D controller: NVIDIA Corporation Device 20b5 (rev a1)
    
  2. Puoi utilizzare lo strumento a riga di comando NVIDIA System Management Interface (nvidia-smi) su un determinato nodo per ottenere informazioni più dettagliate sui dispositivi GPU:

    nvidia-smi
    

    L'output è simile al seguente:

    +---------------------------------------------------------------------------------------+
    | NVIDIA-SMI 535.183.01             Driver Version: 535.183.1    CUDA Veersion 12.2     |
    |-----------------------------------------+----------------------+----------------------|
    | GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
    |                                         |                      |               MIG M. |
    |=========================================+======================+======================|
    |   0  NVIDIA A100 80GB PCIe          Off | 00000000:25:00.0 Off |                    0 |
    | N/A   30C    P0              44W / 300W |      0MiB / 81920MiB |      0%      Default |
    |                                         |                      |             Disabled |
    +-----------------------------------------+----------------------+----------------------+
    
    +---------------------------------------------------------------------------------------+
    | Processes:                                                                            |
    |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
    |        ID   ID                                                             Usage      |
    |=======================================================================================|
    |  No running processes found                                                           |
    +---------------------------------------------------------------------------------------+
    
  3. Aggiungi il repository Helm di NVIDIA sulla workstation di amministrazione:

    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \
        && helm repo update
    
  4. Installa l'operatore GPU NVIDIA.

    Quando installi l'operatore GPU NVIDIA, sono disponibili tre varianti di comando di base:

    • Installa l'operatore GPU NVIDIA con la configurazione predefinita:

      helm install --wait --generate-name \
          -n gpu-operator --create-namespace \
          nvidia/gpu-operator
      
    • Utilizza il flag --set per passare un insieme di coppie chiave-valore separate da virgole per specificare le opzioni di configurazione:

      helm install --wait --generate-name \
          -n gpu-operator --create-namespace \
          nvidia/gpu-operator \
          --set OPTION_1_NAME=OPTION_1_VALUE,OPTION_2_NAME=OPTION_2_VALUE
      

      Per un elenco dettagliato delle opzioni di configurazione, consulta Opzioni di personalizzazione dei grafici comuni nella documentazione di NVIDIA. Per informazioni sulla gestione dell'--set, consulta Formato e limitazioni di --set nella documentazione di Helm.

    • Disattiva l'installazione del driver se hai già installato il driver GPU NVIDIA sui tuoi nodi:

      Per impostazione predefinita, l'operatore GPU NVIDIA esegue il deployment del driver GPU più recente o specificato su tutti i nodi worker GPU del cluster. Per utilizzare il contenitore del driver GPU NVIDIA, è necessario che tutti i nodi worker con GPU eseguano la stessa versione del sistema operativo. Per aggirare il problema, puoi installare manualmente i driver GPU sui nodi ed eseguire il comando helm install con --set driver.enabled=false per impedire a NVIDIA GPU Operator di eseguire il deployment dei driver.

      helm install --wait --generate-name \
          -n gpu-operator --create-namespace \
          nvidia/gpu-operator \
          --set driver.enabled=false
      

    Per scenari di deployment comuni e comandi di esempio, consulta Scenari di deployment comuni nella documentazione NVIDIA.

  5. Verifica l'esportazione delle risorse GPU:

    Dopo aver installato l'operatore GPU NVIDIA con un driver GPU e un plug-in del dispositivo in esecuzione correttamente, dovresti vedere che il conteggio delle GPU è configurato correttamente nel campo Allocatable per la risorsa del nodo.

    kubectl describe node GPU_NODE_NAME | grep Allocatable -A7
    

    Sostituisci GPU_NODE_NAME con il nome della macchina del nodo con la GPU che stai testando.

    L'output è simile al seguente:

    Allocatable:
      cpu:                127130m
      ephemeral-storage:  858356868519
      hugepages-1Gi:      0
      hugepages-2Mi:      0
      memory:             509648288Ki
      nvidia.com/gpu:     1
      pods:               250
    
  6. Per verificare che le GPU funzionino, esegui il seguente job GPU di esempio, che esegue il comando nvidia-smi:

    export NODE_NAME=GPU_NODE_NAME
    
    cat <<EOF | kubectl create --kubeconfig=CLUSTER_KUBECONFIG -f -
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: test-job-gpu
    spec:
      template:
        spec:
          runtimeClassName: nvidia
          containers:
          - name: nvidia-test
            image: nvidia/cuda:12.0.0-base-ubuntu22.04
            command: ["nvidia-smi"]
            resources:
              limits:
                nvidia.com/gpu: 1
          nodeSelector:
            kubernetes.io/hostname: ${NODE_NAME}
          restartPolicy: Never
    EOF
    

    Sostituisci CLUSTER_KUBECONFIG con il percorso del file kubeconfig del cluster.

  7. Controlla i log per l'output del job di esempio:

    kubectl logs job/test-job-gpu –kubeconfig=CLUSTER_KUBECONFIG
    

    L'output è simile al seguente:

    +---------------------------------------------------------------------------------------+
    | NVIDIA-SMI 535.183.01             Driver Version: 535.183.1    CUDA Veersion 12.2     |
    |-----------------------------------------+----------------------+----------------------|
    | GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
    |                                         |                      |               MIG M. |
    |=========================================+======================+======================|
    |   0  NVIDIA A100 80GB PCIe          Off | 00000000:25:00.0 Off |                    0 |
    | N/A   30C    P0              44W / 300W |      0MiB / 81920MiB |      0%      Default |
    |                                         |                      |             Disabled |
    +-----------------------------------------+----------------------+----------------------+
    
    +---------------------------------------------------------------------------------------+
    | Processes:                                                                            |
    |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
    |        ID   ID                                                             Usage      |
    |=======================================================================================|
    |  No running processes found                                                           |
    +---------------------------------------------------------------------------------------+
    

Limitazioni

Quando utilizzi NVIDIA GPU Operator con i cluster creati con Google Distributed Cloud, si applicano le seguenti limitazioni:

  • Se installi una versione recente di NVIDIA GPU Operator, le configurazioni di containerd applicate dall'operatore potrebbero essere sovrascritte durante gli aggiornamenti o gli upgrade del cluster o del pool di nodi.

  • Le versioni supportate di Google Distributed Cloud installano la release LTS di containerd 1.6, che non abilita l'interfaccia CDI (Container Device Interface). Se segui le istruzioni riportate in Supporto per l'interfaccia del dispositivo del contenitore nella documentazione di NVIDIA, il runtime nvidia-cdi potrebbe non funzionare. Il cluster dovrebbe comunque funzionare come previsto, ma alcune funzionalità CDI potrebbero non essere disponibile.

  • I node pool del bilanciatore del carico eseguono automaticamente un job di aggiornamento ogni 7 giorni. Questo job sovrascrive le configurazioni di containerd, incluse quelle aggiunte dall'operatore GPU NVIDIA.

Best practice

Per ridurre al minimo i conflitti e i problemi con le configurazioni NVIDIA, ti consigliamo di seguire le seguenti precauzioni:

  • Esegui il backup del file di configurazione containerd, /etc/containerd/config.toml, prima di eseguire l'upgrade o l'aggiornamento del cluster o dei node pool. Questo file contiene la configurazione di runtime di nvidia. Ripristina il file config.toml dopo il completamento dell'upgrade o dell'aggiornamento e riavvia containerd affinché le modifiche alla configurazione vengano applicate.

  • Per evitare potenziali conflitti o problemi con la configurazione di containerd, non utilizzare i nodi GPU come nodi del bilanciatore del carico (loadBalancer.nodePoolSpec).

Richiedi assistenza

Se hai bisogno di ulteriore assistenza per l'utilizzo delle GPU con Google Distributed Cloud, contatta l'assistenza clienti Google Cloud.

Per problemi relativi alla configurazione o all'utilizzo dell'hardware GPU sul sistema operativo, consulta il tuo fornitore di hardware o, se applicabile, contatta direttamente l'assistenza NVIDIA.

Il tuo feedback è molto importante per noi.