目标:
为了在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
locate
d匹配的运行的参数(我以交互方式找到了它)在运行中的容器中),但仍然找不到设备:
错误消息显示可以加载CUDA库(即在该LD_LIBRARY_PATH
上找到),但仍未找到该设备。这就是为什么我认为docker run参数--gpus=all
必须设置在某个地方的原因。我找不到在PyCharm中做到这一点的方法。
我尝试过的其他方法:
在PyCharm中,使用可以指定运行参数的Docker执行模板配置(而不是Python模板),因此我希望传递--gpus=all
,但是这些选项的解析器似乎不支持这种方式:
我尝试通过在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…