Система розподіленого навчання нейронних мереж



У даній роботі наведено огляд розподіленої системи, її основні характеристики та задачі, які необхідно вирішити при реалізації системи розподіленого навчання нейронних мереж. Зокрема, розглядаються процеси отримання, трансформації, завантаження даних та безпосередньо розподіленого навчання нейронних мереж. Також коротко описано можливі способи реалізації цих задач.

Ключові слова--розподілена система, розподілений розрахунок, розподілене навчання нейронних мереж, ETL.

Вступ

З кожним роком людство генерує все більше і більше даних, які потребують подальшого опрацювання та аналізу. Такі процеси на сьогодні стали майже буденністю, і важко знайти сферу, у якій не відбувається аналітичних оцінок та розрахунків. Дані процеси можуть потребувати багато часу або вимагати створення складних алгоритмів для їх вирішення. Сьогодні для вирішення подібних задач все частіше застосовують штучні нейронні мережі.

Зазвичай, при збільшенні кількості даних, збільшується їх варіативність та складність. І, як результат, зростає складність як самих задач, що вимагають вирішення, так і моделей нейронних мереж. Навчання таких нейронних мереж може потребувати великої кількості часу та розрахункових ресурсів комп'ютера. Одним із варіантів вирішення даної проблеми є використання розподіленого навчання. Таким чином для того, щоб побудувати систему розподіленого навчання потрібно вирішити дві основні задачі: отримання, трансформації та завантаження даних і безпосередньо саму задачу розподіленого машинного навчання.

Визначення розподіленої системи

Розподілена система є системою, що складається з декількох частин розміщених на різних машинах. Ці машини обмінюються даними і координують свої дії таким чином, щоб для кінцевого користувача вони виглядали, як єдине ціле. Компонентами розподіленої системи можуть бути комп’ютери, фізичні сервери, віртуальні машини, контейнери або будь-які інші вузли, що під’єднані до спільної мережі, мають локальну пам’ять і взаємодіють між собою [1]. Є два основних підходи реалізації розподіленої системи. Перший – коли кожна машина працює для досягнення загальної мети і кінцевий користувач отримує результати у вигляді єдиного цілого. Другий – коли кожна машина має свого кінцевого користувача, а розподілена система допомагає у використанні спільних ресурсів.

Хоч структура розподілених систем може бути складною у них є три основні характеристики [1]: всі компоненти мережі працюють одночасно; мережі не мають глобального годинника; компоненти мережі виходять з ладу незалежно один від одного.

Зважаючи на вище описані характеристики, можна виділити переваги та недоліки розподілених систем. Першою перевагою даних систем є горизонтальна масштабованість. Оскільки розрахунки виконуються незалежно на кожному вузлі системи то недорого та просто додавати нові вузли та функції. Другою перевагою розподілених систем є відмовостійкість. Оскільки розподілена система може складатися з сотень вузлів, які працюють разом, то вона не перестає виконувати свою задачу, якщо одна машина виходить з ладу. Третьою основною перевагою є продуктивність. Вона досягається за рахунок того, що робоче навантаження на систему може бути розділене і відправлене на декілька різних машин.

До недоліків можна віднести наступне: розподілені системи повинні вирішувати, які завдання, коли та де необхідно виконати; затримка, чим більше система розподілена, тим більше затримок може виникати при обміні даними; спостереження за станом системи, збір, обробка і моніторинг показників використання ресурсів для великих кластерів може створити велику проблему.

Отримання, трансформація та завантаження даних

Задача по отриманню, обробці та завантаженню даних є однією з основних при розробці системи розподіленого машинного навчання. Оскільки розміри наборів даних для навчання нейронних моделей можуть бути досить великими, то завантаження та обробка даних із використанням класичних підходів буде займати велику кількість часу. Тому у даному випадку варто реалізувати ETL процес. ETL (Extract, Transform і Load) процес – це налагоджений конвеєр даних, що використовується для збору і трансформації даних із наступним завантаженням їх до відведеного сховища даних [2]. Робота по перетворенню в ETL виконується у спеціальному рушії даних та вимагає використання додаткових проміжних таблиць для тимчасового збереження даних до моменту завантаження кінцевого результату.

