Risolvere i problemi relativi alle GPU in GKE


Questa pagina mostra come risolvere i problemi relativi alle GPU in Google Kubernetes Engine (GKE).

Se hai bisogno di ulteriore assistenza, contatta l'assistenza clienti Google Cloud.

Installazione dei driver GPU

Questa sezione fornisce informazioni sulla risoluzione dei problemi relativi all'installazione automatica dei driver dei dispositivi NVIDIA in GKE.

L'installazione del driver non riesce nei nodi Ubuntu

Se utilizzi nodi Ubuntu con GPU L4 o GPU H100 collegate, il driver GPU predefinito installato da GKE potrebbe non essere uguale o successivo alla versione richiesta per queste GPU. Di conseguenza, il pod del plug-in del dispositivo GPU rimane bloccato nello stato Pending e i carichi di lavoro GPU su questi nodi potrebbero riscontrare problemi.

Per risolvere il problema, ti consigliamo di eseguire l'upgrade alle seguenti versioni GKE, che installano la versione 535 del driver GPU come driver predefinito:

  • 1.26.15-gke.1483000 e versioni successive
  • 1.27.15-gke.1039000 e versioni successive
  • 1.28.11-gke.1044000 e versioni successive
  • 1.29.6-gke.1073000 e versioni successive
  • 1.30.2-gke.1124000 e versioni successive

In alternativa, puoi installare manualmente la versione 535 o successiva del driver eseguendo il seguente comando:

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded-R535.yaml

I plug-in dei dispositivi GPU non riescono a completare l'operazione con errori CrashLoopBackOff

Il seguente problema si verifica se hai utilizzato il metodo di installazione manuale del driver nel tuo pool di nodi prima del 25 gennaio 2023 e in seguito hai eseguito l'upgrade del node a una versione di GKE che supporta l'installazione automatica del driver. Entrambi i workload di installazione esistono contemporaneamente e tentano di installare versioni del driver in conflitto sui nodi.

Il contenitore di inizializzazione del plug-in del dispositivo GPU non riesce con lo stato Init:CrashLoopBackOff. I log del contenitore sono simili al seguente:

failed to verify installation: failed to verify GPU driver installation: exit status 18

Per risolvere il problema, prova i seguenti metodi:

  • Rimuovi il DaemonSet di installazione manuale dei driver dal cluster. In questo modo, viene eliminato il carico di lavoro di installazione in conflitto e GKE consente di installare automaticamente un driver sui nodi.

    kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml
    
  • Applica di nuovo il manifest DaemonSet per l'installazione manuale dei driver al cluster. Il 25 gennaio 2023 abbiamo aggiornato il manifest in modo da ignorare i nodi che utilizzano l'installazione automatica dei driver.

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml
    
  • Disattiva l'installazione automatica dei driver per il pool di nodi. Il DaemonSet di installazione dei driver esistente dovrebbe funzionare come previsto al termine dell'operazione di aggiornamento.

    gcloud container node-pools update POOL_NAME \
        --accelerator=type=GPU_TYPE,count=GPU_COUNT,gpu-driver-version=disabled \
        --cluster=CLUSTER_NAME \
        --location=LOCATION
    

    Sostituisci quanto segue:

    • POOL_NAME: il nome del pool di nodi.
    • GPU_TYPE: il tipo di GPU già utilizzato dal pool di nodi.
    • GPU_COUNT: il numero di GPU già collegate al pool di nodi.
    • CLUSTER_NAME: il nome del cluster GKE che contiene il pool di nodi.
    • LOCATION: la posizione Compute Engine del cluster.

Errore: "L'immagine del container cos-nvidia-installer:fixed non è presente con il criterio pull Mai" o "L'immagine del container ubuntu-nvidia-installer:fixed non è presente con il criterio pull Mai".

Questo problema si verifica quando i pod nvidia-driver-installer sono nello stato PodInitializing e il dispositivo del plug-in GPU o i pod di installazione del driver GPU registrano il seguente errore. Il messaggio di errore specifico dipende dal sistema operativo in esecuzione sul tuo nodo:

COS

Container image "cos-nvidia-installer:fixed" is not present with pull policy of Never.

Ubuntu

Container image "gke-nvidia-installer:fixed" is not present with pull policy of Never.

Questo problema può verificarsi quando il garbage collector rimuove l'immagine del driver NVIDIA precaricato per liberare spazio su un nodo. Quando il pod del driver viene ricreato o il relativo contenitore viene riavviato, GKE non sarà in grado di individuare l'immagine precaricata.

Per ridurre il problema di garbage collection quando esegui COS, esegui l'upgrade dei nodi GKE a una di queste versioni che contengono la correzione:

  • 1.25.15-gke.1040000 e versioni successive
  • 1.26.10-gke.1030000 e versioni successive
  • 1.27.6-gke.1513000 e versioni successive
  • 1.28.3-gke.1061000 e versioni successive

