无法检测到从Pycharm启动的Tensorflow Docker容器上的GPU

San*_*ago 5 pycharm docker tensorflow nvidia-docker

我正在尝试从Pycharm IDE内部使用tensorflow提供的启用gpu的docker映像运行一个简单的tensorflow示例。一切正常,除了运行时,tensorflow不会从容器中检测到GPU,而是默认返回到CPU:

tensorflow/stream_executor/cuda/cuda_driver.cc:318] failed call to cuInit:
Run Code Online (Sandbox Code Playgroud)

运行:Ubuntu 18.04.3 Docker 19.03.3最新版本的NVIDIA Docker支持如下:https : //github.com/NVIDIA/nvidia-docker

我已经使用远程解释器功能设置了Pycharm项目以运行image:tensorflow:latest-gpu

如果我使用以下命令从命令行运行容器:

docker run --gpus all --rm tensorflow/tensorflow:latest-gpu nvidia-smi
Run Code Online (Sandbox Code Playgroud)

我得到这个:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.26       Driver Version: 430.26       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 108...  Off  | 00000000:41:00.0  On |                  N/A |
| 28%   26C    P8     9W / 250W |    443MiB / 11177MiB |      1%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

..这告诉我docker安装,映像和nvidia docker支持都可以。

现在,当Pycharm运行容器时,它不包含“ --gpus all”命令行选项。

如果我在没有--gpus all参数的情况下运行以上相同的命令:

docker run --rm tensorflow/tensorflow:latest-gpu nvidia-smi
Run Code Online (Sandbox Code Playgroud)

我得到:

docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"nvidia-smi\": executable file not found in $PATH": unknown.
Run Code Online (Sandbox Code Playgroud)

因此,这将表明Pycharm没有添加标记作为罪魁祸首。

但是,根据https://docs.docker.com/config/containers/resource_constraints/(GPU的底部部分)上的文档,环境变量NVIDIA_VISIBLE_DEVICES = all应该完成相同的操作。我确认即使没有--gpus所有参数,也确实设置了此环境变量。

此外,似乎没有办法从Pycharm中添加其他命令行参数。所以我被困住了。我觉得此设置不太奇怪,希望我缺少一些基本的知识。

Yuv*_*mon 0

我在 pycharm 和 pytorch 上也遇到过类似的问题。不知道为什么会发生这种情况,但我现在找到了一个解决方法,通过在脚本启动时进行以下调用:

import os
os.system('nvidia-smi') 
Run Code Online (Sandbox Code Playgroud)

PS:我遇到的错误是

RuntimeError:cudaGetDeviceCount() 发生意外错误。您在调用 NumCudaDevices() 之前是否运行了一些 cuda 函数,这些函数可能已经设置了错误?错误 803:系统不支持显示驱动程序/cuda 驱动程序组合