【问题标题】:Using GPU inside docker container - CUDA Version: N/A and torch.cuda.is_available returns False在 docker 容器中使用 GPU - CUDA 版本:N/A 和 torch.cuda.is_available 返回 False
【发布时间】:2020-12-24 08:36:51
【问题描述】:

我正在尝试从我的 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() 返回 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

【问题讨论】:

  • 这不是一个与 CUDA 编程相关的问题,不应这样标记
  • @talonmies,我可以知道为什么这与 CUDA 无关吗?我正在尝试使用 Docker 的 CUDA 框架来利用连接到主机的 GPU,对吗?我这样说有错吗?
  • 面临同样的情况。你找到答案了吗?
  • @arun 我刚刚将 docker 基础映像更改为 nvidia/cuda 映像以使其正常工作
  • 我正在努力避免使用 nvidia/cuda 作为基础映像..

标签: docker docker-compose cuda pytorch nvidia-docker


【解决方案1】:

如果主机上正确安装了所有东西(又名 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(显然你需要调整和安装所有东西的匹配/正确版本)

【讨论】:

  • 一旦CUDA Version: N/A 问题得到解决,tensorflow (gpu) 无需任何配置即可立即工作。我认为 pytorch 也会这样做。
  • 非常感谢您的回答,看来它也对我有用。我浏览了您的回答,发现还有其他各种需要安装的软件包。对我来说,我目前正在未连接到 Internet 的服务器上部署一个包。因此,我将不得不手动下载提到的包及其依赖项。我会尝试看看我将来是否可以做到。
  • @SaiChander 我有同样的限制,这就是我使用 docker 的原因。我可以在本地机器(不限制互联网)上安装 docker 内的所有内容,然后通过内部 docker 注册表或通过 docker load/save 将图像上传到服务器(互联网受到限制)
  • 我创建了一个 docker 镜像,然后使用 docker save 创建了一个 tar 文件并将 tar 文件移动到无法访问互联网的服务器,我使用 docker load 命令从 tar 文件中加载图像.现在,当我运行 docker run 命令时,它仍然会尝试执行 apt-get update && apt-get isntall... 命令,对吗?或者我可以以某种方式避免它?
【解决方案2】:

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

【讨论】:

  • 是答案吗?
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2020-03-27
    • 1970-01-01
    • 2020-07-14
    • 2021-09-23
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多