Tensorflow / keras multi_gpu_model не разделен на более чем один GPU - PullRequest
0 голосов
/ 06 марта 2019

Я столкнулся с проблемой, что я не могу успешно разделить свои тренировочные партии более чем на один графический процессор.Если используется multi_gpu_model из tensorflow.keras.utils, тензор потока выделяет всю память всем доступным (например, 2) gpus, но только первый (gpu [0]) используется до 100%, если просматривается nvidia-smi.

Я сейчас использую tenorflow 1.12.

Тест на одном устройстве

model = getSimpleCNN(... some parameters)

model .compile()
model .fit()

Как и ожидалось, данные загружаются процессором, а модель работает на gpu [0]с использованием 97% - 100% gpu: enter image description here

Создайте модель multi_gpu

Как описано в api тензорного потока для multi_gpu_model здесь ,область видимости устройства для определения модели не изменена.

from tensorflow.keras.utils import multi_gpu_model

model = getSimpleCNN(... some parameters)
parallel_model = multi_gpu_model(model, gpus=2, cpu_merge=False)  # weights merge on GPU (recommended for NV-link)

parallel_model.compile()
parallel_model.fit()

Как видно на временной шкале, процессор теперь не только загружает данные, но и выполняет некоторые другие вычисления.Обратите внимание: второй графический процессор почти ничего не делает: enter image description here

Вопрос

Эффект даже ухудшается, как только используются четыре графических процессора.Использование первого доходит до 100%, но для остальных есть только короткие взгляды.

Есть ли решение, чтобы это исправить?Как правильно тренироваться на нескольких gpus?

Есть ли разница между tensorflow.keras.utils и keras.utils, которая вызывает неожиданное поведение?

1 Ответ

0 голосов
/ 26 апреля 2019

Я просто столкнулся с той же проблемой. В моем случае проблема возникла из-за использования функции build_model(... parameters), которая возвращала модель. Будьте осторожны с вашей getSimpleCNN() функцией, так как я не знаю, что в ней есть, мой лучший совет - последовательно строить модель в вашем коде без использования этой функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...