CuDNNLSTM:UnknownError:找不到dnn实现

时间:2019-02-01 05:13:42

标签: lstm cudnn

我已经成功地将LSTM作为第一层运行了该模型。但是出于好奇,我将LSTM替换为CuDNNLSTM。 但是在model.fit之后,它回复了以下错误消息:

UnknownError: Fail to find the dnn implementation.
    [[{{node cu_dnnlstm_5/CudnnRNN}} = CudnnRNN[T=DT_FLOAT, _class=["loc:@training_2/Adam/gradients/cu_dnnlstm_5/CudnnRNN_grad/CudnnRNNBackprop"], direction="unidirectional", dropout=0, input_mode="linear_input", is_training=true, rnn_mode="lstm", seed=87654321, seed2=0, _device="/job:localhost/replica:0/task:0/device:GPU:0"](cu_dnnlstm_5/transpose, cu_dnnlstm_5/ExpandDims_1, cu_dnnlstm_5/ExpandDims_1, cu_dnnlstm_5/concat_1)]]
    [[{{node metrics_3/mean_squared_error/Mean_1/_1877}} = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_4852_metrics_3/mean_squared_error/Mean_1", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

我已经在此discussion上尝试过TestCudnnLSTM()并成功通过了测试:

Keras version: 2.2.4
Tensorflow version: 1.12.0
Creating Model
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
cu_dnnlstm_1 (CuDNNLSTM)     (None, 1000, 1)           16        
=================================================================
Total params: 16
Trainable params: 16
Non-trainable params: 0
_________________________________________________________________
None
Model compiled

似乎在模型拟合期间出现了问题。但是我不知道到底是什么问题?

8 个答案:

答案 0 :(得分:23)

对于TensorFlow v2,一种解决方案是-

import tensorflow as tf
physical_devices = tf.config.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(physical_devices[0], enable=True)

然后您也可以使用keras模型-

from tensorflow.keras.models import Model

Documentation

此解决方案对我有用,它仅支持一个GPU的内存增长。

答案 1 :(得分:2)

如果在安装Keras NN时遇到此错误,请在导入时输入此代码

from keras.backend.tensorflow_backend import set_session
import tensorflow as tf
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)
set_session(sess)

credit

答案 2 :(得分:1)

当我将tensorflow更新为1.12时,我遇到了同样的问题。将我的CuDNN版本从7更新到7.5后,错误得到解决。我按照以下url中提到的步骤更新了CuDNN版本(注意:链接中提到的步骤用于安装CUDNN,但同样适用于更新)

https://jhui.github.io/2017/09/07/AWS-P2-CUDA-CuDNN-TensorFlow/

答案 3 :(得分:0)

请确保您使用的Nvidia驱动程序版本与所使用的CUDA版本相符。您可以在这里查看。 https://docs.nvidia.com/deploy/cuda-compatibility/index.html#binary-compatibility

我正在使用CUDA 9.0,但使用的Nvidia驱动程序少于384.81。将Nvidia驱动程序更新为更新的驱动程序对我来说解决了这个问题。

答案 4 :(得分:0)

在tensorflow 2.0中,我运行RNN LSTM模型时遇到相同的错误,原因是由于cuDNN的版本较低。在tensorflow gpu要求页面中,建议具有

cuDNN SDK >= 7.4.1.

您可以在https://www.tensorflow.org/install/gpu

中了解更多详细信息

在Tensorflow Reddit论坛中提问

https://www.reddit.com/r/tensorflow/comments/dxnnq2/i_am_getting_an_error_while_running_the_rnn_lstm/?utm_source=share&utm_medium=web2x

答案 5 :(得分:0)

我在虚拟环境中使用conda安装了tensorflow和keras,并解决了这个问题。

conda install tensorflow
conda install keras

答案 6 :(得分:0)

我建议检查是否有任何其他内核导入了 tensorflow 或 keras。如果是,请关闭该内核 - 即使它不忙。它解决了我的问题。

答案 7 :(得分:0)

还要检查您的应用程序使用的 CUDA 版本是否存在 cuDNN。

升级 tensorflow 会导致它使用另一个 CUDA 版本

例如 tensorflow-2.3 使用 CUDA 10.1 但 tensorflow-2.5 使用 11.2

我在 Windows 中遇到了同样的错误,我不得不将最新的 cuDNN DLL 复制到“c:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2”文件夹中