Распределенное обучение моделей глубокого обучения: обработка отставших и задержек при синхронном обучении

Обзор проблем синхронного распределенного обучения и лучших решений для отстающих и высокой задержки

Абстрактный

Синхронное распределенное обучение — распространенный способ распределения процесса обучения моделей машинного обучения с параллелизмом данных. При синхронном обучении корневой узел-агрегатор разветвляет запросы ко многим конечным узлам, которые работают параллельно над разными срезами входных данных, и возвращает свои результаты корневому узлу для агрегирования. Задержка конечных узлов сильно влияет на эффективность этой архитектуры, а при масштабировании количества параметров и точек данных может резко увеличить время обучения. В этом блоге я рассмотрю метод синхронного стохастического градиентного спуска (Sync-SGD) для распределения процесса обучения моделей глубокого обучения. Я сосредоточу свою работу на влиянии отставших и высоких задержек на их эффективность, а также на поиске методов и способов преодоления этих проблем.

Мотивация и предыстория

В последние годы мы увидели мощь крупномасштабных проектов глубокого обучения. Такие проекты, как GPT-3, его версия с открытым исходным кодом — GPT-NeoX-20B и MT-NLG — включают размеры моделей и наборов данных, которые были бы непостижимы всего несколько лет назад и в настоящее время доминируют в современном уровне техники. Мы видим экспоненциальный рост сложности моделей, количества параметров и размера наборов данных. Эта тенденция подняла спрос на крупномасштабную обработку до такой степени, что она превзошла рост вычислительной мощности отдельной машины. Возникла необходимость распределить рабочую нагрузку машинного обучения между несколькими машинами, что привело к идее синхронного распределенного обучения.

Примечание. Существует разница между распределенным обучением и распределенным логическим выводом. если служба машинного обучения получает большое количество запросов, нам нужно распределить модель по нескольким машинам, чтобы справиться с нагрузкой. С другой стороны, обучение масштабированию – это обучение одной и той же модели более чем на одном компьютере.

Синхронный стохастический градиентный спуск — распространенный способ распределения процесса обучения моделей машинного обучения с параллелизмом данных. При синхронном обучении корневой узел-агрегатор разветвляет запросы ко многим конечным узлам, которые работают параллельно над разными срезами входных данных, и возвращает свои результаты корневому узлу для агрегирования.

Стохастический градиентный спуск

Прежде чем мы углубимся в детали и проблемы реализации, давайте сначала разберемся, что такое стохастический градиентный спуск (SGD). Учитывая набор данных D и модель с параметрами θ, мы хотели бы минимизировать параметризованную эмпирическую функцию потерь L для заданных пар (x, y) в D, где x обозначает входную выборку, а y — выход.

Где l — потеря точки данных (x, y) для модели θ.

Алгоритм стохастической оптимизации первого порядка оптимизирует функцию потерь путем итеративного обновления θ с использованием стохастического градиента. Обычно скорость обучения применяется, чтобы избежать переобучения или недообучения, поэтому SGD будет рассчитываться следующим образом:

где ɣ — скорость обучения или размер шага на итерации.

Мини-пакетная версия алгоритма стохастической оптимизации вычисляет градиент по мини-пакету размера B вместо одной точки данных:

Синхронный стохастический градиентный спуск

Используя распределенный синхронный стохастический градиентный спуск (Sync-SGD), корневой узел-агрегатор разбивает данные на пакеты и разветвляет запросы на конечные узлы (рабочие машины) для обработки каждого пакета и независимого вычисления его градиента. Как только все машины возвращают свой результат, корневой узел-агрегатор усредняет градиент и отправляет его обратно рабочим для обновления параметров модели. Корневой агрегатор повторяет этот процесс в течение заданного количества эпох или на основе условия преобразования.

Проблемы

Теоретически, распределение вычислений на T рабочих машинах должно повысить производительность xT. Тем не менее, на самом деле улучшение производительности редко бывает xT. Снижение эффективности вызвано многими причинами, среди которых недавние исследования выделяют отставших и высокую задержку в качестве основной причины.

Задержки и высокая задержка в распределенном синхронном SGD

