Я столкнулся с проблемой, что я не могу успешно разделить свои тренировочные партии более чем на один графический процессор.Если используется 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:
Создайте модель 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()
Как видно на временной шкале, процессор теперь не только загружает данные, но и выполняет некоторые другие вычисления.Обратите внимание: второй графический процессор почти ничего не делает:
Вопрос
Эффект даже ухудшается, как только используются четыре графических процессора.Использование первого доходит до 100%, но для остальных есть только короткие взгляды.
Есть ли решение, чтобы это исправить?Как правильно тренироваться на нескольких gpus?
Есть ли разница между tensorflow.keras.utils
и keras.utils
, которая вызывает неожиданное поведение?