在 docker 容器内使用 GPU - CUDA 版本:N/A 和 torch.cuda.is_available returns False
Using GPU inside docker container - CUDA Version: N/A and torch.cuda.is_available returns False
我正在尝试从我的 docker 容器中使用 GPU。我在 Ubuntu 18.04.
上使用版本 19.03 的 docker
在 docker 容器外,如果我 运行 nvidia-smi 我得到以下输出。
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.51.05 Driver Version: 450.51.05 CUDA Version: 11.0 |
|-------------------------------+----------------------+----------------------+
| 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 Tesla T4 On | 00000000:00:1E.0 Off | 0 |
| N/A 30C P8 9W / 70W | 0MiB / 15109MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
如果我 运行 在从 nvidia/cuda docker 图像创建的容器中使用相同的东西,我会得到与上面相同的输出,并且一切都会 运行 顺利进行。 torch.cuda.is_available() returns 真.
但是如果我 运行 在任何其他 docker 容器中使用相同的 nvidia-smi 命令,它会提供以下输出,您可以在其中看到 CUDA 版本即将到来 N/A。在容器内 torch.cuda.is_available() 也 returns False.
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.51.05 Driver Version: 450.51.05 CUDA Version: N/A |
|-------------------------------+----------------------+----------------------+
| 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 Tesla T4 On | 00000000:00:1E.0 Off | 0 |
| N/A 30C P8 9W / 70W | 0MiB / 15109MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
我已经使用以下命令安装了 nvidia-container-toolkit。
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu18.04/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install nvidia-container-toolkit
sudo systemctl restart docker
我使用以下命令启动了我的容器
sudo docker run --rm --gpus all nvidia/cuda nvidia-smi
sudo docker run -it --rm --gpus all ubuntu nvidia-smi
docker run --rm --gpus all nvidia/cuda nvidia-smi
不应该 return CUDA Version: N/A
如果所有东西(又名 nvidia 驱动程序、CUDA 工具包和 nvidia-container-toolkit)都正确安装在主机上。
假设 docker run --rm --gpus all nvidia/cuda nvidia-smi
return 正确。我也遇到了容器内部 CUDA Version: N/A
的问题,我很幸运地解决了这个问题:
请看我的回答(显然你需要调整和安装所有的matching/correct版本)
当我使用“--gpus=all,capabilities=utility”时 return 错误,
当使用“--gpus=all”时 return True ...
对于来到这里寻找如何使用 docker compose 的任何人,请添加到您的服务中:
deploy:
resources:
reservations:
devices:
- driver: nvidia
capabilities:
- gpu
- utility # nvidia-smi
- compute # CUDA. Required to avoid "CUDA version: N/A"
- video # NVDEC/NVENC. For instance to use a hardware accelerated ffmpeg. Skip it if you don't need it
我正在尝试从我的 docker 容器中使用 GPU。我在 Ubuntu 18.04.
上使用版本 19.03 的 docker在 docker 容器外,如果我 运行 nvidia-smi 我得到以下输出。
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.51.05 Driver Version: 450.51.05 CUDA Version: 11.0 |
|-------------------------------+----------------------+----------------------+
| 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 Tesla T4 On | 00000000:00:1E.0 Off | 0 |
| N/A 30C P8 9W / 70W | 0MiB / 15109MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
如果我 运行 在从 nvidia/cuda docker 图像创建的容器中使用相同的东西,我会得到与上面相同的输出,并且一切都会 运行 顺利进行。 torch.cuda.is_available() returns 真.
但是如果我 运行 在任何其他 docker 容器中使用相同的 nvidia-smi 命令,它会提供以下输出,您可以在其中看到 CUDA 版本即将到来 N/A。在容器内 torch.cuda.is_available() 也 returns False.
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.51.05 Driver Version: 450.51.05 CUDA Version: N/A |
|-------------------------------+----------------------+----------------------+
| 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 Tesla T4 On | 00000000:00:1E.0 Off | 0 |
| N/A 30C P8 9W / 70W | 0MiB / 15109MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
我已经使用以下命令安装了 nvidia-container-toolkit。
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu18.04/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install nvidia-container-toolkit
sudo systemctl restart docker
我使用以下命令启动了我的容器
sudo docker run --rm --gpus all nvidia/cuda nvidia-smi
sudo docker run -it --rm --gpus all ubuntu nvidia-smi
docker run --rm --gpus all nvidia/cuda nvidia-smi
不应该 return CUDA Version: N/A
如果所有东西(又名 nvidia 驱动程序、CUDA 工具包和 nvidia-container-toolkit)都正确安装在主机上。
假设 docker run --rm --gpus all nvidia/cuda nvidia-smi
return 正确。我也遇到了容器内部 CUDA Version: N/A
的问题,我很幸运地解决了这个问题:
请看我的回答(显然你需要调整和安装所有的matching/correct版本)
当我使用“--gpus=all,capabilities=utility”时 return 错误, 当使用“--gpus=all”时 return True ...
对于来到这里寻找如何使用 docker compose 的任何人,请添加到您的服务中:
deploy:
resources:
reservations:
devices:
- driver: nvidia
capabilities:
- gpu
- utility # nvidia-smi
- compute # CUDA. Required to avoid "CUDA version: N/A"
- video # NVDEC/NVENC. For instance to use a hardware accelerated ffmpeg. Skip it if you don't need it