无法创建 cudnn 句柄:CUDNN STATUS INTERNAL ERROR

Posted

技术标签:

【中文标题】无法创建 cudnn 句柄:CUDNN STATUS INTERNAL ERROR【英文标题】:Could not create cudnn handle: CUDNN STATUS INTERNAL ERROR 【发布时间】:2019-09-24 07:04:51 【问题描述】:

我正在尝试在 python 3 中创建机器学习。 但是后来我尝试编译我的代码,我在 Cuda 10.0/cuDNN 7.5.0 中遇到了这个错误, 有人可以帮我解决这个问题吗?

RTX 2080

我在: 喀拉斯 (2.2.4) tf-nightly-gpu (1.14.1.dev20190510)

无法创建 cudnn 句柄:CUDNN_STATUS_INTERNAL_ERROR

代码错误: tensorflow.python.framework.errors_impl.UnknownError: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.

这是我的代码:

model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(50, 50, 1)))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(Flatten())
model.add(Dense(1, activation='softmax'))

model.summary()

model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])
model.fit(x, y, epochs=1, batch_size=n_batch)

使用 shape[24946,32,48,48] 分配张量并键入 float 时的 OOM 在 /job:localhost/replica:0/task:0/device:GPU:0 上由分配器 GPU_0_bfc

【问题讨论】:

【参考方案1】:

使用 Tensorflow 2.0、CUDA 10.0 和 CUDNN 7.5,以下对我有用:

gpus = tf.config.experimental.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(gpus[0], True)

还有一些其他答案(例如 venergiac 的答案)使用过时的 Tensorflow 1.x 语法。如果您使用的是最新的 tensorflow,则需要使用我在此处提供的代码。

如果出现以下错误:

Physical devices cannot be modified after being initialized

然后将gpus = tf.config ...行直接放在导入tensorflow的下方即可解决问题,即

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

【讨论】:

我把那行直接放在我导入 tensorflow 的下面,但它不起作用,我应该重新启动内核?【参考方案2】:

有两种可能的解决方案。

GPU 内存分配问题

添加以下代码

import tensorflow as tf
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.5)
config = tf.ConfigProto(gpu_options=gpu_options)
config.gpu_options.allow_growth = True
session = tf.Session(config=config)

还要检查这个issue

您的 NVIDIA 驱动程序有问题

正如there 发布的那样,您需要使用 ODE 驱动程序升级您的 NVIDIA 驱动程序。

驱动版本请查看NVIDIA Documentation

【讨论】:

Hej,我收到此错误(OP_REQUIRES 在 conv_ops.cc:484 失败:资源耗尽:OOM 分配具有形状 [24946,32,48,48] 的张量并在 /job:localhost 上键入 float /replica:0/task:0/device:GPU:0 分配器 GPU_0_bfc) 然后我添加你的代码。 您是否使用较小的 NN 进行了测试? 抱歉,NN 是什么意思? 但是,我的 RTX 2080 适用于 (LSTM) 但不适用于 (Conv2D) 好的,和我的情况类似。我将驱动程序更新到最新版本“430”【参考方案3】:

如果您使用的是 Tensorflow 2.0,Roko 的答案应该可以工作。

如果您想设置确切的内存限制(例如 1024MB 或 2GB 等),还有另一种方法可以限制您的 GPU 内存使用量。

使用此代码:

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
  try:
    tf.config.experimental.set_virtual_device_configuration(gpus[0], [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=1024)])
  except RuntimeError as e:
    print(e)

此代码会将您的第一个 GPU 的内存使用量限制为 1024MB。只需根据需要更改 gpus 和 memory_limit 的索引即可。

【讨论】:

以上是关于无法创建 cudnn 句柄:CUDNN STATUS INTERNAL ERROR的主要内容,如果未能解决你的问题,请参考以下文章

无法创建cudnn句柄:CUBLAS_STATUS_ALLOC_FAILED

无法在上下文中使用 cuDNN 无,致命错误:cudnn.h:没有这样的文件或目录

windows怎么装cudnn

无法加载库 cudnn_ops_infer64_8.dll。错误代码 126 请确保 cudnn_ops_infer64_8.dll 在您的库路径中

Windows 上的 TensorFlow:“无法打开 CUDA 库 cudnn64_5.dll”

无法加载库 cudnn_cnn_infer64_8.dll。错误代码 126