Перейти к содержимому
ПереводыDeepSeek

Техотчёт DeepSeek-V4 (2026): миллион токенов контекста

Конспект техотчёта DeepSeek-V4: гибридное внимание из CSA и HCA, сжатие KV по оси последовательности, mHC вместо обычного остаточного потока, оптимизатор Muon, FP4-обучение с учётом квантования и сборка одной модели из десятка специалистов через on-policy distillation.

  • Две модели: V4-Pro (1,6 трлн параметров, 49 млрд активных) и V4-Flash (284 млрд / 13 млрд активных). Обе изначально работают с контекстом 1 млн токенов. Претрейн: 33 трлн токенов у Pro, 32 трлн у Flash.
  • Главное — гибридное внимание. Слои двух типов чередуются: CSA (Compressed Sparse Attention) сжимает KV по оси последовательности в 4 раза и поверх применяет разреженный отбор DSA; HCA (Heavily Compressed Attention) сжимает в 128 раз, но внимание оставляет плотным.
  • Результат на контексте 1M против V3.2: V4-Pro — 27% вычислений на токен и 10% KV-кэша; V4-Flash — 10% вычислений и 7% кэша. По сравнению с типовым GQA-8 в BF16 кэш V4 — около 2%.
  • Остаточные связи заменены на mHC (гиперсвязи с ограничением на многообразие): поток разветвляется в 4 раза шире, а матрица смешивания принудительно делается дважды стохастической — это гарантирует устойчивость.
  • Оптимизатор — Muon с гибридными итерациями Ньютона — Шульца; AdamW оставлен только для эмбеддингов, предсказывающей головы и RMSNorm.
  • Пост-трейнинг: сначала обучают специалистов по доменам (SFT + GRPO), потом собирают из них одну модель через on-policy distillation с более чем десятью учителями и полным словарём логитов.
  • Квантование: FP4 (MXFP4) для весов экспертов MoE и для пути Q·K индексатора, причём обучение идёт с учётом квантования (QAT).
Раздел отчётаО чёмКуда в курсе
§2.2 mHCгиперсвязи и дважды стохастические матрицы9.2.1
§2.3 CSA и HCAгибридное внимание, сжатие по оси токенов5.5.2 «Разреженное внимание»
§2.4 Muonортогонализация обновлений, почему не нужен QK-Clip5.4.4 «Оптимизаторы и стабильность»
§3 Infrastructuresслитые ядра MoE, TileLang, детерминированные ядра, KV-кэш на диске5.7.3, 7.1.2
§4.2.3как лечили скачки loss: Anticipatory Routing, SwiGLU Clamping5.4.4
§5.1специалисты и on-policy distillation6.4.4 «Дистилляция рассуждений»
§5.2.1FP4 QAT и почему FP4 → FP8 без потерь5.4.1, 7.2.1

Логика отчёта: рассуждающие модели дали масштабирование во время ответа (test-time scaling) — качество растёт, если позволить модели думать дольше. Но думать дольше — значит порождать больше токенов, а у обычного внимания сложность квадратичная. Плюс появились задачи с длинным горизонтом: агентные рабочие процессы, анализ больших наборов документов. Значит, упираемся в ту же стену с двух сторон, и лечить надо архитектуру.

