使用docker与GPU进行Pycharm调试 - python

目标:

为了在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与GPU进行Pycharm调试 - python

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

我将解释器设置为指向相同的docker镜像并运行Python脚本,将自定义LD_LIBRARY_PATH设置为与docker镜像中libcuda.so locate d匹配的运行的参数(我以交互方式找到了它)在运行中的容器中),但仍然找不到设备:

使用docker与GPU进行Pycharm调试 - python

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

我尝试过的其他方法:

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

使用docker与GPU进行Pycharm调试 - python

我尝试通过在nvidia中包含以下配置,将默认运行时设置为docker守护进程中的/etc/docker/daemon.json

{
    "runtimes": {
        "nvidia": {
            "runtimeArgs": ["gpus=all"]
        }
    }
}

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

我在Tensorflow官方docker映像中注意到,它们安装了一个名为apt install的软件包(通过nvinfer-runtime-trt-repo-ubuntu1804-5.0.2-ga-cuda10.0),这听起来像是一个很棒的工具,尽管它似乎仅适用于TensorRT。我将它添加到我的Dockerfile中,是在黑暗中拍摄的,但是不幸的是,它并没有解决问题。
NVIDIA_VISIBLE_DEVICES=all等添加到PyCharm配置的环境变量中,没有任何运气。

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

参考方案

事实证明,尝试2.在我帖子的“其他我尝试过的”部分中是正确的方向,并使用以下允许的PyCharm的远程解释器(码头工人镜像)定位GPU,如终端所能。

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

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

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

sudo service docker restart

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

Python-crontab模块 - python

我正在尝试在Linux OS(CentOS 7)上使用Python-crontab模块我的配置文件如下:{ "ossConfigurationData": { "work1": [ { "cronInterval": "0 0 0 1 1 ?", "attribute&…

Python:检查是否存在维基百科文章 - python

我试图弄清楚如何检查Wikipedia文章是否存在。例如,https://en.wikipedia.org/wiki/Food 存在,但是https://en.wikipedia.org/wiki/Fod 不会,页面只是说:“维基百科没有此名称的文章。”谢谢! 参考方案 >>> import urllib >>> prin…

Python GPU资源利用 - python

我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…

Python Pandas导出数据 - python

我正在使用python pandas处理一些数据。我已使用以下代码将数据导出到excel文件。writer = pd.ExcelWriter('Data.xlsx'); wrong_data.to_excel(writer,"Names which are wrong", index = False); writer.…

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…