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

Обучение нейронной сети

Нейронная сеть обучается посредством итеративного процесса. На каждой итерации слои модели пропускаются для расчета выходных данных для каждого обучающего примера в пакете данных. Затем выполняется еще один проход по слоям, чтобы определить, как каждый параметр влияет на конечный результат. Это делается путем вычисления градиента по каждому параметру. Затем средний градиент для партии, параметры и некоторое состояние оптимизации для каждого параметра передаются алгоритму оптимизации, такому как Adam. Этот алгоритм вычисляет параметры следующей итерации (которые должны иметь немного лучшую производительность на ваших данных) и новое состояние оптимизации для каждого параметра. По мере того, как обучение повторяет наборы данных, модель развивается и становится более точной с ее выходными данными.

Параллелизм

Существуют различные методы параллелизма, разделяющие этот учебный процесс по разным измерениям, в том числе:

  • Параллелизм данных — запуск разных подмножеств пакета на разных графических процессорах;
  • Конвейерный параллелизм — запускайте разные слои модели на разных GPU;
  • Тензорный параллелизм — разбейте математику на одну операцию, такую ​​как умножение матриц, которая будет разделена между графическими процессорами;
  • Mixture-of-Experts — обработайте каждый пример только частью каждого слоя.

Ниже приведена иллюстрация различных стратегий параллелизма на трехслойной модели:

Параллелизм данных

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

Самый простой способ согласования данных параллельных воркеров — ввести блокировку связи между ними. Это включает в себя три шага: (1) каждый работник независимо вычисляет градиент; (2) градиенты усредняются по рабочим; и (3) каждый работник независимо вычисляет новые параметры. Шаг (2) представляет собой усреднение по блокировке, что означает, что необходимо передать много данных (пропорционально количеству рабочих, умноженному на размер параметров). Это может снизить производительность обучения. Существуют различные схемы асинхронной синхронизации, которые не несут таких накладных расходов, но могут снизить эффективность обучения. На практике люди обычно придерживаются синхронного подхода.

Конвейерный параллелизм

Конвейерное параллельное обучение разделяет модель между графическими процессорами, так что каждый графический процессор содержит только часть параметров. Это приводит к тому, что одна и та же модель потребляет меньше памяти на GPU. Большую модель легко разделить на секции слоев, расположенных рядом друг с другом. Но существует зависимость между входами и выходами слоев, когда нужно ждать, пока выходные данные предыдущего слоя будут использоваться в качестве его входных данных. Это время ожидания известно как «пузырь», и оно тратит впустую время, которое можно было бы использовать для вычислений на простаивающих машинах.

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

Тензорный параллелизм

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

Например, Megatron-LM распараллеливает матричные умножения в слоях внутреннего внимания и MLP Transformer. PTD-P использует тензор, данные и конвейерный параллелизм; его конвейерный график назначает несколько непоследовательных уровней каждому устройству, что снижает накладные расходы на пузырь, но также увеличивает объем сетевого взаимодействия. Входные данные сети иногда можно распараллелить по измерению, что позволяет повысить эффективность вычислений. Например, параллелизм последовательностей можно использовать для разделения входной последовательности на несколько подпримеров, которые затем можно обрабатывать быстрее и с меньшим объемом памяти.

Смесь экспертов (МО)

При подходе Mixture-of-Experts (MoE) только часть сети используется для вычисления результата для любого одного входа. Это позволяет использовать гораздо больше параметров без увеличения вычислительных затрат. Каждый набор весов называется «экспертами» в надежде, что сеть научится назначать специализированные вычисления и навыки каждому эксперту. Разные эксперты могут размещаться на разных графических процессорах, предоставляя четкий способ увеличения количества графических процессоров, используемых для модели.

GShard масштабирует MoE Transformer до 600 миллиардов параметров, разделяя слои MoE на несколько устройств TPU и дублируя другие слои. Switch Transformer масштабирует размер модели до триллионов параметров с еще большей разреженностью, направляя один вход одному эксперту.

Заключение

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

Чтобы узнать больше интересных и захватывающих блогов, следите за обновлениями!

Следуй за мной: М. Хасиб Хассан