Отставшие — это задачи, которые выполняются намного медленнее, чем другие рабочие процессы. Медленное отставание может быть вызвано сбоем оборудования, конкуренцией за общие базовые аппаратные ресурсы в центрах обработки данных или даже вытеснением другими заданиями. Рафал и др. (2017) провел эксперимент, в ходе которого было рассчитано время, необходимое для запуска Sync-SGD с использованием 100 рабочих процессов и 19 параметров начальной модели. Эти времена представлены на рисунке 2.

Задержка – это время, необходимое для того, чтобы данные дошли до пункта назначения по сети. Из-за высокого спроса на мощную вычислительную мощность и ее низкого предложения во многих случаях обучающие данные не будут находиться в том же географическом местоположении, что и корневой агрегатор и рабочие процессы, что приводит к высокой задержке. Поэтому нам придется полагаться на максимальную пропускную способность канала связи, которая имеет ограничения. Например, хорошее подключение к Интернету может обеспечить пропускную способность 15 мегабайт в секунду, а гигабитное подключение к сети Ethernet может обеспечить пропускную способность 125 мегабайт в секунду. Эти ограничения могут значительно сократить время итерации при работе с крупномасштабными наборами данных.

Поскольку алгоритм Sync-SGD предназначен для ожидания, пока все рабочие потоки не вернут функцию потерь, он чувствителен к отстающим и высокой задержке. Архитектура Sync-SGD обладает двумя определяющими свойствами:

  • Время работы больше или равно максимальному времени работы всех рабочих.
  • Время работы рабочих имеет логнормальное распределение [3].

Из-за этих свойств, когда разветвляется больше рабочих, хвост распределения становится длиннее, и, следовательно, время работы в среднем ухудшается. Чтобы понять влияние количества рабочих на время выполнения, я провел эксперимент, в котором сгенерировал 1000 логнормальных распределений (μ = 3, σ = 0,1) с 3 размерами выборки (10, 100, 1000), где каждый представляет число рабочих.

Рисунок 4 ясно показывает, что по мере увеличения разветвления среднее значение распределения родительской задержки становится выше с меньшей дисперсией. Однако можно было бы ожидать, что он станет экспоненциально хуже, но он становится только логарифмически хуже, что может указывать на то, что в некоторых случаях лучше разветвляться на большее количество рабочих.

Решения для отставших и высокой задержки при использовании Sync-SGD

«Гонка вооружений» для самых современных моделей машинного обучения привела к тому, что отрасль разработала сложные системы, для обучения которых требуются мощные вычислительные ресурсы. Когда дело доходит до такого большого масштаба, любая задержка в тренировочном цикле приводит к значительной задержке всего тренировочного процесса. Чтобы соответствовать этим высоким требованиям и сократить время итерации, исследователи из научных кругов и промышленности тратят значительное время и ресурсы на усовершенствование и оптимизацию процесса обучения. Я собрал решения SOTA для отставших и высокой задержки, которые улучшают время обучения при использовании подхода Sync-SGD.

Решения для отставших

Отбрасывание отставших — НЕПРАВИЛЬНЫЙ ПОДХОД

Мой первоначальный подход к решению этой проблемы заключался в том, чтобы отбросить результаты отставших и вычислить градиент, используя результаты других рабочих. Я поддержал этот подход, используя две основные гипотезы:

  • Низкое соотношение отставших к завершенным задачам. По мере увеличения количества отставших количество отставших увеличивается, однако они соответствуют только ~ 98-му процентилю, и поэтому их влияние на градиент в среднем будет относительно небольшим.
  • Сокращение небольшого объема данных из крупномасштабного набора данных малоэффективно — метод Sync-SGD используется для большого объема данных. Таким образом, удаление результата небольших партий из тренировочного процесса окажет незначительное влияние на градиент в среднем.

Однако моя интонация была признана неправильной Рафалом и др. (2017). Они исследовали эффект отбрасывания результатов отставших без использования резервных рабочих. Наличие меньшего количества машин означает меньший эффективный размер мини-пакета и, следовательно, большую дисперсию градиента, что требует большего количества итераций для сходимости.

Как показано на рисунке 5, итерации, необходимые для сходимости, увеличиваются при уменьшении количества рабочих процессов, из которых мы собираем градиент. Таким образом, мой подход сокращает время итерации на пакет, но увеличивает количество эпох до преобразования и, следовательно, общее время обучения.

