Come posso risolvere i problemi di comunicazione dei driver GPU e NVIDIA GPU in Amazon EC2?
Il mio tipo di istanza Amazon Elastic Compute Cloud (Amazon EC2) è GPU. Tuttavia, non riesco a comunicare con i driver GPU o NVIDIA GPU.
Risoluzione
A seconda del comando o dello strumento utilizzato per comunicare con la GPU o con i driver GPU, potresti ricevere i seguenti messaggi di errore.
Per nvidia-smi, ricevi il seguente messaggio di errore:
"NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running."
Per jax.devices(), ricevi il seguente messaggio di errore nel terminale:
"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 genere, i messaggi di errore precedenti vengono visualizzati a causa di problemi di compatibilità tra hardware, driver e librerie. Per utilizzare i tipi di istanza con GPU, devi installare i driver GPU e le relative librerie nel sistema operativo. Inoltre, gli strumenti e le librerie che comunicano con la GPU e con i driver GPU devono essere compatibili con la GPU.
Per verificare se hai ricevuto un errore jax.devices() esegui questi comandi:
python import jax jax.devices()
Esempio di output:
$ 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)]
Verifica che l'AMI supporti il tipo di istanza che hai utilizzato
È consigliabile utilizzare AWS Deep Learning AMI (DLAMI) per i driver NVDIA GPU. Controlla le note di rilascio della DLAMI che desideri utilizzare per assicurarti che sia compatibile con la configurazione.
Nota: i driver NVIDIA hanno due tipi di DLAMI che utilizzano driver proprietari o open source. Ogni DLAMI supporta tipi di istanza specifici.
Verifica di aver installato la libreria compatibile con CUDA
Se hai provato a eseguire jax.devices() e hai ricevuto un errore, potresti non aver installato la libreria JAX compatibile con CUDA.
Per verificare se hai installato la libreria, esegui questo comando:
pip list|grep jax
Esempio di output:
$ pip list|grep jax jax 0.4.30 jaxlib 0.4.30
Se le librerie compatibili con CUDA non sono nell'output del comando, esegui questo comando per installare la libreria JAX:
pip install -U "jax[cuda12]"
Nota: sostituisci jax[cuda12] con la tua versione di CUDA.
Quindi esegui nuovamente il comando pip list per verificare di aver installato correttamente la libreria.
Esempio di output:
$ pip list|grep jax jax 0.4.30 jax-cuda12-pjrt 0.4.30 jax-cuda12-plugin 0.4.30 jaxlib 0.4.30
Verifica che le versioni di CUDA in "nvcc --version" e "nvidia-smi" siano le stesse
Prima di tutto, esegui questo comando:
nvcc --version
Esempio di output:
$ 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
Quindi esegui questo comando:
nvidia-smi
Esempio di output:
$ nvidia-smi Mon Apr 21 10:52:36 2025 +---------------------------------------------------------------------------------------+ | NVIDIA-SMI 535.183.01 Driver Version: 535.183.01 CUDA Version: 12.2 | |-----------------------------------------+----------------------+----------------------+
Confronta le versioni di CUDA negli output dei comandi. Nell'esempio precedente, il problema si è verificato perché puoi utilizzare CUDA versione 12.2 o precedenti solo nel driver NVIDIA: 535,183,01. La configurazione utilizza invece la versione di CUDA 12.5.
Per risolvere il problema, esegui questi comandi in base al sistema operativo per disinstallare CUDA 12.5 e installare CUDA 12.2.
Amazon Linux 2023 (AL2023), Red Hat Enterprise Linux (RHEL) 8 o RHEL 9:
sudo dnf remove cuda-toolkit-12-5 sudo dnf install cuda-toolkit-12-2
Amazon Linux 2 (AL2) o 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
Dopo aver installato CUDA 12.2, esegui questo comando per verificare di poter utilizzare jax.devices() per comunicare con la GPU:
import jax jax.devices() [cuda(id=0)]
Per evitare problemi di compatibilità con le GPU, è consigliabile utilizzare DLAMI con driver NVIDIA ottimizzati, un toolkit CUDA configurato e un supporto e una compatibilità migliori.
(Facoltativo) Aggiorna il kernel e il driver
Importante: quando utilizzi un'Amazon Machine Image (AMI) supportata, non devi installare manualmente i driver NVIDIA perché sono già installati nell'AMI.
Non è consigliabile aggiornare la versione del kernel per mantenere la compatibilità con la versione del driver e del pacchetto installati. Tuttavia, se devi aggiornare la versione del kernel a causa di una patch di sicurezza, per effettuare l'operazione esegui questi comandi:
sudo dnf versionlock delete kernel* sudo dnf update -y
Nota: gli esempi di comando precedenti si riferiscono ad AWS Deep Learning Base AMI (Amazon Linux 2023).
Per installare o aggiornare manualmente i driver NVIDIA, consulta Opzioni di installazione.
Verifica che la comunicazione funzioni come previsto
Per verificare che l'istanza possa comunicare con la GPU, esegui uno di questi comandi:
nvidia-smi
-oppure-
import jax jax.devices()
Esempi di output:
$ 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)]
Informazioni correlate
- Argomenti
- Compute
- Lingua
- Italiano
