我正在尝试从Docker容器内部使用GPU。我正在Ubuntu 18.04上使用版本19.03的Docker。
如果我运行nvidia-smi,则在docker容器之外,我得到以下输出。
+-----------------------------------------------------------------------------+
| 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 image创建的容器中运行相同的东西,我将获得与上述相同的输出,并且一切运行顺利。 torch.cuda.is_available()返回 True 。
但是,如果我在任何其他Docker容器中运行相同的nvidia-smi命令,它将给出以下输出,您可以看到CUDA版本以 N / A 的形式出现。在容器内 torch.cuda.is_available()还会返回 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
答案 0 :(得分:2)
当我使用“--gpus=all,capabilities=utility”时返回False, 当使用“--gpus=all”时返回True ...
答案 1 :(得分:1)
docker run --rm --gpus all nvidia/cuda nvidia-smi
不应返回CUDA Version: N/A
。
鉴于docker run --rm --gpus all nvidia/cuda nvidia-smi
正确返回。我还遇到了容器内部的CUDA Version: N/A
问题,我很幸运地解决了该问题:
请查看我的回答https://stackoverflow.com/a/64422438/2202107(显然,您需要调整并安装所有版本的匹配/正确版本)
答案 2 :(得分:0)
对于任何到达这里并希望使用 docker compose 进行操作的人,请添加到您的服务中:
deploy:
resources:
reservations:
devices:
- driver: nvidia
capabilities:
- gpu
- utility # nvidia-smi
- compute # CUDA. Required to avoid "CUDA version: N/A"
- video # NVENC. For instance to use a hardware accelerated ffmpeg. Skip it if you don't need it