Архитектуры LLM и MoE
Архитектурный слой LLM - MoE, RoPE, GQA, FlashAttention - вопросы для тех, кто заявил глубину. Проверяют не знание аббревиатур, а понимание, какую проблему каждая решает: память, контекст или компьют.
// Каждая оптимизация тут отвечает на один вопрос: «что у нас кончается - память, время или деньги?»
MoE: много параметров, мало вычислений
Mixture of Experts: FFN-слой (feed-forward network) заменён набором экспертов, роутер активирует top-k на каждый токен. Параметров у модели много, активных вычислений на токен - мало: качество «большой» модели по цене инференса «маленькой» активной части.
Цена: память нужна под всех экспертов сразу, а обучение сложнее - роутер требует балансировки нагрузки, иначе половина экспертов простаивает.
// Сравнивать MoE с dense по «общим параметрам» некорректно: сопоставимы активные параметры и компьют на токен. И «эксперты по темам» - миф: роутинг потокенный и так красиво не интерпретируется.
- MoE / роутер
- top-k экспертов на токен; параметры ≫ активные вычисления
- активные параметры
- что реально считается на токен; база сравнения с dense
RoPE и GQA: контекст и память
RoPE - вращательные позиционные эмбеддинги: кодируют относительные позиции прямо в attention. RoPE-скейлинг - основной способ растянуть контекст после обучения; но растянутый контекст валидируют на длинных задачах - качество на дальнем конце может тихо падать.
GQA (grouped-query attention)/MQA (multi-query attention): несколько query-голов делят общие K/V - KV-кэш (key-value) меньше в разы почти без потери качества. Это ответ на «длинные контексты съедают память»: меньше кэш - больше батч и длиннее контекст на той же GPU.
// Связка проста: RoPE - про то, чтобы модель понимала дальние позиции, GQA - про то, чтобы на них хватало памяти.
- RoPE
- относительные позиции вращением; скейлинг растягивает контекст
- GQA
- общие K/V на группу query-голов - KV-кэш в разы меньше
FlashAttention и мультимодальность
FlashAttention - тот же точный attention, но вычисляемый блоками в быстрой SRAM без материализации матрицы n×n в основной памяти GPU. Не аппроксимация: математика идентична, порядок вычислений другой - меньше памяти и быстрее.
Мультимодальность в декодер-стеке: энкодер изображения (ViT) проецирует картинку в пространство токенов LLM - «картинка как последовательность токенов» для единого декодера.
// Decoder-only остаётся стандартом LLM: causal attention, предсказание следующего токена; глубина, ширина и число голов - основные ручки масштаба.
- FlashAttention
- точный attention блоками в SRAM - память и скорость, не аппроксимация
Как отвечать: «Что даёт MoE-архитектура и какова её цена?»
MoE разменивает память на компьют: параметров много, но роутер активирует top-k экспертов на токен, так что вычислений на токен - как у маленькой модели. Получаем качество большого масштаба по цене инференса активной части. Платим три вещи: память под всех экспертов целиком, сложность обучения - роутер надо балансировать, чтобы эксперты не простаивали, и инфраструктурную сложность шардинга. И важная гигиена сравнения: MoE против dense сравнивают по активным параметрам и компьюту на токен, а не по общему числу параметров, иначе сравнение бессмысленно.
Размен назван явно, цена честно, и добавлена дисциплина сравнения - три слоя понимания вместо пересказа аббревиатуры.
На чём валят
- −Сравнивать MoE и dense по общим параметрам - сравнимы активные параметры и компьют на токен.
- −«Эксперты MoE - эксперты по темам» - роутинг потокенный, так красиво не интерпретируется.
- −Растянуть контекст RoPE-скейлингом без валидации длинных задач - дальний контекст тихо деградирует.
- −«FlashAttention - аппроксимация» - нет, точный attention с другим порядком вычислений.
Проверьте себя
Пять вопросов из банка по этой подтеме. Всего их 17, остальные разбираются в тренажёре.
- Почему большинство генеративных LLM — decoder-only с причинным (causal) вниманием?A)Так у модели заметно меньше параметровB)Decoder-only архитектура физически не способна прочитать и осмыслить входной текст промпта пользователяC)Это существующая архитектура трансформера на сегодняD)Причинная маска не даёт токену видеть будущее — то, что нужно для генерации слева направо
показать ответ и разбор
+D)Причинная маска не даёт токену видеть будущее — то, что нужно для генерации слева направо// разбор: Генерация идёт слева направо: предсказывая токен, модель не должна «подглядывать» в будущее. Causal-маска в self-attention запрещает позиции смотреть вправо, что идеально ложится на авторегрессионную задачу и позволяет единообразно обучаться на всём тексте (каждая позиция предсказывает следующую). Encoder-decoder хорош для seq2seq (перевод), но для чистой генерации decoder-only проще и отлично масштабируется.
- Что даёт архитектура Mixture-of-Experts (MoE) в LLM?A)Убирает необходимость в дорогом механизме self-attention внутри каждого трансформерного блокаB)Делает генерацию модели детерминированнойC)Роутер активирует лишь малую часть экспертов на токен: много параметров при почти постоянной цене инференса на токенD)Уменьшает итоговое суммарное число параметров модели
показать ответ и разбор
+C)Роутер активирует лишь малую часть экспертов на токен: много параметров при почти постоянной цене инференса на токен// разбор: В MoE FFN-слой заменён набором «экспертов», а обучаемый роутер на каждый токен выбирает лишь несколько из них (top-k). Итог: суммарное число параметров огромно (растит ёмкость/знание), но на каждый токен считается только активная доля — стоимость инференса растёт слабо (sparse activation). Плата — память под всех экспертов, сложность балансировки нагрузки роутера и обучения. Так делают Mixtral и ряд фронтир-моделей.
- Зачем в современных LLM применяют grouped-query / multi-query attention (GQA/MQA) вместо полного multi-head?A)Чтобы существенно увеличить общее суммарное число обучаемых параметров именно в слоях внимания модели ради её ёмкости ради повышения итогового качества генерации на длинных текстахB)Чтобы убрать KV-cache из процесса декодированияC)Чтобы модель стала двунаправленной по вниманиюD)Чтобы несколько query-голов делили общие key/value — это резко сокращает KV-cache и ускоряет декодирование при близком качестве
показать ответ и разбор
+D)Чтобы несколько query-голов делили общие key/value — это резко сокращает KV-cache и ускоряет декодирование при близком качестве// разбор: В обычном multi-head у каждой головы свои K/V, и KV-cache при декодировании раздувается — а он часто и есть узкое место по памяти/скорости. MQA даёт всем головам общие K/V (одна пара), GQA — компромисс: группы голов делят K/V. Это кратно сокращает KV-cache, ускоряет decode и увеличивает возможный батч/контекст, теряя минимум качества. Почти стандарт в свежих моделях.
- Что оптимизирует FlashAttention, не меняя математику внимания?A)Как внимание считается на GPU: тайлинг и отказ от материализации полной матрицы N×N в медленной памяти — быстрее и меньше памяти, результат тот жеB)Заменяет точный softmax на приближённую его версиюC)Уменьшает общее число слоёв в моделиD)Заменяет механизм внимания на свёртки
показать ответ и разбор
+A)Как внимание считается на GPU: тайлинг и отказ от материализации полной матрицы N×N в медленной памяти — быстрее и меньше памяти, результат тот же// разбор: Наивное внимание материализует матрицу оценок N×N в медленной HBM-памяти GPU — упор в память и квадратичный расход. FlashAttention считает то же самое, но IO-эффективно: блочно (тайлинг), с онлайн-softmax, не выписывая полную матрицу в HBM, используя быструю SRAM. Результат математически идентичен, но заметно быстрее и памяти O(N) вместо O(N²) на хранение. Это оптимизация ядра, а не приближение.
- Как модели растят контекст сильно за пределы обучавшейся длины (RoPE-масштабирование и т.п.)?A)Просто увеличивают общее число параметров моделиB)Дообучают токенизатор на длинных текстахC)Масштабируют/интерполируют позиционное кодирование (например, RoPE) и до-обучают на длинных примерах, чтобы позиции за пределами обучения оставались валиднымиD)Отключают позиционное кодирование
показать ответ и разбор
+C)Масштабируют/интерполируют позиционное кодирование (например, RoPE) и до-обучают на длинных примерах, чтобы позиции за пределами обучения оставались валидными// разбор: Позицию в трансформере несёт позиционное кодирование; RoPE (rotary) кодирует её вращением и хорошо интерполируется. Чтобы выйти за обучавшуюся длину, позиционные «частоты» масштабируют/интерполируют (position interpolation, NTK-aware, YaRN) и коротко до-обучают на длинных примерах — тогда экстраполяция на большие индексы не ломается. Нарастить параметры или снять позиционку окно не расширит; плюс остаётся цена внимания и lost in the middle.
дальше
Теорию прочитали. Навык ставится повторением
В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.