Обработчики резервного копирования

Рафал и др. (2017) подошли к проблеме отставания, используя приемы из других распределенных систем (MapReduce, Dryad, Hadoop и Spark). Они решили добавить b резервных рабочих к Nворкерским. Как только корневой агрегатор получает N входных данных, он агрегирует их градиент и обновляет параметры. Градиенты самых медленных рабочих b сбрасываются, когда они прибывают. Из рисунка 2 видно, что их эксперимент привел к получению 80% 98-го градиента менее чем за 2 секунды, тогда как только 30% конечного градиента. Кроме того, время сбора последних нескольких градиентов растет экспоненциально, что приводит к напрасной трате незанятых ресурсов и времени, затрачиваемому на ожидание самых медленных градиентов.

В рамках исследования они провели эмпирическое сравнение алгоритмов синхронного и Асинхронного распределенного стохастического градиентного спуска на Начальной модели (Szegedy et al., 2016), обученной на наборе данных ImageNet Challenge (Russakovsky et al., 2015). .

На рисунке 6 видно, как использование разного количества рабочих и резервных рабочих процессов (N+b) явно влияет на время и скорость преобразования. Рисунок 6 (b) показывает, что увеличение количества рабочих веером не обязательно приводит к лучшим результатам. При прохождении ~105 воркеров точность модели снижается на ~0,3%. Кроме того, на рис. 6 (в) и 6 (г) наклон улучшения уменьшается по мере увеличения числа рабочих, что отражено в форме «локтя».

Решения для высокой задержки

Позвонить всем-уменьшить

Ring All-Reduce — это хорошо известный и используемый метод уменьшения высокой задержки. Она была принята и включена в библиотеку Хоровод компании Uber. Он использует алгоритмы связи с оптимальной полосой пропускания без ослабления ограничений синхронизации. Этот метод устраняет ограничение полосы пропускания между корневым агрегатором и рабочими процессами и пытается его оптимизировать.

Чтобы лучше понять, как работает Ring All-Reduce, мы начнем с изучения метода All-Reduce. В алгоритме All-Reduce каждый рабочий процесс делится своими параметрами со всеми другими рабочими процессами и применяет операцию сокращения (например, суммирование, умножение, максимум или минимум). Алгоритм All-Reduce реализуется различными способами. Некоторые стремятся сократить пропускную способность, в то время как другие пытаются сократить задержку.

Как показано на рисунке 4, при увеличении числа рабочих процессов мы наблюдаем явление задержки в виде длинного хвоста. Вдобавок ко всему, при использовании наивного метода связи между корневым агрегатором и рабочими процессами для передачи данных стоимость связи увеличивается линейно с количеством рабочих процессов.

Алгоритм Ring All-Reduce устраняет узкое место, возникающее при отправке данных на один сервер параметров методом «все к одному». В этом методе каждому рабочему назначается два рабочих; один для отправки данных и другой для получения, а затем выполняет следующие шаги:

  • Scatter-reduce — каждый рабочий процесс отправляет и получает порцию данных от своих соседей. После выполнения первой итерации передачи рабочие выполняют сокращенную операцию, а затем снова отправляют ее следующему процессу в кольце. Эта фаза заканчивается, когда каждый процесс удерживает полное сокращение фрагмента.
  • Все собрать — каждый воркер заменит свое значение на вновь полученное и продолжит передачу данных, пока каждый воркер не получит взносы от всех других воркеров.

Скорость алгоритма Ring All-Reduce не зависит от количества рабочих процессов, вместо этого она ограничивается самым медленным каналом связи между соседними рабочими процессами. Алгоритм кольцевого сокращения применяется к системам Sync-SGD так же, как и структура сервера параметров, но вместо отправки градиентов на один сервер параметров он отправляет их своим соседям.

Заключение

По мере увеличения размера наборов данных и сложности моделей распределенное обучение будет становиться все более распространенным явлением в экосистеме MLOps. Как мы видели, задержка одного тренировочного цикла сильно влияет на весь тренировочный процесс. Таким образом, потребность в совершенствовании тренировочного процесса и сокращении времени на эпоху высока. Если у вас есть еще идеи, вопросы или мысли — я буду рад услышать о них!

Чтобы узнать больше подобного контента, следите за мной в LinkedIn и Twitter.