Общая идея — сжимать KV-кэш по оси последовательности: вместо записи на каждый токен хранить одну запись на несколько токенов. Дальше два разных компромисса, которые чередуются по слоям.

  1. Сжатие. Из скрытых состояний считаются две серии записей KV (CaC^a, CbC^b) и два набора весов сжатия (ZaZ^a, ZbZ^b). Каждые m=4m = 4 записи сворачиваются в одну: веса проходят через softmax вместе с обучаемыми позиционными смещениями, и записи складываются с этими весами. Хитрость в том, что окна aa и bb сдвинуты и перекрываются: сжатая запись ii собирается из 2m2m исходных, но соседние сжатые записи делят часть исходных между собой. Длина последовательности при этом всё равно сокращается ровно в mm раз.
  2. Отбор. К сжатым записям применяется тот же DeepSeek Sparse AttentionDeepSeek Sparse Attention (DSA)EN DeepSeek Sparse Attention (DSA)Разреженное внимание DeepSeek-V3.2 — дешёвый индексатор выбирает 2048 прошлых токенов для каждого запроса, полное MLA считается только по ним. Позже взято в GLM-5., что в V3.2: молниеносный индексатор считает оценки It,sI_{t,s} с ReLU и выбирает top-k сжатых блоков (у Pro k=1024k = 1024, у Flash k=512k = 512).
  3. Внимание в режиме MQA. Каждая сжатая запись служит и ключом, и значением сразу для всех голов запроса.
  4. Групповая выходная проекция. Голов много (nh=128n_h = 128 у Pro), и прямая проекция их объединённого выхода в dd была бы дорогой. Выходы делят на gg групп (16 у Pro), каждую группу проецируют в промежуточную размерность 1024, и только потом — в скрытое состояние.

HCA устроена так же, но с компрессией m′=128m' = 128, без перекрытия окон и без разреженного отбора: внимание по сжатым записям плотное. Логика очевидна: после сжатия в 128 раз записей и так мало, экономить отбором нечего.

Чтобы не терять мелкие детали рядом с текущим токеном, рядом с HCA работает скользящее окно шириной 128 токенов с несжатыми записями.

flowchart TD
T["Поток токенов"] --> C1["Слой CSA: сжатие x4 (перекрывающиеся окна) → индексатор → top-k → MQA"]
C1 --> C2["Слой HCA: сжатие x128 + окно 128 несжатых → плотное MQA"]
C2 --> C3["Слой CSA ..."]
C3 --> C4["Слой HCA ..."]
Чередование CSA и HCA по слоям (схема по §2.3 отчёта)

Четыре источника экономии, которые авторы перечисляют в §2.3.4:

  1. Смешанная точность хранения KV. Измерения RoPE — в BF16, остальные — в FP8. Это почти вдвое меньше, чем чистый BF16.
  2. Индексатор в FP4. Поиск top-k ускоряется там, где он больнее всего — на очень длинных контекстах.
  3. Меньший top-k, чем у V3.2 (1024 и 512 против 2048) — выигрыш на коротких и средних текстах.
  4. Само сжатие — главный вклад.

Итог в цифрах на контексте 1M относительно V3.2: V4-Pro — 27% вычислений на токен (в пересчёте на эквивалентные FP8-операции) и 10% KV-кэша; V4-Flash — 10% и 7%. Относительно типового BF16 GQA-8 с головой 128 кэш V4 — около 2%.

mHC: остаточный поток, который не взрывается

Заголовок раздела «mHC: остаточный поток, который не взрывается»

Гиперсвязи (hyper-connections, HC) расширяют остаточный поток в nhcn_\text{hc} раз: вместо вектора Rd\mathbb{R}^{d} между блоками течёт матрица Rnhc×d\mathbb{R}^{n_\text{hc}\times d}. Три обучаемых отображения — вход AlA_l, остаток BlB_l и выход ClC_l — задают обновление

Xl+1=BlXl+Cl Fl(AlXl),X_{l+1} = B_l X_l + C_l\,\mathcal{F}_l(A_l X_l),

где Fl\mathcal{F}_l — обычный слой (внимание или MoE), которому по-прежнему подаётся dd-мерный вектор. Расширение потока — новая ось масштабирования, почти бесплатная, потому что nhc≪dn_\text{hc} \ll d. Но при складывании многих слоёв обучение регулярно разваливалось численно.

Решение mHC — загнать матрицу BlB_l на многообразие дважды стохастических матриц (многогранник Биркгофа): все элементы неотрицательны, суммы по строкам и по столбцам равны единице. У такой матрицы спектральная норма не превышает 1, то есть преобразование не растягивает сигнал; к тому же произведение дважды стохастических матриц снова дважды стохастическое — значит, устойчивость сохраняется на любой глубине. Отображения AlA_l и ClC_l дополнительно делают неотрицательными и ограниченными через сигмоиду, чтобы сигналы не гасили друг друга.

