GPU 上的 tensorflow:没有已知设备,尽管 cuda 的 deviceQuery 返回“PASS”结果
Posted
技术标签:
【中文标题】GPU 上的 tensorflow:没有已知设备,尽管 cuda 的 deviceQuery 返回“PASS”结果【英文标题】:tensorflow on GPU: no known devices, despite cuda's deviceQuery returning a "PASS" result 【发布时间】:2017-07-08 16:20:23 【问题描述】:注意:这个问题最初是asked on github,但它被要求在这里代替
我在 gpu 上运行 tensorflow 时遇到问题,这似乎不是 cuda 的常见配置问题,因为一切似乎都表明 cuda 已正确设置。
主要症状:运行tensorflow时,我的gpu没有被检测到(the code being run和its output)。
与常见问题不同的是,cuda 似乎已正确安装并且从 cuda 示例运行 ./deviceQuery
是成功的 (output)。
我有两张图形卡:
一个旧的 GTX 650 用于我的显示器(我不想在 tensorflow 中使用那个) 我想专用于 tensorflow 的 GTX 1060我用:
tensorflow-1.0.0 cuda-8.0 (ls -l /usr/local/cuda/lib64/libcud*) cudnn-5.1.10 python-2.7.12 nvidia-drivers-375.26(由 cuda 安装并替换了我的发行版驱动程序包)我试过了:
将/usr/local/cuda/bin/
添加到$PATH
使用 with tf.device('/gpu:1'):
强制在 tensorflow 脚本中放置 gpu(以及当它失败时使用 with tf.device('/gpu:0'):
,这是很好的衡量标准)
将我想与 CUDA_VISIBLE_DEVICES
一起使用的 gpu 列入白名单,以防我的旧卡的存在确实导致问题
使用 sudo 运行脚本(因为为什么不这样做)
这里是nvidia-smi 和nvidia-debugdump -l 的输出,以防有用。
在这一点上,我觉得我已经遵循了所有的面包屑,不知道我还能尝试什么。我什至不确定我是在考虑错误还是配置问题。任何有关如何调试的建议将不胜感激。谢谢!
更新:在 github 上 Yaroslav 的帮助下,我通过提高日志级别收集了更多的调试信息,但似乎并没有说明设备选择:https://gist.github.com/oelmekki/760a37ca50bf58d4f03f46d104b798bb
更新 2:使用 theano 可以正确检测 gpu,但有趣的是它抱怨 cuDNN 太新,然后回退到 cpu (code ran, output)。也许这也可能是 tensorflow 的问题?
【问题讨论】:
作为另一个健全性检查,您可以尝试使用 GPU 的另一个框架(如 Theano)以查看它是否有效,也许您的 GPU 设置因某种原因被 deviceQuery 检测不到而损坏 好主意,谢谢。我会尝试并在问题正文中报告。 输出非常小,这是我使用 VLOG=1 运行时看到的结果 -- pastebin.com/LQF0j3Ri 是的,我已经将它截断到设备选择之外,因为其余的可能无关紧要。这是完整的日志:gist.github.com/oelmekki/25ea3b1186c2ee7aaa23448547bc23b2 【参考方案1】:从日志输出看来,您运行的是 TensorFlow 的 CPU 版本(PyPI:tensorflow
),而不是 GPU 版本(PyPI:tensorflow-gpu
)。运行 GPU 版本会记录有关 CUDA 库的信息,或者如果无法加载它们或打开驱动程序会出错。
如果您运行以下命令,您应该能够在后续运行中使用 GPU:
$ pip uninstall tensorflow
$ pip install tensorflow-gpu
【讨论】:
哦,确实。我在安装 tensorflow 时关注了这个文档 [1],但我不知道它需要其他包。谢谢! -- [1] tensorflow.org/tutorials/using_gpu 每当我安装 tensorflow-gpu 时,它都会重新安装 tensorflow。这应该发生吗?我无法让它检测到我的设备.. 我有同样的问题,我按照你的步骤,“卸载 tensorlow”和“安装 tensorflow-gpu”我得到了这个错误:AttributeError: 'module' object has no attribute 'Session'跨度> 哈利路亚,我一直在努力让我的笔记本电脑 GeForce 940MX 正常工作并且上面的卸载工作正常。从来没有想过要尝试。 这个答案很可能在 2021 年被弃用......还有其他解决方案吗?【参考方案2】:这里没有其他答案对我有用。经过一番修改后,我发现这解决了我在处理从二进制构建的 Tensorflow 时遇到的问题:
第 0 步:卸载 protobuf
pip uninstall protobuf
第 1 步:卸载 tensorflow
pip uninstall tensorflow
pip uninstall tensorflow-gpu
第 2 步:强制重新安装支持 GPU 的 Tensorflow
pip install --upgrade --force-reinstall tensorflow-gpu
第 3 步:如果尚未设置,请设置 CUDA_VISIBLE_DEVICES
所以对于拥有 2 个 GPU 的我来说
export CUDA_VISIBLE_DEVICES=0,1
【讨论】:
你拯救了我的一天! 很高兴听到它:)【参考方案3】:就我而言:
pip3 uninstall tensorflow
还不够。因为重新安装时:
pip3 install tensorflow-gpu
它仍然是用 cpu 而不是 gpu 重新安装 tensorflow。 所以,在安装 tensorflow-gpu 之前,我尝试在 site-packages 卸载 protobuf 中删除所有相关的 tensor 文件夹,并且成功了!
结论:
pip3 uninstall tensorflow
删除 ~\Python35\Lib\site-packages 中的所有张量文件夹
pip3 uninstall protobuf
pip3 install tensorflow-gpu
【讨论】:
错字建议:我建议您在帖子中到处使用pip3
。就我而言,我从 dist-packages 中删除了 tensorboard 和 tensorflow-1.3.0.dist-info 并解决了这个问题。【参考方案4】:
可能看起来很愚蠢,但 sudo reboot
为我和其他几个人解决了完全相同的问题。
【讨论】:
我也只需要重启。 ^^ 拯救了我的一天^_^【参考方案5】:Mark Sonn 给出了拯救我一天的答案。只需将此添加到.bashrc
和
source ~/.bashrc
如果你在 Linux 上:
export CUDA_VISIBLE_DEVICES=0,1
以前我必须使用这个解决方法来让 tensorflow 识别我的 GPU:
import tensorflow as tf
gpus = tf.config.experimental.list_physical_devices(device_type="GPU")
tf.config.experimental.set_visible_devices(devices=gpus[0], device_type="GPU")
tf.config.experimental.set_memory_growth(device=gpus[0], enable=True)
即使代码仍然有效,但每次都添加这些行显然不是我想要的。
我的tensorflow
版本是根据the documentation 从源代码构建的,以获得v2.3 支持CUDA 10.2 和cudnn 7.6.5。
如果有人对此有疑问,我建议您快速浏览一下文档。用 bazel 构建需要 1.5 小时。确保您已安装 gcc7 和 bazel。
【讨论】:
【参考方案6】:这个错误可能是你的GPU的计算能力导致的,CUDA官方支持3.5~5.0的GPU计算能力,你可以看这里:https://en.wikipedia.org/wiki/CUDA
就我而言,错误是这样的:
忽略具有 Cuda 计算能力 3.0 的可见 gpu 设备(设备:0,名称:GeForce GT 640M,pci 总线 ID:0000:01:00.0,计算能力:3.0)。所需的最低 Cuda 能力为 3.5。
目前我们只能在 Linux(或 mac OS)上从源代码编译以打破“3.5~5.0”的限制。
【讨论】:
【参考方案7】:存在各种系统不兼容问题。
对库的要求可能因 TensorFlow 版本而异。
在交互模式下使用 python 时,很多有用的信息被打印到 stderr 中。我对 TensorFlow 2.0 或更高版本的建议:
python3.8 -c "import tensorflow as tf; print('tf version:', tf.version); tf.config.list_physical_devices()"
执行此命令后,除了要求之外,您还将观察到缺少的库(或其版本)与 GPU 一起使用:
https://www.tensorflow.org/install/gpu#software_requirements https://www.tensorflow.org/install/gpu#hardware_requirements附言CUDA_VISIBLE_DEVICES 不应该与 TensorFlow 有真正的联系,或者它更通用 - 它是一种为所有启动的进程定制可用 GPU 的方法。
【讨论】:
【参考方案8】:适用于 anaconda 用户。我使用 Anaconda Navigator 通过 GUI 安装了tensorflow-gpu
,并在tensorflow guide 中配置了 NVIDIA GPU,但 tensorflow 无论如何都找不到 GPU。然后我卸载了 tensorflow,总是通过 GUI(参见here)并在 anaconda 提示符下通过命令行重新安装它:
conda install -c anaconda tensorflow-gpu
然后tensorflow可以正确找到GPU。
【讨论】:
以上是关于GPU 上的 tensorflow:没有已知设备,尽管 cuda 的 deviceQuery 返回“PASS”结果的主要内容,如果未能解决你的问题,请参考以下文章
Tensorflow 未检测到 GPU - 添加可见 gpu 设备:0
为啥带有 TensorFlow 的 Keras 没有使用所有 GPU 内存
已安装 Tensorflow-gpu、CUDA 和 cudnn,但发现 GPU 设备但未使用 [重复]