GPU上的tensorflow:没有已知设备,尽管cuda的deviceQuery返回“PASS”结果

时间:2017-02-19 11:36:37

标签: tensorflow

  

注意:此问题最初是asked on github,但有人要求在此处

我在gpu上运行tensorflow时遇到了麻烦,而且它似乎不是通常的cuda的配置问题,因为一切似乎表明cuda已正确设置。

主要症状:运行tensorflow时,未检测到我的gpu(the code being runits output)。

与通常的问题不同的是,cuda似乎已正确安装,并且来自cuda样本的./deviceQuery成功运行(output)。

我有两张图形卡:

  • 用于我的显示器的旧GTX 650(我不想使用带有tensorflow的那个)
  • 我想专门用于tensorflow的GTX 1060

我用:

我试过了:

  • /usr/local/cuda/bin/添加到$PATH
  • 使用with tf.device('/gpu:1'):强制在tensorflow脚本中放置gpu,并在失败时强制with tf.device('/gpu:0'):,以便进行更好的衡量。
  • 将我想要与CUDA_VISIBLE_DEVICES一起使用的gpu列入白名单,以防旧版不受支持的卡存在导致问题
  • 使用sudo运行脚本(因为为什么不运行)

以下是nvidia-sminvidia-debugdump -l的输出,以防它有用。

在这一点上,我觉得我已经遵循了所有的面包屑,并且不知道我还能尝试什么。我甚至不确定我是否正在考虑错误或配置问题。任何关于如何调试这个的建议将不胜感激。谢谢!

更新:在github上Yaroslav的帮助下,我通过提高日志级别收集了更多的调试信息,但似乎没有说明设备选择:https://gist.github.com/oelmekki/760a37ca50bf58d4f03f46d104b798bb < / p>

更新2 :使用theano正确检测gpu,但有趣的是它抱怨cuDNN太近,然后回退到cpu(code ranoutput)。也许这也可能是张量流的问题?

8 个答案:

答案 0 :(得分:50)

从日志输出中,看起来您正在运行TensorFlow(PyPI:tensorflow)的CPU版本,而不是GPU版本(PyPI:tensorflow-gpu)。运行GPU版本将记录有关CUDA库的信息,如果无法加载或打开驱动程序,则会出现错误。

如果您运行以下命令,则应该能够在后续运行中使用GPU:

$ pip uninstall tensorflow
$ pip install tensorflow-gpu

答案 1 :(得分:14)

就我而言:

pip3 uninstall tensorflow

还不够。因为重新安装时使用:

pip3 install tensorflow-gpu

它仍然用cpu而不是gpu重新安装tensorflow。 所以,在安装tensorfow-pgu之前,我试图删除site-packages卸载protobuf中的所有相关张量文件夹,它可以工作!

结论:

pip3 uninstall tensorflow

删除〜\ Python35 \ Lib \ site-packages

中的所有张量文件夹
pip3 uninstall protobuf
pip3 install tensorflow-gpu

答案 2 :(得分:9)

这里没有其他答案对我有用。经过一些修改后,我发现在处理从二进制构建的Tensorflow时,这解决了我的问题:

第0步:卸载protobuf

pip uninstall protobuf

第1步:卸载tensorflow

pip uninstall tensorflow
pip uninstall tensorflow-gpu

第2步:强制重新安装Tensorflow并支持GPU

pip install --upgrade --force-reinstall tensorflow-gpu

第3步:如果您还没有,请设置CUDA_VISIBLE_DEVICES

对于我来说,有2个GPU就是

export CUDA_VISIBLE_DEVICES=0,1

答案 3 :(得分:6)

可能看起来很愚蠢,但是sudo reboot为我和其他几个人解决了完全相同的问题。

答案 4 :(得分:1)

救了我一天的答案来自马克·索恩(Mark Sonn)。只需将其添加到.bashrcsource ~/.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。

如果对此有任何疑问,我建议快速浏览一下文档。花了1.5个小时来制作榛子。确保已安装gcc7和bazel。

答案 5 :(得分:0)

此错误可能是由您的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”的限制。

答案 6 :(得分:0)

存在各种系统不兼容问题。

对库的要求可能因 TensorFlow 版本而异。

在交互模式下使用 python 期间,许多有用的信息被打印到 stderr。我建议使用 2.0 或更高版本的 TensorFlow 调用:

<块引用>

python3.8 -c "将 tensorflow 导入为 tf; print('tf version:', tf.version); tf.config.list_physical_devices()"

执行此命令后,除了满足要求外,您还会发现缺少的库(或它的一个版本)可与 GPU 配合使用:

附言CUDA_VISIBLE_DEVICES 不应该与 TensorFlow 有真正的联系,或者更通用 - 这是一种为所有启动的进程自定义可用 GPU 的方法。

答案 7 :(得分:0)

针对 anaconda 用户。我使用 Anaconda Navigator 通过 GUI 安装了 tensorflow-gpu 并像 tensorflow guide 一样配置了 NVIDIA GPU,但无论如何 tensorflow 都找不到 GPU。然后我总是通过 GUI 卸载 tensorflow(请参阅 here)并通过命令行在 anaconda 提示符下重新安装它:

conda install -c anaconda tensorflow-gpu

然后 tensorflow 可以正确找到 GPU。