Техотчёт 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-Clip | 5.4.4 «Оптимизаторы и стабильность» |
| §3 Infrastructures | слитые ядра MoE, TileLang, детерминированные ядра, KV-кэш на диске | 5.7.3, 7.1.2 |
| §4.2.3 | как лечили скачки loss: Anticipatory Routing, SwiGLU Clamping | 5.4.4 |
| §5.1 | специалисты и on-policy distillation | 6.4.4 «Дистилляция рассуждений» |
| §5.2.1 | FP4 QAT и почему FP4 → FP8 без потерь | 5.4.1, 7.2.1 |
Зачем вообще миллион токенов
Заголовок раздела «Зачем вообще миллион токенов»Логика отчёта: рассуждающие модели дали масштабирование во время ответа (test-time scaling) — качество растёт, если позволить модели думать дольше. Но думать дольше — значит порождать больше токенов, а у обычного внимания сложность квадратичная. Плюс появились задачи с длинным горизонтом: агентные рабочие процессы, анализ больших наборов документов. Значит, упираемся в ту же стену с двух сторон, и лечить надо архитектуру.
Гибридное внимание: CSA и HCA
Заголовок раздела «Гибридное внимание: CSA и HCA»Общая идея — сжимать KV-кэш по оси последовательности: вместо записи на каждый токен хранить одну запись на несколько токенов. Дальше два разных компромисса, которые чередуются по слоям.
CSA: сжать в 4 раза и выбрать top-k
Заголовок раздела «CSA: сжать в 4 раза и выбрать top-k»- Сжатие. Из скрытых состояний считаются две серии записей KV (, ) и два набора весов сжатия (, ). Каждые записи сворачиваются в одну: веса проходят через softmax вместе с обучаемыми позиционными смещениями, и записи складываются с этими весами. Хитрость в том, что окна и сдвинуты и перекрываются: сжатая запись собирается из исходных, но соседние сжатые записи делят часть исходных между собой. Длина последовательности при этом всё равно сокращается ровно в раз.
- Отбор. К сжатым записям применяется тот же DeepSeek Sparse AttentionDeepSeek Sparse Attention (DSA)EN DeepSeek Sparse Attention (DSA)Разреженное внимание DeepSeek-V3.2 — дешёвый индексатор выбирает 2048 прошлых токенов для каждого запроса, полное MLA считается только по ним. Позже взято в GLM-5., что в V3.2: молниеносный индексатор считает оценки с ReLU и выбирает top-k сжатых блоков (у Pro , у Flash ).
- Внимание в режиме MQA. Каждая сжатая запись служит и ключом, и значением сразу для всех голов запроса.
- Групповая выходная проекция. Голов много ( у Pro), и прямая проекция их объединённого выхода в была бы дорогой. Выходы делят на групп (16 у Pro), каждую группу проецируют в промежуточную размерность 1024, и только потом — в скрытое состояние.
HCA: сжать в 128 раз, но смотреть на всё
Заголовок раздела «HCA: сжать в 128 раз, но смотреть на всё»HCA устроена так же, но с компрессией , без перекрытия окон и без разреженного отбора: внимание по сжатым записям плотное. Логика очевидна: после сжатия в 128 раз записей и так мало, экономить отбором нечего.
Чтобы не терять мелкие детали рядом с текущим токеном, рядом с HCA работает скользящее окно шириной 128 токенов с несжатыми записями.
flowchart TD T["Поток токенов"] --> C1["Слой CSA: сжатие x4 (перекрывающиеся окна) → индексатор → top-k → MQA"] C1 --> C2["Слой HCA: сжатие x128 + окно 128 несжатых → плотное MQA"] C2 --> C3["Слой CSA ..."] C3 --> C4["Слой HCA ..."]
Почему это так сильно экономит
Заголовок раздела «Почему это так сильно экономит»Четыре источника экономии, которые авторы перечисляют в §2.3.4:
- Смешанная точность хранения KV. Измерения RoPE — в BF16, остальные — в FP8. Это почти вдвое меньше, чем чистый BF16.
- Индексатор в FP4. Поиск top-k ускоряется там, где он больнее всего — на очень длинных контекстах.
- Меньший top-k, чем у V3.2 (1024 и 512 против 2048) — выигрыш на коротких и средних текстах.
- Само сжатие — главный вклад.
Итог в цифрах на контексте 1M относительно V3.2: V4-Pro — 27% вычислений на токен (в пересчёте на эквивалентные FP8-операции) и 10% KV-кэша; V4-Flash — 10% и 7%. Относительно типового BF16 GQA-8 с головой 128 кэш V4 — около 2%.
mHC: остаточный поток, который не взрывается
Заголовок раздела «mHC: остаточный поток, который не взрывается»Гиперсвязи (hyper-connections, HC) расширяют остаточный поток в раз: вместо вектора между блоками течёт матрица . Три обучаемых отображения — вход , остаток и выход — задают обновление
где — обычный слой (внимание или MoE), которому по-прежнему подаётся -мерный вектор. Расширение потока — новая ось масштабирования, почти бесплатная, потому что . Но при складывании многих слоёв обучение регулярно разваливалось численно.
Решение mHC — загнать матрицу на многообразие дважды стохастических матриц (многогранник Биркгофа): все элементы неотрицательны, суммы по строкам и по столбцам равны единице. У такой матрицы спектральная норма не превышает 1, то есть преобразование не растягивает сигнал; к тому же произведение дважды стохастических матриц снова дважды стохастическое — значит, устойчивость сохраняется на любой глубине. Отображения и дополнительно делают неотрицательными и ограниченными через сигмоиду, чтобы сигналы не гасили друг друга.
Параметры трёх отображений генерируются динамически: складываются зависящая от входа часть (из нормированного развёрнутого ) и статическая обучаемая часть. Дважды стохастической матрицу делает проекция Синкхорна — Кноппа (20 итераций).
В конфигурации V4: .
Muon и борьба с нестабильностью
Заголовок раздела «Muon и борьба с нестабильностью»Muon применяется ко всем параметрам, кроме эмбеддингов, предсказывающей головы, статических смещений и гейтов mHC и весов RMSNorm — там остаётся AdamW. Шаг Muon: накопить момент, применить трюк Нестерова, ортогонализовать матрицу обновления итерациями Ньютона — Шульца, нормировать её RMS и применить к весам вместе с weight decay.
Деталь, которой нет у других: гибридные итерации. Всего 10 итераций вида . Первые 8 с коэффициентами — быстро подтягивают сингулярные числа к единице; последние 2 с коэффициентами — аккуратно их там фиксируют.
Ещё одно следствие архитектуры: раз запросы и записи KV можно прямо нормировать через RMSNorm, оценки внимания не взрываются, и приём QK-Clip (его придумали в Kimi K2 как раз против взрыва логитов при Muon) не нужен.
Два приёма против скачков loss, которые авторы честно называют «работают, но до конца не поняты»:
- Anticipatory Routing («упреждающая маршрутизация»). При скачке loss систему переключают в режим, где признаки считаются текущими параметрами , а маршруты экспертов берутся от старых параметров : индексы маршрутизации вычисляются заранее, на шаге , и кэшируются. Накладные расходы около 20% по времени, но включается режим автоматически и ненадолго — при обнаружении скачка, с коротким откатом назад, а потом система возвращается к обычному обучению.
- SwiGLU Clamping. Линейная часть SwiGLU зажимается в диапазон , гейт ограничивается сверху значением 10. Это убирает выбросы и стабилизирует обучение без потери качества.
Конфигурации
Заголовок раздела «Конфигурации»| V4-Flash | V4-Pro | |
|---|---|---|
| Слоёв | 43 | 61 |
| 4096 | 7168 | |
| Первые слои | чистое скользящее окно (2 слоя) | HCA (2 слоя) |
| Дальше | чередование CSA и HCA | чередование CSA и HCA |
| CSA: сжатие , top-k | 4, 512 | 4, 1024 |
| HCA: сжатие | 128 | 128 |
| Голов запроса , размер головы | 64, 512 | 128, 512 |
| Экспертов на слой | 1 общий + 256 маршрутизируемых, активны 6 | 1 общий + 384, активны 6 |
| Промежуточная размерность эксперта | 2048 | 3072 |
| Глубина MTP | 1 | 1 |
| mHC: , итераций Синкхорна | 4, 20 | 4, 20 |
| Параметры (всего / активных) | 284 млрд / 13 млрд | 1,6 трлн / 49 млрд |
| Токенов претрейна | 32 трлн | 33 трлн |
Любопытная деталь: в первых трёх MoE-слоях используется хеш-маршрутизация — эксперт выбирается по фиксированной таблице, а не обучаемым роутером. Балансировка — как в V3, смещениями без вспомогательного лосса (скорость обновления смещений 0,001) плюс очень слабый лосс баланса (вес 0,0001) против перекоса внутри одной последовательности.
Расписание обучения V4-Flash: батч растёт до 75,5 млн токенов, learning rate держится почти всё обучение и в конце косинусом спадает до . Длина последовательности растёт поэтапно: 4K → 16K → 64K → 1M. Первый триллион токенов модель учится с плотным вниманием; разреженность включают на длине 64K, предварительно разогрев индексатор CSA — тот же приём, что в V3.2.
Пост-трейнинг: десяток специалистов в одной модели
Заголовок раздела «Пост-трейнинг: десяток специалистов в одной модели»Схема в два шага.
- Специалисты. Для каждой области (математика, код, агенты, следование инструкциям и др.) из базовой модели обучается отдельный эксперт: сначала SFT на качественных данных области, потом RL по GRPO со своими моделями наград.
- On-policy distillation (OPD). Одна модель-ученик учится воспроизводить распределения учителей на своих собственных траекториях: Обратная KL (ученик в первом аргументе) и генерация ответов учеником — это и означает «on-policy». Ученик сам выбирает, у кого учиться в каждом контексте: на математической задаче сближается с математическим экспертом, на коде — с программистским. Учителей больше десяти.
Важное инженерное решение: KL считают по полному словарю логитов, а не по одному токену. Упрощённый вариант (когда логарифм отношения вероятностей подставляют как преимущество в RL-лосс) дешевле, но даёт высокую дисперсию градиента и нестабильность.
Чтобы это стало возможным при десятке учителей на триллионы параметров: веса учителей лежат в распределённом хранилище и подгружаются по требованию с шардированием как в ZeRO; материализовать логиты для словаря в 100 тыс. слов для всех учителей нереально, поэтому кэшируются только скрытые состояния последнего слоя, а логиты восстанавливаются на лету предсказывающей головой; примеры в батче упорядочены по учителю, так что голова каждого учителя загружается в память ровно один раз; сама KL считается специальным ядром на TileLang.
FP4 с учётом квантования
Заголовок раздела «FP4 с учётом квантования»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 работают, но почему — объяснения нет; обещают заняться основаниями устойчивости обучения.
- Дальше в планах: разреженность по новым осям (например, более разреженные модули эмбеддингов), архитектуры с низкой задержкой, долгие многошаговые агентные задачи, мультимодальность.
Что сделать руками
Заголовок раздела «Что сделать руками»- Посчитайте сжатие. Для контекста 1M прикиньте, сколько записей KV остаётся в слое CSA () и в слое HCA (), и сравните с одной записью на токен. Проверьте, что числа согласуются с «10% кэша от V3.2».
- Сделайте сжатие по оси токенов. На NumPy реализуйте блочное сжатие: веса через softmax по элементам, обучаемые позиционные смещения, суммирование по Адамару. Сравните с простым усреднением по окну.
- Проверьте дважды стохастическую матрицу. Возьмите случайную неотрицательную матрицу 4×4, примените 20 итераций Синкхорна (поочерёдная нормировка строк и столбцов) и убедитесь, что спектральная норма не превышает 1.
- Повторите итерации Ньютона — Шульца. Сравните, как сходятся сингулярные числа при коэффициентах «быстрых» и «стабилизирующих» шагов (практика — урок 5.4.4).
Словарик
Заголовок раздела «Словарик»| EN | RU |
|---|---|
| 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 | масштабирование во время ответа |