#tensorflow #keras #parallel-processing #gpu #tensorflow2.0
Вопрос:
Я запускаю следующий код, в котором моими доступными графическими процессорами являются 2 RTX Titan с 24 ГБ Vram каждый. Модель, которую я пытаюсь распараллелить, имеет 26 миллионов параметров.
def get_available_gpus(): local_device_protos = device_lib.list_local_devices() return [x.name for x in local_device_protos if x.device_type == 'GPU'] strat = tf.distribute.MirroredStrategy(devices = get_available_gpus()) with strat.scope(): model = pose_model.Infer() parallel_model = multi_gpu_utils.multi_gpu_model(model,len(get_available_gpus())) zeros = np.random.rand(400,512,512,3) # import time t1 = time.time() outputs = parallel_model.predict(zeros) t2 = time.time() print(t2 - t1) tf.keras.backend.clear_session() model = pose_model.Infer() t3 = time.time() for i in range(40): outputs_new = model.predict(zeros[i*10:(i 1)*10]) t4 = time.time() print(t4-t3)
При текущем разрешении входных данных, которые я использую, и размере пакета я получаю следующее время обработки. При использовании распараллеливания обработка занимает 14 секунд, в то время как при использовании цикла for и одного графического процессора это занимает 13 секунд. Если я увеличу разрешение при размере пакета gt;100, настройка распараллеливания будет быстрее. Мне любопытно, чем это объясняется. Другая запутанная вещь заключается в том, что я получаю ошибки, если увеличиваю размер пакета более чем на 10 для одного графического процессора. Что происходит с multi_gpu_utils, что позволяет мне передавать значительно большую партию в метод прогнозирования?