Direkt zum Inhalt

Wie behebe ich Kommunikationsprobleme mit NVIDIA-GPU und GPU-Treibern in Amazon EC2?

Lesedauer: 5 Minute
0

Mein Amazon Elastic Compute Cloud (Amazon EC2)-Instance-Typ ist GPU. Ich kann jedoch nicht mit der NVIDIA-GPU oder den GPU-Treibern kommunizieren.

Lösung

Je nach Befehl oder Tool, das du für die Kommunikation mit der GPU oder den GPU-Treibern verwendest, werden möglicherweise die folgenden Fehlermeldungen angezeigt.

Für nvidia-smi erhältst du die folgende Fehlermeldung:

"NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running."

Für jax.devices() erhältst du die folgende Fehlermeldung im Terminal:

"WARNING:absl:No GPU/TPU found, falling back to CPU. (Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.) [CpuDevice(id=0)]"

In der Regel erhältst du die oben genannten Fehlermeldungen aufgrund von Kompatibilitätsproblemen zwischen der Hardware, den Treibern und Bibliotheken. Um Instance-Typen mit GPUs zu verwenden, musst du GPU-Treiber und zugehörige Bibliotheken auf dem Betriebssystem (OS) installieren. Außerdem müssen die Tools und Bibliotheken, die mit der GPU und den GPU-Treibern kommunizieren, GPU-kompatibel sein.

Führe die folgenden Befehle aus, um zu überprüfen, ob du einen jax.devices()-Fehler erhalten hast:

python
import jax
jax.devices()

Beispielausgabe:

$ python
Python 3.9.22 (main, Apr 29 2025, 00:00:00)
[GCC 11.5.0 20240719 (Red Hat 11.5.0-5)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import jax
>>> jax.devices()
WARNING:absl:No GPU/TPU found, falling back to CPU. (Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)
[CpuDevice(id=0)]

Sicherstellen, dass die AMI den von dir verwendeten Instance-Typ unterstützt

Es hat sich bewährt, AWS Deep Learning AMIs (DLAMI) für NVDIA-GPU-Treiber zu verwenden. Überprüfe die Versionshinweise für das DLAMI, das du verwenden möchtest, um sicherzustellen, dass es mit der Konfiguration kompatibel ist.

Hinweis: NVIDIA-Treiber haben zwei Arten von DLAMIs, die entweder proprietäre oder Open-Source-Treiber verwenden. Jedes DLAMI unterstützt bestimmte Instance-Typen.

Sicherstellen, dass du die CUDA-kompatible Bibliothek installiert haben

Wenn du versucht hast, jax.devices() auszuführen und ein Fehler aufgetreten ist, hast du möglicherweise die CUDA-kompatible JAX-Bibliothek nicht installiert.

Führe den folgenden Befehl aus, um zu überprüfen, ob du die Bibliothek installiert hast:

pip list|grep jax

Beispielausgabe:

$ pip list|grep jax
jax                              0.4.30
jaxlib                           0.4.30

Wenn die CUDA-kompatiblen Bibliotheken nicht in der Befehlsausgabe enthalten sind, führe den folgenden Befehl aus, um die JAX-Bibliothek zu installieren:

pip install -U "jax[cuda12]"

Hinweis: Ersetze jax[cuda12] durch die CUDA-Version.

Führe dann den Befehl pip list erneut aus, um zu überprüfen, ob du die Bibliothek korrekt installiert hast.

Beispielausgabe:

$ pip list|grep jax
jax                              0.4.30
jax-cuda12-pjrt                  0.4.30
jax-cuda12-plugin                0.4.30
jaxlib                           0.4.30

Sicherstellen, dass die CUDA-Versionen in "nvcc --version" und "nvidia-smi" identisch sind

Führe zuerst den folgenden Befehl aus:

nvcc --version

Beispielausgabe:

$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Wed_Apr_17_19:19:55_PDT_2024
Cuda compilation tools, release 12.5, V12.5.40
Build cuda_12.5.r12.5/compiler.34177558_0

Führe dann den folgenden Befehl aus:

nvidia-smi

Beispielausgabe:

$ nvidia-smi
Mon Apr 21 10:52:36 2025
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.183.01             Driver Version: 535.183.01   CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+

Vergleiche die CUDA-Versionen in den Ausgaben der Befehle. Im vorherigen Beispiel trat das Problem auf, weil du CUDA-Version 12.2 oder früher nur im NVIDIA-Treiber verwenden kannst: 535.183.01. Die Konfiguration verwendet jedoch CUDA-Version 12.5.

Um das Problem zu beheben, führe je nach Betriebssystem die folgenden Befehle aus, um CUDA 12.5 zu deinstallieren und CUDA 12.2 zu installieren.

Amazon Linux 2023 (AL2023), Red Hat Enterprise Linux (RHEL) 8 oder RHEL 9:

sudo dnf remove cuda-toolkit-12-5
sudo dnf install cuda-toolkit-12-2

Amazon Linux 2 (AL2) oder RHEL 7:

sudo yum remove cuda-toolkit-12-5
sudo yum install cuda-toolkit-12-2

Ubuntu:

sudo apt remove cuda-toolkit-12-5
sudo apt install cuda-toolkit-12-2

Führe nach der Installation von CUDA 12.2 den folgenden Befehl aus, um zu überprüfen, ob du jax.devices() für die Kommunikation mit der GPU verwenden kannst:

import jax
jax.devices()
[cuda(id=0)]

Um Probleme mit der GPU-Kompatibilität zu vermeiden, empfiehlt es sich, DLAMIs mit optimierten NVIDIA-Treibern, einem konfigurierten CUDA-Toolkit und besserer Unterstützung und Kompatibilität zu verwenden.

(Optional) Upgrade für den Kernel und Treiber durchführen

Wichtig: Wenn du ein unterstütztes Amazon Machine Image (AMI) verwendest, musst du die NVIDIA-Treiber nicht manuell installieren, da sie bereits auf dem AMI installiert sind.

Es wird nicht empfohlen, die Kernelversion zu aktualisieren, um die Kompatibilität mit der installierten Treiber- und Paketversion aufrechtzuerhalten. Wenn du jedoch die Kernelversion aufgrund eines Sicherheitspatches aktualisieren musst, führe die folgenden Befehle aus, um den Kernel zu aktualisieren:

sudo dnf versionlock delete kernel*
sudo dnf update -y

Hinweis: Die vorherigen Beispielbefehle beziehen sich auf AWS Deep Learning Base AMI (Amazon Linux 2023).

Informationen zur manuellen Installation oder Aktualisierung der NVIDIA-Treiber findest du unter Installationsoptionen.

Sicherstellen, dass die Kommunikation wie erwartet funktioniert

Um zu testen, ob die Instance mit der GPU kommunizieren kann, führe einen der folgenden Befehle aus:

nvidia-smi

-oder-

import jax
jax.devices()

Beispielausgaben:

$ nvidia-smi
Wed May 21 11:04:43 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.133.20 Driver Version: 570.133.20 CUDA Version: 12.8 |
|-----------------------------------------+------------------------+----------------------+
| 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 A10G On | 00000000:00:1E.0 Off | 0 |
| 0% 32C P8 10W / 300W | 0MiB / 23028MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
>>> import jax
>>> jax.devices()
[cuda(id=0)]

Ähnliche Informationen

NVIDIA-Treiber für die Amazon EC2-Instance

AWS OFFICIALAktualisiert vor 5 Monaten