После обновления операционной системы моего ноутбука до Ubuntu 18.04 с 16.04 я заметил, как мой код keras (с использованием бэкэнда тензорного потока) стал невероятно медленным в моей среде conda, где я установил тензорный поток-gpu.По сути, кажется, что некоторым простым моделям CNN теперь требуется вечность (например, если бы они вместо этого использовали CPU), даже если простая проверка с помощью команды nvidia-smi
выявляет процесс Python, задействованный GPU (Nvidia GeForce GTX1070).Затем я подумал об обновлении библиотек CUDA (с версии 7 до версии 9) и, соответственно, обновлении CUDnn для совместимости с новой версией.Я также обновил пакеты tenorflow-gpu и keras до последней версии, но все же он работает медленнее, чем в моей предыдущей установке.Чтобы показать пример, вот фрагмент кода, который я выполняю, со следующей моделью:
model= Sequential()
model.add(Conv2D(32,(3,3), activation='relu', input_shape=(100,60,3)))
model.add(MaxPooling2D((2,2)))
model.add(Conv2D(64,(3,3), activation='relu'))
model.add(MaxPooling2D((2,2)))
model.add(Conv2D(128,(3,3), activation='relu'))
model.add(MaxPooling2D((2,2)))
model.add(Conv2D(128,(3,3), activation='relu'))
model.add(MaxPooling2D((2,2)))
model.add(Flatten())
model.add(Dropout(0.5))
model.add(Dense(512, activation='relu'))
model.add(Dense(26, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])
, которая выдаст свой вывод через несколько секунд:
history = model.fit_generator(train_generator, steps_per_epoch=260000 // 32,
epochs=10,
validation_data=test_generator,
validation_steps=52000//32,
verbose=2
)
Epoch 1/10
166s - loss: 0.2333 - acc: 0.9291 - val_loss: 0.0073 - val_acc: 0.9982
сейчаскаждая эпоха занимает очень много времени (более 45 минут вместо 166 секунд!).У кого-нибудь есть идея, почему это происходит?Нужно ли возвращаться к Ubuntu 16.04?Я очень расстроен этим поведением ...
отредактировано ....
Я попытался запустить тест производительности между процессором и процессором, используя модели, найденные в https://medium.com/@andriylazorenko/tensorflow-performance-test-cpu-vs-gpu-79fcd39170c, и мойКажется, что gpu работает хорошо: в среднем в каждую эпоху обрабатывается более 10000 выборок в секунду против 400 выборок в секунду при работе в режиме ЦП.ОДНАКО, мой код (написанный в керасе) все еще производит странное поведение.Ожидается, что это ETA завершит (я никогда не позволю ему закончить это, так как это займет несколько часов) эпоху под GPU после моего обновления Ubuntu:
Epoch 1/1
6/507 [..............................] - ETA: 5:19:17 - убыток: 3,2632 - акк: 0,0397
, пока этотот же вывод, полученный с кератами в обычной среде ЦП с использованием всегда тензорного потока в качестве бэкэнда
Epoch 1/1
4/507 [..............................] - ETA: 4850s - loss: 3.2671 - acc: 0.0293
в кератах происходит что-то не так, по-видимому ....