如何检查keras/tensorflow是否使用cuDNN?

如何检查keras/tensorflow是否使用cuDNN?,tensorflow,keras,cudnn,Tensorflow,Keras,Cudnn,我已经安装了CUDA和cuDNN,但最后一个不起作用,在theano中给出了很多错误消息。现在我正在Keras/Tensorflow中训练中等大小的deep conv网络,没有收到任何cuDNN错误消息。如何检查cuDNN是否正在使用 tl;dr:如果tensorflow gpu工作,则使用CuDNN TensorFlow的预构建二进制文件(至少从1.3版开始)链接到CuDNN库。如果CuDNN丢失,则会出现一条错误消息,告诉您ImportError:找不到'cudnn64_7.dll'。Ten

我已经安装了CUDA和cuDNN,但最后一个不起作用,在theano中给出了很多错误消息。现在我正在Keras/Tensorflow中训练中等大小的deep conv网络,没有收到任何cuDNN错误消息。如何检查cuDNN是否正在使用

tl;dr:如果tensorflow gpu工作,则使用CuDNN

TensorFlow的预构建二进制文件(至少从1.3版开始)链接到CuDNN库。如果CuDNN丢失,则会出现一条错误消息,告诉您
ImportError:找不到'cudnn64_7.dll'。TensorFlow要求安装此DLL…

根据,必须安装CuDNN以支持GPU,即使您是从源代码构建它。对于CuDNN不可用的情况,TensorFlow代码中仍然有很多回退——据我所知,它在以前的版本中是可选的

为了使用GPU(和CuDNN),需要安装TensorFlow的特殊GPU版本。确保安装的python包是
tensorflow gpu
,而不仅仅是
tensorflow

您可以使用
conda list tensorflow
列出包含“tensorflow”的包(或者如果不使用anaconda,则只列出
pip list
),但请确保激活了正确的环境

当您在GPU支持下运行脚本时,它们将如下启动:

Using TensorFlow backend.

2018- ... C:\tf_jenkins\...\gpu\gpu_device.cc:1105] Found device 0 with properties:
name: GeForce GTX 1080 major: 6 minor: 1 memoryClockRate(GHz): 1.7845
要测试它,只需在控制台中键入:

import tensorflow as tf
tf.Session()
要检查是否从python环境中“看到”CuDNN,并验证正确的PATH变量,可以尝试以下操作:

import ctypes
ctypes.WinDLL("cudnn64_7.dll") # use the file name of your cudnn version here.

您可能还想查看GPU优化的Keras层

  • CuDNNLSTM
  • 库德宁格鲁
它们的速度要快得多:


我们看到从LSTM到CuDNNLSTM Keras层的性能提高了10倍

注:
我们还看到机器上虚拟内存的使用量增加了10倍。所以有一些权衡要考虑。

是的,我有TysFraceGPU,它使用的是GPU。我的问题取决于cuDNN的具体用法。据我所知,GPU的使用可以独立于cuDNN,因为它只是一个GPU加速库,具有用于GPU使用的改进库,对吗?@hirschme即使您从源代码构建tensorflow,您也必须指定cuDNN,因此在当前版本中,您无法在没有它的情况下构建它。看起来它与tensorflow的早期版本有所不同,但我指的是当前版本,即1.5。@hirschme我在回答中添加了更多信息,解释了为什么我认为tensorflow gpu目前在没有CuDNN的情况下无法工作。如果您仍有疑问,可以尝试添加一个Conv2D层,因为TensorFlow显式地捕捉到了一个错误:如果您在回答中包含比较以证明更快的声明,那会更好。我们看到从LSTM到CuDNNLSTM Keras层有10倍的改进。@lolbas不需要。众所周知,CuDNN实现比基于循环的实现快3-10倍。