在 docker 容器中使用 GPU - CUDA 版本:N/A 和 torch.cuda.is_available 返回 False

Sai*_*der 10 cuda docker docker-compose pytorch nvidia-docker

我正在尝试从我的 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                                                 |
+-----------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

如果我在从 nvidia/cuda docker 映像创建的容器内运行相同的东西,我会得到与上面相同的输出,并且一切运行顺利。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                                                 |
+-----------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

我已经使用以下命令安装了 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
Run Code Online (Sandbox Code Playgroud)

我使用以下命令启动了我的容器

sudo docker run --rm --gpus all nvidia/cuda nvidia-smi
sudo docker run -it --rm --gpus all ubuntu nvidia-smi
Run Code Online (Sandbox Code Playgroud)

GG.*_*GG. 9

对于任何到达这里寻找如何使用docker compose进行操作的人,请添加到您的服务中:

deploy:
  resources:
    reservations:
      devices:
      - driver: nvidia
        capabilities:
          - gpu
          - utility # nvidia-smi
          - compute # CUDA
          - video   # NVDEC/NVENC/NVCUVID. For instance to use a hardware accelerated ffmpeg. Skip it if you don't need it
Run Code Online (Sandbox Code Playgroud)

文档: https: //docs.docker.com/compose/gpu-support

您可以在此处找到驱动程序功能列表: https: //docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/docker-specialized.html#driver-capability


Sid*_*hou 5

docker run --rm --gpus all nvidia/cuda nvidia-smiCUDA Version: N/A如果主机上正确安装了所有内容(又名 nvidia 驱动程序、CUDA 工具包和 nvidia-container-toolkit),则不应返回。

鉴于docker run --rm --gpus all nvidia/cuda nvidia-smi返回正确。我也遇到了CUDA Version: N/A容器内部的问题,我很幸运地解决了这个问题:

请参阅我的答案/sf/answers/4509570691/(显然你需要调整和安装所有内容的匹配/正确版本)