使用 docker 和 GPU 进行 Pycharm 调试

n1k*_*1t4 6 python nvidia pycharm docker tensorflow

目标:

为了在 PyCharm 中调试 Python 应用程序,我将解释器设置为自定义 docker 映像,使用 Tensorflow,因此需要 GPU。据我所知,问题在于 PyCharm 的命令构建并没有提供发现可用 GPU 的方法。

终端 - 它可以工作:

使用以下命令输入容器,指定要使用的 GPU ( --gpus):

docker run -it --rm --gpus=all --entrypoint="/bin/bash" 3b6d609a5189        # image has an entrypoint, so I overwrite it
Run Code Online (Sandbox Code Playgroud)

在容器内,我可以运行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"]
Run Code Online (Sandbox Code Playgroud)

如果我不使用该--gpus标志,则不会像预期的那样发现任何 GPU。注意:使用 docker 版本 19.03 及更高版本,原生支持 Nvidia 运行时,因此不需要nvidia-docker,而且 docker-run 参数--runtime=nvidia也已弃用。相关线程

PyCharm - 它不起作用

这是运行的配置:

配置

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

我将解释器设置为指向同一个 docker 映像并运行 Python 脚本,将自定义设置为与 docker 映像中 d的LD_LIBRARY_PATH位置匹配的运行参数(我在正在运行的容器内以交互方式找到它),但仍然没有找到设备:libcuda.solocate

错误信息

错误消息显示 CUDA 库能够加载(即在该库上找到LD_LIBRARY_PATH),但仍然找不到设备。这就是为什么我相信 docker run 参数--gpus=all必须在某个地方设置。我在 PyCharm 中找不到这样做的方法。

我尝试过的其他事情:

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

解析错误

  1. 我尝试nvidia通过在 docker 守护进程中包含以下配置来设置默认运行时/etc/docker/daemon.json
{
    "runtimes": {
        "nvidia": {
            "runtimeArgs": ["gpus=all"]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我不确定正确的格式。我已经尝试了上述的几种变体,但没有任何一个可以让 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。

小智 5

PyCharm 2020.2 现已提供 Docker GPU 支持,无需全局default-runtime. 只需在配置窗口--gpus all中的“Docker 容器设置”部分下进行设置即可。

如果no NVIDIA GPU device is present: /dev/nvidia0 does not exist错误仍然发生,请确保取消选中Run with Python Console,因为它仍然无法正常工作。


n1k*_*1t4 3

事实证明,我的帖子的“我尝试过的其他事情”部分中的尝试 2.是正确的方向,并且使用以下内容允许 PyCharm 的远程解释器(docker 映像)定位 GPU,正如终端能够做到的那样。

我将以下内容添加到/etc/docker/daemon.json

{
    "default-runtime": "nvidia",
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

保存文件后还需要重启docker服务:

sudo service docker restart
Run Code Online (Sandbox Code Playgroud)

注意:这会杀死系统上所有正在运行的 docker 容器