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 del driver GPU

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

L'installazione dei driver non riesce nei nodi Ubuntu

Se utilizzi nodi Ubuntu a cui sono collegate GPU L4 o GPU H100, la GPU predefinita che GKE installa potrebbe non essere corrispondente o successivo alla richiesta per le 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 al seguente modello di GKE versioni 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 per dispositivi GPU non riescono a causa di 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 tuo pool di nodi a una versione di GKE che supporta l'installazione automatica del driver. Entrambi i carichi di lavoro di installazione esistono contemporaneamente e tentano di installare versioni del driver in conflitto sui nodi.

Il container di init del plug-in del dispositivo GPU ha esito negativo con Init:CrashLoopBackOff . I log del container sono simili ai seguenti:

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. Questo elimina il carico di lavoro di installazione in conflitto e consente a GKE installare automaticamente un driver nei 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 del driver al tuo 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à presente nel pool di nodi utilizzi.
    • 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 località di Compute Engine in un cluster Kubernetes.

Errore: "L'immagine container cos-nvidia-install:fixed non è presente con il criterio di pull di Mai." oppure "L'immagine container ubuntu-nvidia-installazione:fixed non è presente con il criterio di pull di 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 funzionamento in esecuzione sul 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 conducente viene ricreato o il container viene riavviato, GKE non sarà in grado di individuare l'immagine precaricata.

Per ridurre il problema di raccolta dei rifiuti 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 successivi
  • 1.27.6-gke.1513000 e versioni successive
  • 1.28.3-gke.1061000 e versioni successive

Se sui tuoi nodi viene eseguito Ubuntu, non è ancora disponibile alcuna correzione per questa garbage un problema di raccolta dei dati. Per limitare questo problema su Ubuntu, puoi eseguire un'istanza container che interagisce con l'host per assicurare la corretta configurazione Driver GPU NVIDIA. Per farlo, esegui sudo /usr/local/bin/nvidia-container-first-boot dal nodo 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 causa potenziale del problema è la perdita delle immagini del driver NVIDIA 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 questo caso, GKE precarica le immagini 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 GKE a una delle seguenti 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 GPU: impossibile creare overlay lib64: impossibile creare la directory /usr/local/nvidia/lib64: mkdir /usr/local/nvidia/lib64: non una 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 su cluster e nodi che eseguono GKE 1.28 e 1,29.

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

Per limitare questo problema, esegui l'upgrade della tua versione di GKE a una di queste versioni:

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

Errore: impossibile ottenere dispositivo per nvidia0: dispositivo nvidia0 non trovato.

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

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, aggiorna il driver NVIDIA alla versione 525.110.11 oppure in un secondo momento.

Reimposta le GPU sulle VM A3

Alcuni problemi potrebbero richiedere il ripristino della GPU su una VM A3.

Per reimpostare la GPU:

  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.