Ir para o conteúdo

Como resolver problemas de comunicação entre a GPU e o driver da GPU NVIDIA no Amazon EC2?

6 minuto de leitura
0

O tipo da minha instância do Amazon Elastic Compute Cloud (Amazon EC2) é GPU. No entanto, não consigo me comunicar com a GPU ou os drivers da GPU NVIDIA.

Resolução

Você pode encontrar as seguintes mensagens de erro com base no comando ou na ferramenta que usa para se comunicar com a GPU ou os drivers da GPU.

Para nvidia-smi, você recebe a seguinte mensagem de erro:

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

Para jax.devices(), você recebe a seguinte mensagem de erro no 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)]"

Normalmente, você recebe as mensagens de erro anteriores devido a problemas de compatibilidade entre seu hardware, drivers e bibliotecas. Para usar tipos de instância com GPUs, você deve instalar drivers de GPU e bibliotecas relacionadas em seu sistema operacional (SO). Além disso, as ferramentas e bibliotecas que se comunicam com a GPU e os drivers da GPU devem ser compatíveis com a GPU.

Para verificar se você recebeu um erro jax.devices(), execute os seguintes comandos:

python
import jax
jax.devices()

Exemplo de saída:

$ 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)]

Verifique se sua AMI é compatível com o tipo de instância que você usou

É uma prática recomendada usar AMIs de deep learning da AWS (DLAMI) para drivers de GPU NVIDIA. Verifique as notas de lançamento da DLAMI que você deseja usar para garantir que ela seja compatível com sua configuração.

Observação: os drivers NVIDIA têm dois tipos de DLAMIs que usam drivers exclusivos ou de código aberto. Cada DLAMI é compatível com tipos de instância específicos.

Verificar se instalou a biblioteca compatível com CUDA

Se você tentou executar jax.devices() e encontrou um erro, talvez não tenha instalado a biblioteca JAX compatível com CUDA.

Para verificar se você instalou a biblioteca, execute o seguinte comando:

pip list|grep jax

Exemplo de saída:

$ pip list|grep jax
jax                              0.4.30
jaxlib                           0.4.30

Se as bibliotecas compatíveis com CUDA não estiverem na saída do comando, execute o seguinte comando para instalar a biblioteca JAX:

pip install -U "jax[cuda12]"

Observação: substitua jax[cuda12] pela sua versão CUDA.

Em seguida, execute novamente o comando pip list para verificar se instalou corretamente a biblioteca.

Exemplo de saída:

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

Verificar se as versões CUDA em "nvcc --version" e "nvidia-smi" são as mesmas

Primeiro, execute o seguinte comando:

nvcc --version

Exemplo de saída:

$ 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

Em seguida, execute o seguinte comando:

nvidia-smi

Exemplo de saída:

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

Compare as versões CUDA nas saídas dos comandos. No exemplo anterior, o problema ocorreu porque você pode usar a versão 12.2 ou anterior do CUDA somente no driver NVIDIA: 535.183.01. No entanto, a configuração usa CUDA versão 12.5.

Para resolver o problema, execute os seguintes comandos com base no seu sistema operacional para desinstalar o CUDA 12.5 e instalar o CUDA 12.2.

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

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

Amazon Linux 2 (AL2) ou 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

Depois de instalar o CUDA 12.2, execute o comando a seguir para verificar se você pode usar jax.devices() para se comunicar com a GPU:

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

Para evitar problemas de compatibilidade com a GPU, é uma prática recomendada usar DLAMIs com drivers NVIDIA otimizados, um kit de ferramentas CUDA configurado e melhor suporte e compatibilidade.

(Opcional) Atualizar o kernel e driver

Importante: ao usar uma imagem de máquina da Amazon (AMI) compatível, você não precisa instalar manualmente os drivers NVIDIA porque eles já estão instalados na AMI.

Não é uma prática recomendada atualizar a versão do kernel para manter a compatibilidade com o driver instalado e a versão do pacote. No entanto, se precisar atualizar a versão do kernel por causa de um patch de segurança, execute os seguintes comandos para atualizar o kernel:

sudo dnf versionlock delete kernel*
sudo dnf update -y

Observação: os comandos de exemplo anteriores são para a AMI base de deep learning da AWS (Amazon Linux 2023).

Para instalar ou atualizar manualmente os drivers NVIDIA, consulte Opções de instalação.

Verificar se a comunicação funciona conforme o esperado

Para testar se sua instância pode se comunicar com a GPU, execute um dos seguintes comandos:

nvidia-smi

-ou-

import jax
jax.devices()

Exemplos de saídas:

$ 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)]

Informações relacionadas

Drivers NVIDIA para a instância do Amazon EC2

AWS OFICIALAtualizada há um ano