CUDNN ERROR:无法获得卷积算法

Bra*_*Out 6 python cuda ubuntu

我在使用源编译的 Tensorflow 构建的 Keras 上运行卷积网络时遇到问题。我正在使用 CUDA 10.0 和 CuDNN 7.4,并且都已正确编译,如它们的示例生成文件所验证。当我运行 conv net 但不是密集网络时,我最终会收到这些错误:

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.
 [[{{node conv2d_1/convolution}}]]
 [[metrics/acc/Mean/_169]]
Run Code Online (Sandbox Code Playgroud)

我尝试将 CUDA 和 CuDNN 的路径直接附加到我的路径中,尝试重新安装和重新编译 TensorFlow,但没有结果。版本冲突应该没有任何问题,因为这是在这台机器上全新安装。

import keras
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Flatten, Conv2D, MaxPooling2D, Dropout
from keras.datasets import mnist
import sys

def one_hot(data, num_categories):
    oh = np.zeros((len(data),num_categories))
    for i,entry in enumerate(data):
        oh[i, entry] = 1
    return oh


# import data
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# preprocess data
x_train = x_train.reshape( (60000,28,28,1) ) / 256
x_test = x_test.reshape( (10000,28,28,1) ) / 256
y_train = one_hot(y_train, 10)
y_test = one_hot(y_test, 10)

# build the model
model = Sequential()
input_shape=(28,28,1)
model.add(Conv2D(filters=32,
                 kernel_size=(3,3),
                 activation='relu',
                 input_shape=input_shape))
model.add(MaxPooling2D(pool_size=(2,2),
                       strides=(2,2)))
model.add(Conv2D(filters=32,
                 kernel_size=(3,3),
                 activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2),
                       strides=(2,2)))
model.add(Flatten())
model.add(Dropout(0.5))
model.add(Dense(units=256,
                activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(units=10,
                activation='softmax'))

# load model weight

# compile model
model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])
model.summary()

# train
num_epochs = 20
if num_epochs != 0:
    # train the model
    model.fit(x_train, y_train,
              batch_size=32,
              epochs=num_epochs)

# evaluate model
score = model.evaluate(x_test, y_test)
print('\nScore: ', score)
Run Code Online (Sandbox Code Playgroud)

我正在运行的代码在我没有专用 GPU 的笔记本电脑上运行得非常好,但我试图在这个桌面上启动并运行 CUDA/CuDNN。任何诊断此问题的帮助将不胜感激。

更新:从源代码构建 TF 时,似乎可能存在与使用默认 NCCL 而不是最新版本相关的错误。我正在尝试安装与操作系统无关的最新 NCCL 版本。这带来了一个新错误:ldconfig 列出了 NCCL,但找不到它的库。这使我无法使用最新的 NCCL 从源代码构建,所以我无法确定这是否是根本原因。

wat*_*oof 4

我因三种不同的原因看到此错误消息,并采用了不同的解决方案:

1.你有缓存问题

我经常通过关闭 python 进程、删除~/.nv目录(在 linux 上rm -rf ~/.nv)并重新启动 Python 进程来解决此错误。我不太清楚为什么这会起作用。它可能至少部分与第二个选项相关:

3.你的记忆力不够了

如果显卡 RAM 不足,也会出现该错误。使用 nvidia GPU,您可以使用 来检查显卡内存使用情况nvidia-smi。这不仅会为您提供正在使用的 GPU RAM 量的读数(例如,6025MiB / 6086MiB如果您几乎达到极限),还会提供正在使用 GPU RAM 的进程的列表。

如果您的 RAM 已用完,则需要重新启动该进程(这应该会释放 RAM),然后采取内存占用较少的方法。一些选项是:

  • 减少批量大小
  • 使用更简单的模型
  • 使用更少的数据
  • 限制 TensorFlow GPU 内存比例:例如,以下内容将确保 TensorFlow 使用 <= 90% 的 RAM:
import keras
import tensorflow as tf

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.9
keras.backend.tensorflow_backend.set_session(tf.Session(config=config))
Run Code Online (Sandbox Code Playgroud)

如果不与上述项目一起使用,这可能会减慢您的模型评估速度。

3. 您的 CUDA、TensorFlow、NVIDIA 驱动程序等版本不兼容。

如果您从未有过类似的模型工作,您没有用完 VRAM并且您的缓存是干净的,我会返回并使用最佳可用安装指南设置 CUDA + TensorFlow - 我在以下方面取得了最大的成功https://www.tensorflow.org/install/gpu上的说明,而不是 NVIDIA / CUDA 网站上的说明。