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 l'operatore GPU NVIDIA per configurare 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 i seguenti vantaggi:

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

  • Scelta del sistema operativo supportato: i nodi worker del cluster possono utilizzare qualsiasi sistema operativo (SO) supportato con GPU NVIDIA e puoi utilizzare driver GPU preinstallati o l'installazione dinamica dei driver con NVIDIA GPU Operator.

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

Questa pagina è rivolta agli amministratori IT e agli operatori che gestiscono il ciclo di vita dell'infrastruttura tecnologica sottostante. 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 GKE.

Prima di iniziare

Prima di eseguire i passaggi nelle sezioni seguenti, assicurati di avere a portata di mano i seguenti requisiti:

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

  • GPU NVIDIA: assicurati che le GPU NVIDIA siano installate sui nodi worker del cluster. La seguente sezione per l'installazione dell'operatore GPU NVIDIA 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 che utilizzi deve essere compatibile con la GPU, il sistema operativo e la versione di CUDA utilizzata dalle tue 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 della guida rapida all'installazione del driver NVIDIA per installare manualmente il driver NVIDIA.

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

    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 seguenti passaggi ti guidano nell'installazione dell'operatore GPU NVIDIA sul tuo cluster bare metal e ti aiutano a verificare che funzioni con le tue GPU:

  1. Per i dispositivi GPU connessi tramite Peripheral Component Interconnect Express (PCIe), esegui il seguente comando per ottenere un elenco di 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 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, esistono 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 trasmettere 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, vedi Opzioni comuni di personalizzazione dei grafici nella documentazione NVIDIA. Per informazioni sulla logistica dell'utilizzo del flag --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 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 container del driver GPU NVIDIA, tutti i nodi worker con GPU devono eseguire la stessa versione del sistema operativo. Per risolvere il problema, puoi installare manualmente i driver GPU sui nodi ed eseguire il comando helm install con --set driver.enabled=false per impedire all'operatore GPU NVIDIA 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, vedi Common Deployment Scenarios nella documentazione di NVIDIA.

  5. Verifica l'esportazione delle risorse GPU:

    Dopo l'installazione di NVIDIA GPU Operator 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 nodo.

    kubectl describe node GPU_NODE_NAME | grep Allocatable -A7
    

    Sostituisci GPU_NODE_NAME con il nome della macchina 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 dell'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 dell'installazione di Google Distributed Cloud contengono la release LTS di containerd 1.6, che non attiva Container Device Interface (CDI). Se segui le istruzioni riportate in Supporto dell'interfaccia del dispositivo container nella documentazione NVIDIA, il runtime nvidia-cdi potrebbe non funzionare. Il cluster dovrebbe comunque funzionare come previsto, ma alcune funzionalità CDI potrebbero non essere disponibili.

  • 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 da NVIDIA GPU Operator.

Best practice

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

  • Esegui il backup del file di configurazione di 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 diventino effettive.

  • 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 in merito all'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, rivolgiti al fornitore dell'hardware o, se applicabile, direttamente all'assistenza NVIDIA.

Il tuo feedback è molto importante per noi.