目标是:
要在PyCharm中调试Python应用程序,我使用Tensorflow设置解释器为自定义坞映像,因此需要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运行参数--runtime=nvidia。相关螺纹。
PyCharm -它不起作用
下面是运行的配置:

(我意识到其中一些路径可能看上去不正确,但这暂时不是一个问题)
我将解释器设置为指向同一个码头映像并运行Python,并将一个自定义LD_LIBRARY_PATH设置为一个参数,用于与libcuda.so在码头映像中的located匹配的运行(我在正在运行的容器中发现了它),但仍然没有找到任何设备:

错误消息显示CUDA库能够加载(即在该LD_LIBRARY_PATH上找到),但仍未找到该设备。这就是为什么我认为码头运行参数--gpus=all必须设置在某个地方。我无法在PyCharm中找到这样的方法。
我尝试过的其他事情:
--gpus=all,但这些选项的解析器似乎不支持这一点:

nvidia,方法是在/etc/docker/daemon.json中包括以下配置{“运行时”:{ "nvidia":{ "runtimeArgs":"gpus=all“}}
但是,我不确定这方面的正确格式。我尝试了一些以上的变体,但没有得到GPU的认可。上面的示例至少可以被解析,并允许我在没有错误的情况下重新启动docker守护进程。
apt install的软件包,名为nvinfer-runtime-trt-repo-ubuntu1804-5.0.2-ga-cuda10.0,这听起来是一个很好的工具,尽管似乎只适用于TensorRT。我把它添加到我的Dockerfile中,作为一个暗处,但不幸的是它没有解决这个问题。NVIDIA_VISIBLE_DEVICES=all等添加到PyCharm配置的环境变量中,没有任何进展。我正在使用Python3.6、PyCharm Professional 2019.3和Docker19.03。
发布于 2020-01-09 17:50:42
事实证明,尝试2.在我的帖子中的“其他尝试”部分是正确的方向,并且使用以下允许的PyCharm的远程解释器(码头映像)定位GPU,就像终端能够找到的那样。
我在/etc/docker/daemon.json中添加了以下内容
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}还必须在保存文件后重新启动docker服务:
sudo service docker restart注意:这将杀死系统上所有正在运行的码头集装箱。
发布于 2020-08-24 09:47:13
Docker的支持现在可以在PyCharm 2020.2中使用,而不需要全局default-runtime。只需将--gpus all设置在配置窗口中的“Docker容器设置”部分。
如果no NVIDIA GPU device is present: /dev/nvidia0 does not exist错误仍然发生,请确保取消选中Run with Python Console,因为它仍然不能正常工作。
发布于 2021-09-27 20:05:55
看看米哈ł德的答案,它是有效的。然而,一个交互控制台仍然是坏的。使用一些docker inspect,我发现使用选项Run with Python Console覆盖了docker配置,忽略了提供的选项--gpus all。我无法忍受这样的生活质量下降和被迫使用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 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指南或tensorflow指南。
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中的解释器。

5.在运行启用GPU的对接器.时享受您的交互控制台
https://stackoverflow.com/questions/59652992
复制相似问题