【发布时间】:2020-04-26 09:51:07
【问题描述】:
目标:
为了在 PyCharm 中调试 Python 应用程序,我使用 Tensorflow 将解释器设置为自定义 docker 映像,因此需要 GPU。问题在于,据我所知,PyCharm 的 命令构建 没有提供发现可用 GPU 的方法。
终端 - 它可以工作:
使用以下命令输入一个容器,指定哪些 GPU 可用 (--gpus):
docker run -it --rm --gpus=all --entrypoint="/bin/bash" 3b6d609a5189 # image has an entrypoint, so I overwrite it
在容器内,我可以运行 nvidia-smi 来查看是否找到了 GPU,并确认 Tensorflow 找到了它,使用:
from tensorflow.python.client import device_lib
device_lib.list_local_devices()
# physical_device_desc: "device: 0, name: Quadro P2000, pci bus id: 0000:01:00.0, compute capability: 6.1"]
如果我不使用 --gpus 标志,则不会像预期的那样发现 GPU。
注意:使用 docker 19.03 及更高版本,Nvidia 运行时是本机支持的,因此不需要 nvidia-docker 并且 docker-run 参数 --runtime=nvidia 也已弃用。 Relevant thread.
PyCharm - 它不起作用
这是运行的配置:
(我意识到其中一些路径可能看起来不正确,但现在这不是问题)
我将解释器设置为指向同一个 docker 映像并运行 Python 脚本,将自定义 LD_LIBRARY_PATH 设置为与 docker 映像中 libcuda.so 是 located 匹配的运行参数(我在运行的容器中以交互方式找到它),但仍然没有找到设备:
错误消息显示可以加载 CUDA 库(即在 LD_LIBRARY_PATH 上找到),但仍未找到该设备。这就是为什么我相信 docker run 参数--gpus=all 必须设置在某个地方。我在 PyCharm 中找不到这样做的方法。
我尝试过的其他事情:
- 在 PyCharm 中,使用 Docker 执行模板配置(而不是 Python 模板)可以指定 运行参数,所以我希望通过
--gpus=all,但这似乎不是这些选项的解析器支持:
- 我尝试通过在
/etc/docker/daemon.json中包含以下配置,在 docker 守护进程中将默认运行时设置为nvidia:
{ "runtimes": { "nvidia": { "runtimeArgs": ["gpus=all"] } } }
但是,我不确定此格式是否正确。我已经尝试了上述的一些变体,但没有得到 GPU 的认可。上面的例子至少可以被解析并允许我重新启动 docker 守护进程而不会出错。
我注意到在官方的 Tensorflow docker 镜像中,他们安装了一个名为
nvinfer-runtime-trt-repo-ubuntu1804-5.0.2-ga-cuda10.0的包(通过apt install),这听起来像是一个很棒的工具,尽管它似乎只适用于 TensorRT。我把它添加到了我的 Dockerfile 中作为一个黑暗的镜头,但不幸的是它并没有解决这个问题。将
NVIDIA_VISIBLE_DEVICES=all等添加到PyCharm配置的环境变量中,没有运气。
我正在使用 Python 3.6、PyCharm Professional 2019.3 和 Docker 19.03。
【问题讨论】:
标签: python docker tensorflow pycharm nvidia