Auf dieser Seite wird beschrieben, wie Sie Probleme im Zusammenhang mit GPUs in Google Kubernetes Engine (GKE) beheben.
Wenn Sie weitere Unterstützung benötigen, wenden Sie sich an den Cloud Customer Care.
GPU-Treiberinstallation
In diesem Abschnitt finden Sie Informationen zur Fehlerbehebung bei der automatischen Installation von NVIDIA-Gerätetreibern in GKE.
Treiberinstallation auf Ubuntu-Knoten fehlgeschlagen
Wenn Sie Ubuntu-Knoten mit angeschlossenen L4-GPUs oder H100-GPUs verwenden, ist der Standard-GPU-Treiber, den GKE installiert, möglicherweise nicht auf dem Stand der für diese GPUs erforderlichen Version oder höher. Daher bleibt der Pod des GPU-Geräte-Plug-ins im Status „Ausstehend“ und es kann zu Problemen mit Ihren GPU-Arbeitslasten auf diesen Knoten kommen.
Wir empfehlen, ein Upgrade auf eine der folgenden GKE-Versionen durchzuführen, bei denen die GPU-Treiberversion 535 als Standardtreiber installiert wird:
- 1.26.15-gke.1483000 und höher
- 1.27.15-gke.1039000 und höher
- 1.28.11-gke.1044000 und höher
- 1.29.6-gke.1073000 und höher
- 1.30.2-gke.1124000 und höher
Alternativ können Sie die Treiberversion 535 oder höher manuell installieren. Führen Sie dazu den folgenden Befehl aus:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded-R535.yaml
GPU-Geräte-Plug-ins schlagen mit CrashLoopBackOff-Fehlern fehl
Das folgende Problem tritt auf, wenn Sie die manuelle Treiberinstallationsmethode in Ihrem Knotenpool vor dem 25. Januar 2023 verwendet haben und Ihren Knotenpool später auf eine GKE-Version aktualisiert haben, die automatische Treiberinstallation unterstützt. Beide Installationslasten sind gleichzeitig vorhanden und versuchen, in Konflikt stehende Treiberversionen auf Ihren Knoten zu installieren.
Der Init-Container des GPU-Geräte-Plug-ins schlägt mit dem Status Init:CrashLoopBackOff
fehl. Die Logs für den Container sehen in etwa so aus:
failed to verify installation: failed to verify GPU driver installation: exit status 18
Versuchen Sie Folgendes, um dieses Problem zu beheben:
Entfernen Sie das DaemonSet für die manuelle Treiberinstallation aus Ihrem Cluster. Dadurch wird die in Konflikt stehende Installationsarbeitslast gelöscht und GKE kann automatisch einen Treiber auf Ihren Knoten installieren.
kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml
Wenden Sie das DaemonSet-Manifest für die manuelle Treiberinstallation noch einmal auf Ihren Cluster an. Am 25. Januar 2023 haben wir das Manifest aktualisiert, damit Knoten mit automatischer Treiberinstallation ignoriert werden.
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml
Deaktivieren Sie die automatische Treiberinstallation für Ihren Knotenpool. Die vorhandene DaemonSet-Treiberinstallation sollte nach dem Aktualisierungsvorgang wie erwartet funktionieren.
gcloud container node-pools update POOL_NAME \ --accelerator=type=GPU_TYPE,count=GPU_COUNT,gpu-driver-version=disabled \ --cluster=CLUSTER_NAME \ --location=LOCATION
Ersetzen Sie Folgendes:
POOL_NAME
ist der Name des Knotenpools.GPU_TYPE
: der GPU-Typ, den der Knotenpool bereits verwendet.GPU_COUNT
: die Anzahl der GPUs, die bereits an den Knotenpool angehängt sind.CLUSTER_NAME
: der Name des GKE-Clusters, der den Knotenpool enthält.LOCATION
: der Compute Engine-Standort des Clusters.
Fehler: „Container-Image cos-nvidia-installer:fixed ist mit der Pull-Richtlinie ‚Nie‘ nicht vorhanden“ oder „Container-Image ubuntu-nvidia-installer:fixed ist mit der Pull-Richtlinie ‚Nie‘ nicht vorhanden“
Dieses Problem tritt auf, wenn sich die nvidia-driver-installer
-Pods im Status PodInitializing
befinden und das GPU-Plug-in-Gerät oder die Pods des GPU-Treiber-Installationsprogramms den folgenden Fehler melden. Die genaue Fehlermeldung hängt vom Betriebssystem ab, das auf Ihrem Knoten ausgeführt wird:
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.
Dieses Problem kann auftreten, wenn der Garbage Collector das vorab geladene NVIDIA-Treiber-Image entfernt, um Speicherplatz auf einem Knoten freizugeben. Wenn der Treiber-Pod neu erstellt oder sein Container neu gestartet wird, kann GKE das vorab geladene Image nicht finden.
Um das Problem mit der Garbage Collection bei der Ausführung von COS zu beheben, aktualisieren Sie Ihre GKE-Knoten auf eine der folgenden Versionen, die die Korrektur enthält:
- 1.25.15-gke.1040000 und höher
- 1.26.10-gke.1030000 und höher
- 1.27.6-gke.1513000 und höher
- 1.28.3-gke.1061000 und höher
Wenn auf Ihren Knoten Ubuntu ausgeführt wird, ist für dieses Problem mit der Garbage Collection noch keine Lösung verfügbar. Um dieses Problem unter Ubuntu zu vermeiden, können Sie einen privilegierten Container ausführen, der mit dem Host interagiert, um die korrekte Einrichtung der NVIDIA-GPU-Treiber zu gewährleisten. Führen Sie dazu sudo /usr/local/bin/nvidia-container-first-boot
auf Ihrem Knoten aus oder wenden Sie das folgende Manifest an:
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
Eine weitere mögliche Ursache für das Problem ist, dass die NVIDIA-Treiber-Images nach dem Neustart des Knotens oder der Hostwartung verloren gehen. Dies kann bei vertraulichen Knoten oder Knoten mit GPUs auftreten, die sitzungsspezifischen lokalen SSD-Speicher verwenden. In diesem Fall lädt GKE die nvidia-installer-driver
-Container-Images auf die Knoten vor und verschiebt sie beim ersten Start vom Bootlaufwerk auf die lokale SSD.
Verwenden Sie den folgenden Protokollfilter, um zu prüfen, ob ein Hostwartungsereignis aufgetreten ist:
resource.type="gce_instance"
protoPayload.serviceName="compute.googleapis.com"
log_id("cloudaudit.googleapis.com/system_event")
Aktualisieren Sie Ihre GKE-Version auf eine der folgenden Versionen, um das Problem bei der Hostwartung zu beheben:
- 1.27.13-gke.1166000 und höher
- 1.29.3-gke.1227000 und höher
- 1.28.8-gke.1171000 und höher
Fehler: Konfiguration der Installationsverzeichnisse für GPU-Treiber fehlgeschlagen: lib64-Overlay konnte nicht erstellt werden: Verzeichnis konnte nicht erstellt werden /usr/local/nvidia/lib64: mkdir /usr/local/nvidia/lib64: kein Verzeichnis.
Dieser Fehler wird vom Container des GPU-Treiberinstallationsprogramms im GPU-Geräte-Plug-in ausgegeben, wenn NCCL Fastsocket aktiviert ist:
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.
Dieses Problem tritt nur bei Clustern und Knoten auf, auf denen GKE 1.28 und 1.29 ausgeführt wird.
Das Problem wird durch eine Race-Bedingung von NCCL Fast Socket mit dem GPU-Treiber-Installationsprogramm verursacht.
Aktualisieren Sie Ihre GKE-Version auf eine der folgenden Versionen, um dieses Problem zu beheben:
- 1.28.8-gke.1206000 und höher
- 1.29.3-gke.1344000 und höher
Fehler: Gerät für nvidia0 nicht gefunden: Gerät nvidia0 nicht gefunden.
Der folgende Fehler gibt an, dass XID 62 und RmInitAdapter für die GPU mit Minor 0 fehlgeschlagen sind:
Failed to get device for nvidia0: device nvidia0 not found.
In der NVIDIA-Treiberversion 525.105.17 gibt es einen Fehler, der zu Kommunikationsfehlern (XID) führen und die ordnungsgemäße Initialisierung der GPU verhindern kann.
Aktualisieren Sie den NVIDIA-Treiber auf Version 525.110.11 oder höher, um dieses Problem zu beheben.
GPUs auf A3-VMs zurücksetzen
Bei einigen Problemen müssen Sie möglicherweise die GPU auf einer A3-VM zurücksetzen.
So setzen Sie die GPU zurück:
Entfernen Sie Pods, die GPU-Ressourcen anfordern, vom Knoten, auf dem Sie die GPU zurücksetzen müssen.
Deaktivieren Sie das GPU-Geräte-Plug-in auf dem Knoten:
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
Ersetzen Sie
NODE_NAME
durch den Namen des Knotens.Stellen Sie eine Verbindung zur VM her, die den Knoten unterstützt.
Setzen Sie in der SSH-Sitzung die GPU zurück:
/home/kubernetes/bin/nvidia/bin/nvidia-smi --gpu-reset
Aktivieren Sie das GPU-Geräte-Plug-in wieder:
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
Nächste Schritte
Wenn Sie weitere Unterstützung benötigen, wenden Sie sich an den Cloud Customer Care.