Параметры трёх отображений генерируются динамически: складываются зависящая от входа часть (из нормированного развёрнутого XlX_l) и статическая обучаемая часть. Дважды стохастической матрицу делает проекция Синкхорна — Кноппа (20 итераций).

В конфигурации V4: nhc=4n_\text{hc} = 4.

Muon применяется ко всем параметрам, кроме эмбеддингов, предсказывающей головы, статических смещений и гейтов mHC и весов RMSNorm — там остаётся AdamW. Шаг Muon: накопить момент, применить трюк Нестерова, ортогонализовать матрицу обновления итерациями Ньютона — Шульца, нормировать её RMS и применить к весам вместе с weight decay.

Деталь, которой нет у других: гибридные итерации. Всего 10 итераций вида Mk=aMk−1+b(Mk−1Mk−1T)Mk−1+c(Mk−1Mk−1T)2Mk−1M_k = aM_{k-1} + b(M_{k-1}M_{k-1}^{T})M_{k-1} + c(M_{k-1}M_{k-1}^{T})^{2}M_{k-1}. Первые 8 с коэффициентами (3,4445, −4,7750, 2,0315)(3{,}4445,\ -4{,}7750,\ 2{,}0315) — быстро подтягивают сингулярные числа к единице; последние 2 с коэффициентами (2, −1,5, 0,5)(2,\ -1{,}5,\ 0{,}5) — аккуратно их там фиксируют.

Ещё одно следствие архитектуры: раз запросы и записи KV можно прямо нормировать через RMSNorm, оценки внимания не взрываются, и приём QK-Clip (его придумали в Kimi K2 как раз против взрыва логитов при Muon) не нужен.

Два приёма против скачков loss, которые авторы честно называют «работают, но до конца не поняты»:

  • Anticipatory Routing («упреждающая маршрутизация»). При скачке loss систему переключают в режим, где признаки считаются текущими параметрами θt\theta_t, а маршруты экспертов берутся от старых параметров θt−Δt\theta_{t-\Delta t}: индексы маршрутизации вычисляются заранее, на шаге t−Δtt - \Delta t, и кэшируются. Накладные расходы около 20% по времени, но включается режим автоматически и ненадолго — при обнаружении скачка, с коротким откатом назад, а потом система возвращается к обычному обучению.
  • SwiGLU Clamping. Линейная часть SwiGLU зажимается в диапазон [−10,10][-10, 10], гейт ограничивается сверху значением 10. Это убирает выбросы и стабилизирует обучение без потери качества.
V4-FlashV4-Pro
Слоёв4361
dd40967168
Первые слоичистое скользящее окно (2 слоя)HCA (2 слоя)
Дальшечередование CSA и HCAчередование CSA и HCA
CSA: сжатие mm, top-k4, 5124, 1024
HCA: сжатие m′m'128128
Голов запроса nhn_h, размер головы cc64, 512128, 512
Экспертов на слой1 общий + 256 маршрутизируемых, активны 61 общий + 384, активны 6
Промежуточная размерность эксперта20483072
Глубина MTP11
mHC: nhcn_\text{hc}, итераций Синкхорна4, 204, 20
Параметры (всего / активных)284 млрд / 13 млрд1,6 трлн / 49 млрд
Токенов претрейна32 трлн33 трлн

Любопытная деталь: в первых трёх MoE-слоях используется хеш-маршрутизация — эксперт выбирается по фиксированной таблице, а не обучаемым роутером. Балансировка — как в V3, смещениями без вспомогательного лосса (скорость обновления смещений 0,001) плюс очень слабый лосс баланса (вес 0,0001) против перекоса внутри одной последовательности.