Se i tuoi nodi eseguono Ubuntu, non è ancora disponibile una correzione per questo problema di raccolta del garbage. Per attenuare questo problema su Ubuntu, puoi eseguire un contenitore privilegiato che interagisce con l'host per garantire la configurazione corretta dei driver della GPU NVIDIA. Per farlo, esegui sudo /usr/local/bin/nvidia-container-first-boot dal tuo node o applica il seguente manifest:

apiVersion: v1
kind: Pod
metadata:
  name: gke-nvidia-installer-fixup
spec:
  nodeSelector:
    cloud.google.com/gke-os-distribution: ubuntu
  hostPID: true
  containers:
  - name: installer
    image: ubuntu
    securityContext:
      privileged: true
    command:
      - nsenter
      - -at
      - '1'
      - --
      - sh
      - -c
      - "/usr/local/bin/nvidia-container-first-boot"
  restartPolicy: Never

Un'altra potenziale causa del problema si verifica quando le immagini del driver NVIDIA vengono perse dopo il riavvio del nodo o la manutenzione dell'host. Questo può verificarsi su nodi riservati o su nodi con GPU che utilizzano spazio di archiviazione SSD locale temporaneo. In questa situazione, GKE precarica le immagini dei container nvidia-installer-driver sui nodi e le sposta dal disco di avvio all'SSD locale al primo avvio.

Per confermare che si è verificato un evento di manutenzione dell'host, utilizza il seguente filtro di log:

resource.type="gce_instance"
protoPayload.serviceName="compute.googleapis.com"
log_id("cloudaudit.googleapis.com/system_event")

Per ridurre il problema di manutenzione dell'host, esegui l'upgrade della versione GKE a una di queste versioni:

  • 1.27.13-gke.1166000 e versioni successive
  • 1.29.3-gke.1227000 e versioni successive
  • 1.28.8-gke.1171000 e versioni successive

Errore: impossibile configurare le directory di installazione del driver della GPU: impossibile creare l'overlay lib64: impossibile creare la directory /usr/local/nvidia/lib64: mkdir /usr/local/nvidia/lib64: not a directory.

Quando NCCL fastsocket è abilitato, viene visualizzato questo errore nel contenitore del programma di installazione del driver GPU all'interno del plug-in del dispositivo GPU:

failed to configure GPU driver installation dirs: failed to create lib64 overlay: failed to create dir /usr/local/nvidia/lib64: mkdir /usr/local/nvidia/lib64: not a directory.

Questo problema si verifica solo nei cluster e nei nodi che eseguono GKE 1.28 e 1.29.

Il problema è causato da una race condition NCCL fastsocket con il programma di installazione del driver GPU.

Per attenuare il problema, esegui l'upgrade della versione GKE a una di queste versioni:

  • 1.28.8-gke.1206000 e versioni successive
  • 1.29.3-gke.1344000 e versioni successive

Errore: impossibile recuperare il dispositivo per nvidia0: dispositivo nvidia0 non trovato.

Il seguente errore indica che XID 62 e RmInitAdapter non sono riusciti per la GPU con minor 0:

Failed to get device for nvidia0: device nvidia0 not found.

Il driver NVIDIA versione 525.105.17 presenta un bug che può causare errori di comunicazione (XID) e impedire l'inizializzazione corretta della GPU, con conseguente fallimento dell'inizializzazione della GPU.

Per risolvere il problema, esegui l'upgrade del driver NVIDIA alla versione 525.110.11 o successiva.

Ripristina le GPU sulle VM A3

Per alcuni problemi potrebbe essere necessario reimpostare la GPU su una VM A3.

Per reimpostare la GPU, segui questi passaggi:

  1. Rimuovi i pod che richiedono risorse GPU dal nodo in cui devi reimpostare la GPU.

  2. Disattiva il plug-in del dispositivo GPU sul nodo:

    kubectl get nodes \
        --selector=kubernetes.io/hostname=NODE_NAME \
        --no-headers | awk '{print $1}' \
        | xargs -I{} kubectl label node {} gke-no-default-nvidia-gpu-device-plugin=true
    

    Sostituisci NODE_NAME con il nome del nodo.

  3. Connettiti alla VM di supporto del nodo.

  4. Nella sessione SSH, reimposta la GPU:

    /home/kubernetes/bin/nvidia/bin/nvidia-smi --gpu-reset
    
  5. Riattiva il plug-in del dispositivo GPU:

    kubectl get nodes --selector=kubernetes.io/hostname=NODE_NAME \
        --no-headers \| awk '{print $1}' \
        | xargs -I{} kubectl label node {} gke-no-default-nvidia-gpu-device-plugin=false \
        --overwrite
    

Passaggi successivi

Se hai bisogno di ulteriore assistenza, contatta l'assistenza clienti Google Cloud.