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

问题描述

我正在尝试从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

解决方法

当我使用“--gpus=all,capabilities=utility”时返回False, 当使用“--gpus=all”时返回True ...

, 如果在主机上正确安装了所有内容(aka nvidia驱动程序,CUDA工具包和nvidia-container-toolkit),则

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(显然,您需要调整并安装所有版本的匹配/正确版本)

,

对于任何到达这里并希望使用 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

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...