【问题标题】:Pycharm debugging using docker with GPUs使用带有 GPU 的 docker 进行 Pycharm 调试
【发布时间】: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.solocated 匹配的运行参数(我在运行的容器中以交互方式找到它),但仍然没有找到设备:

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

我尝试过的其他事情:

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

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

但是,我不确定此格式是否正确。我已经尝试了上述的一些变体,但没有得到 GPU 的认可。上面的例子至少可以被解析并允许我重新启动 docker 守护进程而不会出错。

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

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

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

【问题讨论】:

    标签: python docker tensorflow pycharm nvidia


    【解决方案1】:

    现在 PyCharm 2020.2 中提供 Docker GPU 支持,无需全局 default-runtime。 只需在configuration window 的“Docker 容器设置”部分下设置--gpus all

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

    【讨论】:

    • 可笑的是,这个小东西 Run with Python Console 只是简单地破坏了输入参数
    【解决方案2】:

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

    我在/etc/docker/daemon.json中添加了以下内容:

    {
        "default-runtime": "nvidia",
        "runtimes": {
            "nvidia": {
                "path": "nvidia-container-runtime",
                "runtimeArgs": []
            }
        }
    }
    

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

    sudo service docker restart
    

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

    【讨论】:

      【解决方案3】:

      查看 Michał De 的答案,它有效。但是,交互式控制台仍然损坏。通过一些docker inspect,我发现使用选项Run with Python Console 会覆盖docker config,而忽略提供的选项--gpus all。我无法忍受这样的生活质量损失,并强迫pycharm使用docker-compose玩得很好。

      看,解决方法。


      1.如何在 Tensorflow 中测试 GPU

      import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))
      

      应该返回类似的东西

      [PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
      

      2。确保你有一个可以工作的简单 docker 容器

      docker pull tensorflow/tensorflow:latest-gpu-jupyter
      docker run --gpus all -it tensorflow/tensorflow:latest-gpu-jupyter python3 -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
      

      最后一次打印应如步骤 1 中所述。否则请参阅 nvidia guidetensorflow guide


      3.创建一个撰写文件并对其进行测试

      version: '3'
      # ^ fixes another pycharm bug
      services:
        test:
          image: tensorflow/tensorflow:latest-gpu-jupyter  
          # ^ or your own
          command: python3 -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"  
          # ^ irrelevant, will be overwridden by pycharm, but usefull for testing
          deploy:
            resources:
              reservations:
                devices:
                  - driver: nvidia
                    count: all
                    capabilities: [gpu]
      
      docker-compose --file your_compose_file up
      

      同样,您应该会看到与第 1 步中所述相同的输出。鉴于第 2 步已成功,这应该不会让人感到意外。


      4.在pycharm中将此compose设置为解释器

      • 配置文件:your_compose_file
      • 服务:测试(它只是工作,但你可以有更多fun


      5.在运行支持 GPU 的 docker 时享受您的交互式控制台。

      【讨论】:

        猜你喜欢
        • 2018-08-29
        • 2020-01-03
        • 2020-07-22
        • 1970-01-01
        • 2013-08-25
        • 2018-09-03
        • 1970-01-01
        • 2013-10-20
        • 2018-10-21
        相关资源
        最近更新 更多