Архитектура LLM
Внутреннее устройство трансформеров для LLM: авторегрессионная генерация, KV-cache, MQA/GQA, RoPE, Mixture-of-Experts, обучение токенизатора и законы масштабирования.
10 вопросов
JuniorТеорияОчень частоКак LLM генерирует текст авторегрессионно и чем prefill отличается от decode?
Как LLM генерирует текст авторегрессионно и чем prefill отличается от decode?
Это цикл: прямой проход превращает последовательность в распределение по словарю, токен сэмплируется и дописывается, цикл повторяется. Prefill прогоняет весь промпт за один параллельный проход, а decode выдаёт по токену за проход и последователен.
Типичные ошибки
- ✗Думают, что весь ответ выдаётся одним прямым проходом
- ✗Считают prefill и decode одинаково параллельными и одинаково дешёвыми
- ✗Забывают, что каждый шаг decode обусловлен всей последовательностью целиком
Уточняющие вопросы
- →Почему decode обычно упирается в пропускную способность памяти, а prefill — в вычисления?
- →Как стратегия сэмплирования надстраивается над этим циклом генерации?
MiddleПроизводительностьОчень частоЧто хранит KV-cache и как его размер растёт с батчем, слоями и длиной контекста?
Что хранит KV-cache и как его размер растёт с батчем, слоями и длиной контекста?
Он хранит векторы Key и Value всех прошлых токенов в каждом слое, чтобы новый токен обращался к ним без пересчёта. Размер — произведение батча, длины последовательности, числа слоёв, KV-голов, размерности головы и двойки, и растёт линейно с контекстом.
Типичные ошибки
- ✗Думают, что кэш хранит запросы или логиты, а не ключи и значения
- ✗Считают рост по длине контекста квадратичным, а не линейным
- ✗Забывают множитель по слоям и сильно занижают итоговый объём
Уточняющие вопросы
- →Какой множитель вы бы урезали первым, чтобы вместить более длинный контекст?
- →Как управление памятью paged attention меняет этот объём на практике?
JuniorТеорияЧастоЧто предсказывает decoder-only LLM при обучении и что делает causal masking?
Что предсказывает decoder-only LLM при обучении и что делает causal masking?
Предсказание следующего токена, а loss — кросс-энтропия по словарю, усреднённая по позициям. Causal masking закрывает внимание к будущим позициям, поэтому предсказание видит только префикс, и все позиции последовательности обучаются за один проход.
Типичные ошибки
- ✗Путают причинную цель next-token с masked language modelling в стиле BERT
- ✗Считают causal masking трюком инференса, а не ограничением при обучении
- ✗Думают, что в loss вносит вклад только последняя позиция последовательности
Уточняющие вопросы
- →Почему причинная модель обучает все позиции последовательности за один проход?
- →Что даёт цель masked language modelling (MLM), чего не может причинная?
MiddleТеорияЧастоEncoder-only, encoder-decoder, decoder-only — для чего каждая и почему победила decoder-only?
Encoder-only, encoder-decoder, decoder-only — для чего каждая и почему победила decoder-only?
Encoder-only двунаправленный, обучается masked language modelling и годится для классификации и эмбеддингов. Encoder-decoder — фиксированное отображение входа в выход вроде перевода. Decoder-only обучается причинно на сыром тексте, и одна модель закрывает все задачи.
Типичные ошибки
- ✗Приписывают генерацию семейству encoder-only, а классификацию — encoder-decoder
- ✗Считают, что все три семейства обучаются на одной и той же цели предобучения
- ✗Объясняют победу decoder-only только стоимостью обслуживания, забывая универсальность
Уточняющие вопросы
- →Когда сегодня всё же стоит взять encoder-only модель вроде BERT?
- →Что даёт cross-attention в encoder-decoder, чего не может decoder с промптом?
MiddleТеорияЧастоКак маршрутизация Mixture-of-Experts делает активные параметры много меньше общих?
Как маршрутизация Mixture-of-Experts делает активные параметры много меньше общих?
Роутер шлёт каждый токен к одному-двум лучшим feed-forward экспертам, поэтому работают только они. Активные параметры и вычисления — как у небольшой плотной модели, а общих параметров кратно больше. Плата — все эксперты в памяти, а маршрутизации нужна балансировка.
Типичные ошибки
- ✗Считают, что все эксперты работают на каждом токене и лишь взвешиваются
- ✗Путают общее число параметров с активными параметрами на токен
- ✗Забывают, что перекос маршрутизации требует вспомогательного балансирующего loss
Уточняющие вопросы
- →Почему MoE-модели всё равно нужна память, пропорциональная общему числу параметров?
- →Что именно штрафует вспомогательный балансирующий loss при обучении?
MiddleТеорияЧастоЧем multi-query и grouped-query attention отличаются от multi-head и что дают?
Чем multi-query и grouped-query attention отличаются от multi-head и что дают?
В multi-head у каждой query-головы свои головы Key и Value. В multi-query одна K/V-голова общая для всех, в grouped-query — одна на группу query-голов. Меньше K/V-голов — пропорционально меньше KV-cache и быстрее decode, а GQA держит качество близко к multi-head.
Типичные ошибки
- ✗Считают, что общими становятся проекции Query, а не Key и Value
- ✗Упускают, что KV-cache уменьшается пропорционально числу K/V-голов
- ✗Считают GQA грубым приближением, а не компромиссом, сохраняющим качество
Уточняющие вопросы
- →Как выбрать число key-value групп под заданный бюджет обслуживания?
- →Можно ли перевести multi-head чекпойнт в grouped-query без полного переобучения?
MiddleТеорияЧастоРазберите один блок трансформера и скажите, где лежит большая часть его параметров.
Разберите один блок трансформера и скажите, где лежит большая часть его параметров.
Блок — это внимание, затем feed-forward сеть, каждая часть — с остаточной связью и нормализацией. Внимание смешивает токены, а feed-forward преобразует каждую позицию отдельно. При обычном четырёхкратном расширении на него приходится около двух третей параметров.
Типичные ошибки
- ✗Считают, что большая часть параметров блока лежит в проекциях внимания
- ✗Меняют роли местами, думая, что токены смешивает feed-forward слой
- ✗Считают остаточную связь или нормализацию крупным хранилищем параметров
Уточняющие вопросы
- →Как коэффициент расширения feed-forward слоя меняет это распределение параметров?
- →Что меняет в обучении расположение нормализации до блока против после него?
MiddleТеорияИногдаКак rotary positional embedding (RoPE) кодирует относительную позицию между токенами?
Как rotary positional embedding (RoPE) кодирует относительную позицию между токенами?
RoPE поворачивает query и key на угол, пропорциональный абсолютной позиции. Скалярное произведение повёрнутых векторов зависит лишь от разности углов, поэтому видно относительное расстояние. Таблица позиций не обучается, и позиции за длиной обучения определены.
Типичные ошибки
- ✗Думают, что RoPE прибавляется к эмбеддингу, как синусоидальное или обучаемое кодирование
- ✗Применяют поворот к Value или к логитам после softmax, а не к query и key
- ✗Считают, что RoPE экстраполирует сколь угодно далеко без масштабирования частот
Уточняющие вопросы
- →Что меняют в RoPE приёмы масштабирования частот вроде интерполяции позиций?
- →Чем RoPE отличается от относительного смещения внимания вроде ALiBi?
MiddleТеорияИногдаЧто даёт и чего стоит больший словарь токенизатора и как выбрать его размер для русского с кодом?
Что даёт и чего стоит больший словарь токенизатора и как выбрать его размер для русского с кодом?
Больший словарь — меньше токенов на текст: последовательности короче, внимание дешевле, в контекст влезает больше. Платой становятся крупные матрицы эмбеддингов и выхода и меньше сигнала на редкий токен. Для русского с кодом обучите byte-pair encoding на этой смеси.
Типичные ошибки
- ✗Думают, что больший словарь удлиняет, а не укорачивает последовательности
- ✗Забывают, что матрицы эмбеддингов и выхода растут вместе с размером словаря
- ✗Считают, что редкие токены от большего словаря выигрывают, а не теряют сигнал
Уточняющие вопросы
- →Почему токенизатор, обученный на английском, раздувает число токенов на русском тексте?
- →Какое измерение на отложенном корпусе вы бы взяли для сравнения двух размеров словаря?
SeniorДизайнИногдаУ вас фиксированный бюджет вычислений на предобучение новой универсальной текстовой модели, и его надо разделить между размером модели и числом обучающих токенов. Бюджет заморожен и не расширяется; команда данных может дать либо небольшой тщательно отфильтрованный корпус, либо заметно больший и более шумный; а то, что вы обучите, будет обслуживать пользователей минимум два года при высоком потоке запросов на том же железе. Опираясь на законы масштабирования, решите, как разменять параметры на обучающие токены, обоснуйте выбранную точку размена с учётом горизонта обслуживания и явно назовите, что именно эти законы не учитывают.
У вас фиксированный бюджет вычислений на предобучение новой универсальной текстовой модели, и его надо разделить между размером модели и числом обучающих токенов. Бюджет заморожен и не расширяется; команда данных может дать либо небольшой тщательно отфильтрованный корпус, либо заметно больший и более шумный; а то, что вы обучите, будет обслуживать пользователей минимум два года при высоком потоке запросов на том же железе. Опираясь на законы масштабирования, решите, как разменять параметры на обучающие токены, обоснуйте выбранную точку размена с учётом горизонта обслуживания и явно назовите, что именно эти законы не учитывают.
Loss падает предсказуемо, когда параметры и токены растут вместе, поэтому compute-оптимальный запуск наращивает оба. При двухлетнем горизонте я взял бы модель меньше и обучал дольше, ведь инференс платится на каждом запросе. Законы не учитывают качество данных и стоимость обслуживания.
Типичные ошибки
- ✗Тратят бюджет только на параметры, а число токенов берут по остатку
- ✗Отгружают compute-оптимальную точку, не взвесив двухлетний счёт за инференс
- ✗Считают, что законы охватывают качество данных и экономику обслуживания
Уточняющие вопросы
- →Как изменился бы ответ, будь модель для внутренних пакетных задач, а не для живого трафика?
- →Что вы бы измеряли по ходу обучения, чтобы заметить неверно выбранный размен?