tensorflow.python.keras.utils.multi_gpu_utils не обеспечивает увеличения скорости

#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, что позволяет мне передавать значительно большую партию в метод прогнозирования?