TensorFlow的Docker GPU镜像无法检测到我的GPU。

7

使用最新版本的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个回答

13
根据此处此处的文档,创建Docker容器时需要添加一个“gpus”参数以获得GPU支持。

因此,您应该像这样启动容器。 “--gpus all”使主机上所有可用的GPU都可见于容器中。

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上,除了与依赖项和nvidia-container-toolkit一起安装docker外,没有安装其他任何东西。

此外,我强烈建议在创建容器时避免使用latest标签,因为它可能会导致您无意中升级到新的映像。选择版本编号的映像。

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


2
搞定了!也许我错了,但是似乎在为GPU制作的图像上不应该需要gpu标志 :( - prismspecs
1
我同意应该有某种默认的GPU分配,但我也认为这是一种故意设计选择,用于小型和大型企业设置的标准化使用。当您拥有大量GPU并希望自动化和分发它们给许多用户时,它会非常方便。 - thatrandomnpc
1
请注意,如果您尚未安装容器运行时,则需要安装:https://docs.docker.com/config/containers/resource_constraints/#gpu - derekbaker783
1
@derekbaker783 说得好,既然op已经在容器中成功运行了nvidia-smi,我就没有在答案中添加它。 - thatrandomnpc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接