🔥 HIVEMIND - децентрализованное обучение из коробки



— Давайте честно, не приходила ли к вам мысля как-нибудь объединить кагл/колаб/{свое железо} ноутбуки в одну целую машину, чтобы и модельки обучать и инфу передавать?



👉 Так вот, ребята вот уже год-два делают свою либу и при этом явно добились результата.



⚡️ Вместе с Яндексом, ВШЭ, HF они продемонстрировали результат на NeurIPS 2021— обучили языковую модель ALBERT и сейчас помогают другим командам.



Ну ладно, что это вообще за штука и как она работает?



Два основных сценария:



1️⃣ Глобальное обучение — здесь как раз и нужны колабы, но у них внутренний firewall, поэтому в цепи должна быть хотя бы одна машина с "публичным ipшником" (любой сервак за 5 копеек, можно без гпу).



2️⃣ Локальное, когда ваши машины подключены по проводам.



👀 Вся магия происходит в оптимизаторе. Интернет медленный, поэтому нужно обучать за малое количество шагов с большим батчем. В целом можно использовать стандартный SGD/Adam/etc, но есть и специализированные: LAMB или LARS.



Стратегии обучения:



1️⃣ Локальная оптимизация — каждый участник делает независимо несколько шагов обучения на своих данных, а потом они все усредняют веса и повторяют процедуру.



2️⃣ Глобальная оптимизация — участники не применяют свои локальные градиенты сразу, а откладывают их. Когда все вместе соберут заранее оговорённое число примеров, они обмениваются градиентами и обновляют веса по "глобальным" градиентам.



Даст ли это сильное ускорение? Не знаю, все индивидуально, но сама технология действительно интересная.



Очень благодарен разработчикам за детальную QA сессию/лекцию по устройству либы, в комментах будут более точные объяснения.



@gradientdip



Демонстрация

CALM - пример

Внутреннее устройство DHT

Hivemind (github)

DeDLOC: обучаем большие нейросети всем миром