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 从源代码构建,所以我无法确定这是否是根本原因。
我因三种不同的原因看到此错误消息,并采用了不同的解决方案:
我经常通过关闭 python 进程、删除~/.nv
目录(在 linux 上rm -rf ~/.nv
)并重新启动 Python 进程来解决此错误。我不太清楚为什么这会起作用。它可能至少部分与第二个选项相关:
如果显卡 RAM 不足,也会出现该错误。使用 nvidia GPU,您可以使用 来检查显卡内存使用情况nvidia-smi
。这不仅会为您提供正在使用的 GPU RAM 量的读数(例如,6025MiB / 6086MiB
如果您几乎达到极限),还会提供正在使用 GPU RAM 的进程的列表。
如果您的 RAM 已用完,则需要重新启动该进程(这应该会释放 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)
如果不与上述项目一起使用,这可能会减慢您的模型评估速度。
如果您从未有过类似的模型工作,您没有用完 VRAM并且您的缓存是干净的,我会返回并使用最佳可用安装指南设置 CUDA + TensorFlow - 我在以下方面取得了最大的成功https://www.tensorflow.org/install/gpu上的说明,而不是 NVIDIA / CUDA 网站上的说明。
归档时间: |
|
查看次数: |
8988 次 |
最近记录: |