使用带有GPU的docker进行Pycharm调试

问题描述 投票:3回答:1

目标:

要在PyCharm中调试Python应用程序,我在其中使用Tensorflow将解释器设置为自定义docker映像,因此需要GPU。问题是,据我所知,PyCharm的command-building并没有提供发现可用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=nvidiaRelevant thread

PyCharm-不起作用

这是运行的配置:

configuration

(我意识到其中一些路径可能看起来不正确,但现在不是问题)

我将解释程序指向相同的docker镜像并运行Python脚本,将自定义LD_LIBRARY_PATH设置为与docker镜像中libcuda.so d为locate d的运行匹配的参数(我发现它在一个正在运行的容器中进行交互),但仍然找不到任何设备:

error message

错误消息显示可以加载CUDA库(即在LD_LIBRARY_PATH上找到了CUDA库),但是仍然找不到该设备。这就是为什么我认为docker run参数--gpus=all必须设置在某个地方的原因。我在PyCharm中找不到解决方法。

我尝试过的其他方法:

  1. 在PyCharm中,使用可以指定运行参数的Docker执行模板配置(而不是Python模板),所以我希望传递--gpus=all,但解析器似乎不支持这些选项中的一个:

parse error

  1. [我试图通过在nvidia中包含以下配置,将默认运行时设置为docker守护进程中的/etc/docker/daemon.json
{
    "runtimes": {
        "nvidia": {
            "runtimeArgs": ["gpus=all"]
        }
    }
}

但是,我不确定此格式是否正确。我已经尝试了上述几种变体,但没有任何GPU被识别。上面的示例至少可以被解析,并允许我无错误地重新启动docker守护进程。

  1. 我在Tensorflow官方docker映像中注意到,他们安装了一个名为apt install的软件包(通过nvinfer-runtime-trt-repo-ubuntu1804-5.0.2-ga-cuda10.0),这听起来像是一个很好的工具,尽管它似乎只适用于TensorRT。我把它添加到了Dockerfile中,作为一个黑暗的镜头,但是不幸的是它没有解决问题。

  2. NVIDIA_VISIBLE_DEVICES=all等添加到PyCharm配置的环境变量中,没有运气。

我正在使用Python 3.6,PyCharm Professional 2019.3和Docker 19.03。

python docker tensorflow pycharm nvidia
1个回答
0
投票

事实证明,我帖子的“其他我尝试过的内容”部分中的尝试2。

© www.soinside.com 2019 - 2024. All rights reserved.