[!NOTE] Автоматический перевод Эта статья была автоматически переведена с оригинальной английской версии.

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

Large-модель рабочие нагрузки выходят за пределы одного GPU по разным причинам. У задачи обучения может закончиться память из-за состояния оптимизатора, у другой — из-за обработки длинных последовательностей активации, а даже модель с достаточными ресурсами всё равно может не достичь своей цели throughput. Для каждой из этих проблем требуется своя схема партиционирования и взаимодействия.

Это практический обзор основных стратегий параллелизма и ограничений, связанных с ними, основанный на подходах Hugging Face’а. Практическое руководство по ультраскейл-архитектурам. Цель состоит в том, чтобы показать, что приносит каждый сплит, какую информацию он передаёт и когда становятся необходимыми комбинации.

Кратко. Реплицированный параллелизм данных обеспечивает тренировку throughput при наличии одной реплики. Полностью шардированный параллелизм данных разделяет состояние модель, но требует дополнительных операций сбора параметров и распространения градиентов. Параллелизм тензоров, пайплайн, контекста и экспертов позволяет разделить вычисления слоёв по глубине, последовательностям и MoE экспертам. Их следует комбинировать только после определения ограничений, связанных с памятью или коммуникацией.

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

Начните с двух лимитов памяти

Процесс обучения и инференс имеют разный объём вычислительных ресурсов.

training peak ≈ parameters
              + gradients
              + optimizer state
              + saved activations
              + temporary buffers
              + communication buffers
              + allocator headroom

inference peak ≈ resident weights
               + KV cache
               + runtime workspace
               + communication buffers
               + allocator headroom

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

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

Расширение масштабирования в распределённых системах начинается с анализа показателей боттлнек

Каждое параллельное измерение подразумевает компромисс

Полезный вопрос заключается не в том, «Какая техника лучше всего?», а в том: «Какой размер тензора разделяется, какое состояние реплицируется и какой коллективный процесс попадает на критический путь?»

СтратегияРазделениеОсновное снижение нагрузкиВведена коммуникация
реплицированная параллельность данныхпакетная обработкаобучение throughput
Полная шардированная параллельность данныхпараметры, градиенты и состояние оптимизатора внутри группы DPмодельпамять состоянияпараметры all-gather и gradient reduce-scatter
параллелизм тензоровматрица или размеры аттеншн внутри слоёвслои веса и активацииколлективы внутри блоков трансформера
Пайплайн параллелизмгруппы слоёвмодель глубина и состояние на каждом этапеточечное соединение активации в сочетании с алгоритмом планирования пузырей
Параллелизм контекстаразмерность последовательностипамять для обработки длинных последовательностей активацияобмен ключ/значение или аттеншн внутри группы последовательностей
Экспертный параллелизмMoE эксперты и маршрутизация токеныКоличество экспертов на уровеньтокен организация передачи и объединения данных, как правило, в формате «все-ко-всем»

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

Реплицированная параллельность по данным: throughput без ограничений по пропускной способности

Обучение с реплицированным параллельным обработкой данных

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

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

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

Полностью шардированная параллельность на уровне данных: память состояния для коллективов

Полностью шардированная выполнимость в режиме данных-параллелизма

Параллелизм с полным шардингом хранит шарды параметров, градиентов и оптимизатора внутри группы узлов. Для выполнения вычислений параметры слоя собираются с помощью операции all-gather, после чего могут быть снова разделены на шарды; градиенты же возвращаются к их источникам с использованием алгоритма reduce-scatter.

Текущая документация PyTorch различает модели FSDP2 fully_shard API из более старой версии FullyShardedDataParallel обертка. FSDP2 группирует коммуникацию по модулям, к которым она направлена. fully_shard Данный подход реализуется путем применения стратегии «снизу вверх», что позволяет группам слоёв перекрывать процессы обмена данными и вычислений.

from torch.distributed.fsdp import fully_shard


# Apply bottom-up: each block becomes a communication group.
for block in model.transformer.blocks:
    fully_shard(block)

# Shard remaining root parameters such as embeddings and output projection.
fully_shard(model)

# Construct the optimizer after parameters have become sharded DTensors.
optimizer = AdamW(model.parameters(), lr=learning_rate)

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

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

