У меня проблемы с запуском сверточных сетей на Keras с компиляцией исходного кода Tensorflow. Я использую CUDA 10.0 и CuDNN 7.4, и оба были правильно скомпилированы, что подтверждается их примерами make-файлов. Я получаю эти ошибки, когда запускаю виртуальную сеть, но не плотную сеть:
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]]
Я попытался добавить пути к 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)
Код, который я запускаю, прекрасно работает на моем ноутбуке, у которого нет выделенного графического процессора, но я пытаюсь настроить и запустить CUDA/CuDNN на этом рабочем столе. Любая помощь в диагностике этой проблемы будет высоко ценится.
ОБНОВЛЕНИЕ: Кажется, может быть ошибка, связанная с использованием стандартного NCCL, в отличие от самой новой версии при сборке TF из исходного кода. Я пытаюсь установить независимую от ОС версию самой последней версии NCCL. Это приводит к новой ошибке: ldconfig перечисляет NCCL, но не может найти его библиотеки. Это делает невозможным сборку из исходного кода с использованием последней версии NCCL, поэтому я не могу понять, является ли это основной причиной.