Расписание обучения V4-Flash: батч растёт до 75,5 млн токенов, learning rate 2,7⋅10−42{,}7\cdot10^{-4} держится почти всё обучение и в конце косинусом спадает до 2,7⋅10−52{,}7\cdot10^{-5}. Длина последовательности растёт поэтапно: 4K → 16K → 64K → 1M. Первый триллион токенов модель учится с плотным вниманием; разреженность включают на длине 64K, предварительно разогрев индексатор CSA — тот же приём, что в V3.2.

Пост-трейнинг: десяток специалистов в одной модели

Заголовок раздела «Пост-трейнинг: десяток специалистов в одной модели»

Схема в два шага.

  1. Специалисты. Для каждой области (математика, код, агенты, следование инструкциям и др.) из базовой модели обучается отдельный эксперт: сначала SFT на качественных данных области, потом RL по GRPO со своими моделями наград.
  2. On-policy distillation (OPD). Одна модель-ученик учится воспроизводить распределения учителей на своих собственных траекториях: LOPD(θ)=∑i=1Nwi⋅DKL ⁣[πθ ∥ πEi].\mathcal{L}_\text{OPD}(\theta) = \sum_{i=1}^{N} w_i \cdot \mathbb{D}_\text{KL}\!\left[\pi_\theta \,\Vert\, \pi_{E_i}\right]. Обратная KL (ученик в первом аргументе) и генерация ответов учеником — это и означает «on-policy». Ученик сам выбирает, у кого учиться в каждом контексте: на математической задаче сближается с математическим экспертом, на коде — с программистским. Учителей больше десяти.

Важное инженерное решение: KL считают по полному словарю логитов, а не по одному токену. Упрощённый вариант (когда логарифм отношения вероятностей подставляют как преимущество в RL-лосс) дешевле, но даёт высокую дисперсию градиента и нестабильность.

Чтобы это стало возможным при десятке учителей на триллионы параметров: веса учителей лежат в распределённом хранилище и подгружаются по требованию с шардированием как в ZeRO; материализовать логиты для словаря в 100 тыс. слов для всех учителей нереально, поэтому кэшируются только скрытые состояния последнего слоя, а логиты восстанавливаются на лету предсказывающей головой; примеры в батче упорядочены по учителю, так что голова каждого учителя загружается в память ровно один раз; сама KL считается специальным ядром на TileLang.

QAT (quantization-aware training) применяется к двум местам: весам экспертов MoE (главный пожиратель памяти) и пути Q·K в индексаторе CSA (там активации кэшируются и перемножаются целиком в FP4). Оценки индексатора дополнительно переводятся из FP32 в BF16: отбор top-k ускоряется вдвое при сохранении 99,7% полноты выбора нужных записей KV.

Красивая деталь: мастер-веса в FP32 квантуются в FP4 (MXFP4), а затем деквантуются обратно в FP8 без потерь. Почему без потерь: у FP8 (E4M3) на два бита экспоненты больше, чем у FP4 (E2M1), то есть шире динамический диапазон. Пока отношение максимального и минимального масштабов FP4-подблоков (тайлы 1×32) внутри одного блока квантования FP8 (тайлы 128×128) не превышает порога, вся информация о мелких масштабах «впитывается» расширенным диапазоном FP8. Благодаря этому весь конвейер QAT работает поверх существующего FP8-обучения без изменений. Градиенты идут напрямую к мастер-весам — это обычный «прямой» оценщик градиента«прямой» оценщик градиента (STE)EN straight-through estimator (STE)Приём QAT — в прямом проходе веса округляются, а в обратном округление считается тождественной функцией, и градиент проходит «насквозь»..

На генерации (rollout) используется уже настоящий FP4, а не имитация квантования: поведение модели при сборе данных совпадает с боевым развёртыванием.

Мелочь, которая многое говорит о масштабе: в кластере задачи могут быть вытеснены в любой момент, а железо регулярно отказывает. Поэтому у каждого запроса генерации ведётся журнал упреждающей записи (write-ahead log) с точностью до токена: каждый сгенерированный токен сразу дописывается в журнал. При вытеснении движок останавливают и сохраняют KV-кэш, при возобновлении продолжают с места остановки; после аппаратного сбоя KV-кэш восстанавливают, заново прогоняя prefill по сохранённым токенам. Перегенерировать незаконченные запросы с нуля математически неверно — это испортило бы распределение выборок.