Параллелизм тензоров: математика разбиения слоёв

Разделение слоя с параллельными тензорами

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

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

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

Пайплайн параллелизм: глубина разбиения и время планирования

Пайплайн — параллельные этапы обработки и микропакеты данных

Пайплайн Параллелизм предполагает размещение различных групп слоёв на отдельных этапах и отправку данных между ними. активации между ними. Микропакеты позволяют стадиям выполняться одновременно.

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

для простого сбалансированного графика в стиле GPipe p этапы и m микропакеты, идеализированное значение доли элементов в передающей пузырьковой структуре составляет примерно:

(p - 1) / (m + p - 1)

В реальных графиках может применяться один-вперёд/один-назад, интерлейсинг или вариант с нулевыми пузырями, причём различия в стоимости слоёв могут существенно влиять на формулу оптимизации. Границы этапов следует выбирать на основе измеренных значений времени и памяти, а не равного количества слоёв.

Параллелизм контекста: разбиение длинных последовательностей активации

Контекст параллельного обмена аттеншн

Параллелизм в контексте позволяет распределять размерность последовательностей. Каждый узел обрабатывает свой фрагмент последовательности, в то время как аттеншн осуществляет обмен информацией, необходимой для сохранения семантики полного контекста. В реализациях могут применяться схемы типа «точка-к-точке», алгоритмы all-gather, all-to-all или их иерархические комбинации.

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

Не выбирайте его на основе универсальных порогов в 8K, 32K или 100K. Определите объём памяти активация и параметры коммуникации аттеншн для конкретной архитектуры.

Экспертный параллелизм: применим только к архитектуре MoE

Экспертный параллельный токен роутинг

Экспертный параллелизм предусматривает распределение экспертов по слоям типа mixture-of-experts. Устройство роутер отправляет представления токен выбранным экспертам и объединяет полученные ими результаты. Для обработки каждого токен вычисления выполняются только отдельными экспертами, однако общее количество экспертов веса по-прежнему требует хранения и размещения в соответствующих структурах сервинг.

Это не переключатель оптимизации для плотной сети модель. Он является частью архитектуры MoE и обеспечивает балансировку нагрузки, управление пропускной способностью, реализацию механизма токен «все-ко всем», обработку случаев отброса или заполнения данных токены, учет вспомогательных потерь и коррекцию диспропорций при сбоях. Необходимо отслеживать показатели токены для каждого эксперта, энтропию роутинг, превышение пропускной способности, время передачи данных и качество связи по отдельным маршрутам.

Составление лейаута на основе топологии

Крупные системы обучения объединяют различные измерения. Общий размер пространства модели обычно определяется как произведение таких параметров, как:

world size = DP × TP × PP × CP

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

Создайте макет в следующем порядке:

  1. Определите домены коммуникации: связи между GPU и GPU, коммутаторы, границы NUMA, структуру узлов, параметр перенаселения и пути хранения данных.
  2. Разместите группы элементов, чувствительные к частым латентность операциям, как правило TP, в наиболее быстром подходящем домене.
  3. Из оставшейся пропускной способности и объёма полосы пропускания выберите FSDP или группы DP с репликацией.
  4. Добавьте элементы PP, если это улучшает глубину размещения или обеспечивает выгоду от междоменного трафика, при этом необходимо сбалансировать время выполнения операций и использование памяти.
  5. Добавляйте элементы CP только из-за ограничений последовательности, а элементы EP — исключительно в случаях, когда требуется специализированная топология модель.
  6. Проверьте делительность количества головных узлов, скрытых размерностей, слоёв, экспертов, блоков данных и последовательностей для рассматриваемой сети.
  7. Существует Бенчмарк несколько валидных вариантов сетевой структуры; гибкие эвристики, учитывающие топологию, помогают выбрать подходящие кандидаты, а не оптимальное решение.

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

Обучение и сервинг требуют отдельного принятия решений

Инференс обычно не передаёт градиенты и состояние оптимизатора, поэтому схемы обучения в стиле FSDP не копируются автоматически.

Для сервинг задайте вопрос:

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

Объективная оценка масштабируемой архитектуры

Для каждого кандидата записывайте:

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

Заключение

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

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

Список литературы