Трансформація даних зазвичай передбачає використання таких операцій, як фільтрування, сортування, агрегування, перевірка даних, видалення дублікатів, очистка і об’єднання даних. Часто фази отримання, трансформації та завантаження даних відбуваються паралельно для збереження часу. На практиці для реалізації ETL процесу використовують рушії даних, які, зазвичай, також працюють як розподілені системи для досягнення необхідного рівня паралелізації та ефективності виконання конвеєру даних [2]. Прикладом такого інструменту є Apache Spark. На сьогодні це один з найрозповсюдженіших рушіїв даних, що використовують для реалізації розподіленої обробки неструктурованих і слабко-структурованих даних у реальному часі із малими затримками. Проміжним або цільовим сховищем даних на практиці є розподілена файлова система. Прикладом може бути HDFS з Apache Hive або Apache Spark.

Розподілене машинне навчання

З ускладненням задач, збільшенням наборів даних та їх варіативності, що використовуються для навчання моделей нейронних мереж, збільшилась кількість ресурсів та час необхідний для навчання моделі. Тому для підвищення швидкості та ефективності виконання машинного навчання почали розробляти та використовувати розподілене машинне навчання.

Розподілене машинне навчання – це підхід, при якому процес навчання відбувається розподілено з використанням принципів розподілених систем. За способом розділення воно може бути реалізоване за допомогою розподілення наборів даних по вузлах кластеру (Data Parallelizing) [3]. При такому підході кожен вузол містить однакову модель, але проводить навчання на різних вхідних даних. Data Parallelizing корисно використовувати, коли набір даних є занадто великим для опрацювання його одним вузлом.

Іншим підходом є Model Parallelizing. При такому підході модель ділиться на частини та розподіляється по вузлах кластеру, але дані на всі вузли поступають однакові. Model Parallelizing корисно використовувати у випадку, коли модель машинного навчання є занадто складною для виконання навчання на одному вузлі [3].

За способом взаємодії вузлів, реалізації можна поділити на централізоване та децентралізоване [3]. При першому підході виділяється окремий вузол або група вузлів, що відповідають за синхронізацію інших, що виконують навчання. При децентралізованому кожен з вузлів відповідає за навчання і взаємодіють один з одним напряму для оновлення параметрів моделі.

За способом синхронізації: синхронний та асинхронний [3]. При першому, вузли надсилають значення параметрів моделі серверу параметрів та очікують доки всі інші теж не надішлють. При використанні даного підходу значно збільшується точність моделі, але і збільшується час навчання. А при асинхронному, вузли відправляють свої результати так швидко на скільки можливо. При використанні даного підходу збільшується завантаження кластеру, але також із ним і швидкість навчання.

На практиці існує багато інструментів, що реалізують різні підходи розподіленого машинного навчання. Одні з найбільш розповсюджених це TensorFlow, Horovod, PyTorch та ін. [4].

Висновки

У роботі було розглянуто поняття розподіленої системи, визначено її основні характеристики, переваги та недоліки. Також було виділено та розглянуто дві основні задачі, які повинні бути вирішені у системі розподіленого навчання нейронних мереж. Першою є процес отримання, трансформації та завантаження даних (ETL). Він використовується для більш ефективного та швидкого збору та обробки даних і реалізується за допомогою використання рушіїв даних для розподіленої обробки даних. Другою – розподілене машинне навчання. Є декілька способів її реалізації (Model або Data Parallelizing, централізований або децентралізований та синхронний або асинхронний), які потрібно обирати у відповідності до поставленої задачі. Результати даної роботи можуть бути використані для побудови розподілених систем, що повинні працювати із великими даними та/або систем для розподіленого машинного навчання.

Література

{1} Gibb R. What is a Distributed System? [Електрон-ний ресурс] / Robert Gibb – Режим доступу до ресурсу: https://blog.stackpath.com/distributed\-system/.

{2} Wilson M. Extract, transform, and load (ETL) [Електронний ресурс] / M. Wilson, D. Kshirsagar – Режим доступу до ресурсу: https://docs.microsoft.com/en\-us/azure/architecture/data\-guide/relational\-data/etl.

{3} Machiraju S. How to train your deep learning models in a distributed fashion. [Електронний ресурс] / Srikanth Machiraju – Режим доступу до ресурсу: https://towardsdatascience.com/how\-to\-train\-your\-deep\-learning\-models\-in\-a\-distributed\-fashion\-43a6f53f0484.

{4} A Survey on Distributed Machine Learning [Електронний ресурс] / [J. Verbraeken, W. Matthijs, K. Jonathan та ін.] – Режим доступу до ресурсу: https://arxiv.org/ftp/arxiv/papers/1912/1912.09789.pdf

Рецензент: доцент кафедри інформаційних систем та технологій КПІ ім. Ігоря Сікорського к.т.н. доцент Цьопа Наталія

Dec 5, 2021