По собственной сводке авторов:

  • Знания. V4-Pro-Max (режим максимального усилия рассуждений) заметно обходит открытые модели на SimpleQA и Chinese-SimpleQA, слегка лидирует на MMLU-Pro, HLE и GPQA среди открытых, но всё ещё уступает Gemini-3.1-Pro.
  • Рассуждения. V4-Pro-Max лучше GPT-5.2 и Gemini-3.0-Pro, немного хуже GPT-5.4 и Gemini-3.1-Pro. Авторы оценивают отставание от переднего края в 3–6 месяцев. V4-Flash-Max сравним с GPT-5.2 и Gemini-3.0-Pro — при заметно меньшей стоимости.
  • Агенты. На публичных бенчмарках V4-Pro-Max на уровне лучших открытых моделей (Kimi-K2.6, GLM-5.1) и чуть хуже закрытых лидеров.
  • Длинный контекст. На MRCR деградация заметна после 128K, но на 1M поиск всё ещё работает хорошо; на более приближенном к жизни CorpusQA V4-Pro оказывается лучше Gemini-3.1-Pro.

Ограничения, которые авторы называют сами:

  • Архитектура усложнилась. Ради снижения риска сохранено много предварительно проверенных компонентов и приёмов. В следующих версиях обещают «дистиллировать» архитектуру до самого необходимого.
  • Нестабильность понята не до конца. Anticipatory Routing и SwiGLU Clamping работают, но почему — объяснения нет; обещают заняться основаниями устойчивости обучения.
  • Дальше в планах: разреженность по новым осям (например, более разреженные модули эмбеддингов), архитектуры с низкой задержкой, долгие многошаговые агентные задачи, мультимодальность.
  1. Посчитайте сжатие. Для контекста 1M прикиньте, сколько записей KV остаётся в слое CSA (m=4m = 4) и в слое HCA (m′=128m' = 128), и сравните с одной записью на токен. Проверьте, что числа согласуются с «10% кэша от V3.2».
  2. Сделайте сжатие по оси токенов. На NumPy реализуйте блочное сжатие: веса через softmax по 2m2m элементам, обучаемые позиционные смещения, суммирование по Адамару. Сравните с простым усреднением по окну.
  3. Проверьте дважды стохастическую матрицу. Возьмите случайную неотрицательную матрицу 4×4, примените 20 итераций Синкхорна (поочерёдная нормировка строк и столбцов) и убедитесь, что спектральная норма не превышает 1.
  4. Повторите итерации Ньютона — Шульца. Сравните, как сходятся сингулярные числа при коэффициентах «быстрых» и «стабилизирующих» шагов (практика — урок 5.4.4).
ENRU
Compressed Sparse Attention (CSA)сжатое разреженное внимание
Heavily Compressed Attention (HCA)сильно сжатое внимание
compression rateкоэффициент сжатия
sliding window attention (SWA)внимание скользящим окном
grouped output projectionгрупповая выходная проекция
Manifold-Constrained Hyper-Connections (mHC)гиперсвязи с ограничением на многообразие
doubly stochastic matrix, Birkhoff polytopeдважды стохастическая матрица, многогранник Биркгофа
Sinkhorn-Knopp iterationsитерации Синкхорна — Кноппа
non-expansive mappingнерастягивающее отображение
Newton-Schulz iterations, orthogonalizationитерации Ньютона — Шульца, ортогонализация
anticipatory routingупреждающая маршрутизация
clampingзажим (ограничение диапазона)
on-policy distillation (OPD)дистилляция на собственных траекториях
reverse KL, full-vocabulary logitsобратная KL, логиты по всему словарю
quantization-aware training (QAT)обучение с учётом квантования
write-ahead log (WAL)журнал упреждающей записи
test-time scalingмасштабирование во время ответа