【问题标题】:CuDNNLSTM: UnknownError: Fail to find the dnn implementationCuDNNLSTM:UnknownError:找不到 dnn 实现
【发布时间】:2019-06-25 15:53:23
【问题描述】:

我已经成功运行了以 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 版本:2.2.4 张量流版本:1.12.0 创建模型 _________________________________________________________________ 层(类型)输出形状参数# ==================================================== ================ cu_dnnlstm_1 (CuDNNLSTM) (无, 1000, 1) 16 ==================================================== ================ 总参数:16 可训练参数:16 不可训练参数:0 _________________________________________________________________ 没有 模型编译

问题似乎是在模型拟合过程中出现的。但我不知道到底是什么问题?

【问题讨论】:

  • 我在 tf 1.13 和 CuDNN 7.5 中也经常遇到这个问题。然而,它随机发生的几率只有大约 10%。通常我可以重新启动程序,它工作正常。

标签: lstm cudnn


【解决方案1】:

对于 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 的内存增长。

【讨论】:

  • 谢谢,但对我来说是physical_devices = tf.config.experimental.list_physical_devices('GPU')
  • 谢谢,它现在甚至可以在我的 Windows 机器上运行!你知道为什么会这样吗?我不会猜测UnknownError: Fail to find the dnn implementation. 与内存增长有某种关系。默认情况下(不允许内存增长)我认为 tf 会分配尽可能多的内存。那么为什么它默认不工作呢?
  • 如果您查看文档,您会发现他们说 - “如果为 PhysicalDevice 启用了内存增长,则运行时初始化将不会分配设备上的所有内存。内存增长无法在 PhysicalDevice 上配置已配置虚拟设备。”这意味着默认情况下,TensorFlow 会尝试一次为模型分配所有内存,并且由于内存不足,它会显示错误。尽管如此,它仍然基于该文档。但即使是小型模型,我也发现了错误。
  • 哇,没想到会解决,非常感谢
【解决方案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

【讨论】:

  • ModuleNotFoundError: No module named 'keras.backend.tensorflow_backend'; 'keras.backend' 不是一个包。我猜这个答案对旧版本的 keras/tf 有效
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    在 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】:

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

      我使用的是 CUDA 9.0,但使用的 Nvidia 驱动程序低于 384.81。将 Nvidia 驱动程序更新到较新的驱动程序为我解决了这个问题。

      【讨论】:

        【解决方案6】:

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

        conda install tensorflow
        conda install keras
        

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

            还要检查您的应用程序使用的 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”文件夹中

            【讨论】:

              猜你喜欢
              • 2019-10-13
              • 1970-01-01
              • 2023-03-17
              • 2022-06-14
              • 1970-01-01
              • 2020-08-25
              • 2018-09-29
              • 1970-01-01
              相关资源
              最近更新 更多