tensorflow docker gpu 图像未检测到我的 GPU

Posted

技术标签:

【中文标题】tensorflow docker gpu 图像未检测到我的 GPU【英文标题】:the tensorflow docker gpu image doesn't detect my GPU 【发布时间】:2020-11-17 04:58:06 【问题描述】:

运行最新的 docker:

docker run -it -p 8888:8888 tensorflow/tensorflow:latest-gpu-jupyter jupyter notebook --notebook-dir=/tf --ip 0.0.0.0 --no-browser --allow-root --NotebookApp.allow_origin='https://colab.research.google.com'

代码:

import tensorflow as tf
print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))

给我:

2020-07-27 19:44:03.826149: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcuda.so.1
2020-07-27 19:44:03.826179: E tensorflow/stream_executor/cuda/cuda_driver.cc:313] failed call to cuInit: UNKNOWN ERROR (-1)
2020-07-27 19:44:03.826201: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:163] no NVIDIA GPU device is present: /dev/nvidia0 does not exist

我使用的是 Pop_OS 20.04,已尝试从 Pop 存储库和 NVidia 安装 CUDA 驱动程序。没有骰子。任何帮助表示赞赏。

跑步

docker run --gpus all nvidia/cuda:10.0-base 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  GeForce RTX 2080    On   | 00000000:09:00.0  On |                  N/A |
|  0%   52C    P5    15W / 225W |    513MiB /  7959MiB |     17%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+

【问题讨论】:

【参考方案1】:

根据文档 here 和 here,您必须在创建 docker 容器时添加“gpus”参数才能支持 gpu。

所以你应该像这样启动你的容器。 “--gpus all”使主机上所有可用的 gpus 对容器可见。

docker run -it --gpus all -p 8888:8888 tensorflow/tensorflow:latest-gpu-jupyter jupyter notebook --notebook-dir=/tf --ip 0.0.0.0 --no-browser --allow-root --NotebookApp.allow_origin='https://colab.research.google.com'

您也可以尝试在 tensorflow 映像上运行 nvidia-smi 以快速检查容器上是否可以访问 gpu。

docker run -it --rm --gpus all tensorflow/tensorflow:latest-gpu-jupyter nvidia-smi

在我的情况下会返回这个。

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.100      Driver Version: 440.100      CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 1070    Off  | 00000000:07:00.0  On |                  N/A |
|  0%   45C    P8     8W / 166W |    387MiB /  8116MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+

如您所见,我正在运行较旧的 nvidia 驱动程序 (440.100),因此我无法确认这是否可以解决您的问题。我也在 Pop_OS 20.04 上,除了 docker 以及依赖项和 nvidia-container-toolkit 之外没有安装任何东西。

另外,我强烈建议在创建容器时避免使用 latest 标签,因为它可能会导致您在不知不觉中升级到更新的镜像。使用版本编号的图像。

例如 tensorflow/tensorflow:2.3.0-gpu-jupyter。

【讨论】:

做到了!也许我错了,但在为 GPU 制作的图像上似乎不需要 gpu 标志:( 我同意应该有某种默认的 gpu 分配,但我也认为这是在小型和大型企业环境中标准化使用的深思熟虑的设计选择。当您拥有大量 gpus 并希望将其自动化并分发给许多用户时,它会非常方便。 请注意,如果您还没有安装容器运行时,则需要:docs.docker.com/config/containers/resource_constraints/#gpu @derekbaker783 好点,因为 op 让 nvidia-smi 在容器中工作,我没有在答案中添加。

以上是关于tensorflow docker gpu 图像未检测到我的 GPU的主要内容,如果未能解决你的问题,请参考以下文章

在Docker中使用TensorFlow(GPU版+Ubuntu 20.04)

在Docker中使用TensorFlow(GPU版+Ubuntu 20.04)

tensorflow gpu 在“windows”上没有 docker 服务

python docker 多进程提供 稳定tensorflow gpu 线上服务

sh 在GCP上运行Docker上的tensorflow GPU

Tensorflow 未检测到 GPU - 添加可见 gpu 设备:0