Возможно ли распределенное обучение для моего приложения? - PullRequest
0 голосов
/ 24 сентября 2019

Я управляю сетью LSTM, чтобы классифицировать огромную базу данных последовательностей дистанционного зондирования для их соответствующих наземных наблюдателей.Код разработан для Tensorflow / Keras, и я пробую модели с 3-7 слоями, каждый из которых имеет от 16 до 64 ячеек LSTM.Из-за огромного размера данных (около 13,5 млн. Последовательностей выборок) мне интересно проводить обучение модели в распределенном режиме путем распараллеливания данных на нескольких графических процессорах или на нескольких компьютерах.Однако мои попытки к настоящему времени не привели к каким-либо улучшениям по сравнению с одной версией системы, и я думаю, возможно ли это вообще или нет.

Мое понимание параллелизма данных в Tensorflow / Keras заключается в том, что есть разные работники, начальник и сервер параметров (ps).Параметры модели хранятся в ps и сообщаются работникам и руководителю, и каждый работник работает над разделом целых данных.Каждый работник должен получить параметры модели из ps в начале каждой пакетной обработки данных, выполнить все прямое и обратное распространение и рассчитать обновления веса и отправить их обратно в ps, где обновленные параметры модели вычисляются по начальнику и сохраняются.Поэтому каждый работник должен читать параметры модели перед каждой пакетной обработкой.

Мой размер пакета моделирования составляет 1024, поэтому в одну эпоху данных уходит около 13 тысяч пакетов.Обучение модели с 87 000 параметров заняло 412 секунд в моей системе с одним графическим процессором, что означает около 30 мс на пакет.Более сложная модель с параметрами 1M заняла 1900 секунд для обработки одной эпохи, что означает около 146 мс на пакет.Теперь, когда я смотрю на цифры, я сомневаюсь, что параллелизм данных полезен.Если два GPU или CPU хотят передавать параметры 100K или 1M, может ли это быть настолько быстрым, чтобы быть сделанным за несколько миллисекунд, чтобы быть незначительным?Мои эксперименты на системе с двумя графическими процессорами (которая даже не требует передачи данных по сети) привели к тому, что время пакетной обработки удвоилось для одного графического процессора.Может ли это быть связано с небольшим временем пакетной обработки по сравнению с накладными расходами на передачу данных?Если это так, значит ли это, что моя модель не так сложна, как это необходимо для распределенного обучения?

...