论文阅读:DeepSeek-V4
这篇技术报告的完整标题是 DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence。
DeepSeek-V4 技术报告发布的是一组预览版 MoE 语言模型:DeepSeek-V4-Pro 和 DeepSeek-V4-Flash。二者都支持 100 万 token 上下文,其中 Pro 为 1.6T 总参数、49B 激活参数,Flash 为 284B 总参数、13B 激活参数。报告的核心目标不是单纯扩大模型规模,而是在超长上下文和长链路推理场景中降低注意力计算、KV cache 和系统调度成本。
一句话概括:DeepSeek-V4 用 CSA/HCA 混合注意力 降低百万 token 上下文的计算和缓存开销,用 mHC 增强残差通路的表达与稳定性,用 Muon 改进大规模训练,再通过一套围绕 MoE、长上下文、OPD 和 agent 任务构建的基础设施,把这些设计落到训练与推理系统中。
1. 背景:百万 token 上下文的瓶颈
推理模型的发展把 test-time scaling 变成了重要方向。模型可以在测试时消耗更多 token 做更长的推理,也可以在 agent、代码、搜索、多文档分析等任务中维护更长的工作上下文。但标准 attention 的计算复杂度随序列长度平方增长,KV cache 也随上下文长度持续扩张。上下文从 128K 继续推到 1M 时,这两个因素会直接限制训练、推理和部署。
DeepSeek-V4 的设计围绕这个限制展开。报告给出的关键对比是:在 1M token 上下文下,DeepSeek-V4-Pro 的单 token 推理 FLOPs 约为 DeepSeek-V3.2 的 27%,KV cache 约为 10%;DeepSeek-V4-Flash 进一步降到约 10% FLOPs 和 7% KV cache。这个结果来自模型架构、低精度计算与缓存管理的共同作用,而不是单一技巧。
2. 整体架构
DeepSeek-V4 仍然是 Transformer + MoE 架构,并继承了 DeepSeek-V3 中的 DeepSeekMoE 和 Multi-Token Prediction(MTP)。主要新增设计有三类:
- mHC:用 Manifold-Constrained Hyper-Connections 替代普通相邻层残差连接,增加残差通路宽度,同时用双随机矩阵约束稳定信号传播。
- CSA/HCA 混合注意力:用 Compressed Sparse Attention 和 Heavily Compressed Attention 替代标准长上下文 attention,降低超长序列的 FLOPs 和 KV cache。
- Muon 优化器:大部分模块使用 Muon,部分模块仍使用 AdamW,以获得更快收敛和更好的训练稳定性。
这些名字不都是 DeepSeek-V4 从零提出的全新方法。更准确地说,DeepSeek-V4 是把已有方向、已有方法和本报告中的新设计组合成一个面向百万 token 上下文的完整系统:
| 技术 | 来源关系 | 在 DeepSeek-V4 中的作用 |
|---|---|---|
| DeepSeekMoE | DeepSeek 系列已有 MoE 架构 | 作为 FFN/MoE 主体,继续提供稀疏专家计算 |
| MTP | DeepSeek-V3 已使用的 Multi-Token Prediction | 作为辅助训练目标,提高生成建模效率 |
| mHC | 基于 Hyper-Connections 方向,报告引用了独立的 mHC 工作 | 替换普通残差连接,扩展残差流并增强深层稳定性 |
| Muon | 已有优化器方法,报告引用 Jordan et al. 和 Liu et al. | 用于大部分矩阵参数更新,改善收敛和稳定性 |
| CSA/HCA | DeepSeek-V4 报告中的混合注意力设计 | 直接服务于 1M context,降低 attention FLOPs 和 KV cache |
| OPD | 已有 on-policy distillation 范式 | 用来把多个领域专家模型合并为一个统一模型 |
MoE 部分保留 fine-grained routed experts 和 shared experts。与 DeepSeek-V3 相比,报告提到几个调整:routing affinity 的激活从 Sigmoid 改为 Sqrt(Softplus);继续使用 auxiliary-loss-free 的负载均衡策略,并加入较小的 sequence-wise balance loss,避免单个序列内部极端不均衡;前若干层的 dense FFN 被替换成采用 Hash routing 的 MoE 层。
Flash 和 Pro 的规模差异如下:
| 模型 | 层数 | hidden size | 总参数 | 激活参数 | routed experts | 每 token 激活 experts |
|---|---|---|---|---|---|---|
| DeepSeek-V4-Flash | 43 | 4096 | 284B | 13B | 256 | 6 |
| DeepSeek-V4-Pro | 61 | 7168 | 1.6T | 49B | 384 | 6 |
二者都设置 1 个 shared expert,MTP depth 为 1,mHC expansion factor 为 4,Sinkhorn-Knopp 迭代次数为 20。
注意力层的排布也不完全相同。Flash 的前两层使用 pure sliding window attention,Pro 的前两层使用 HCA,后续层再交错使用 CSA 和 HCA。CSA 的 indexer query heads 都是 64,indexer head dimension 都是 128,但 sparse attention 的 top-k 不同:Flash 为 512,Pro 为 1024。主 attention 的 query heads 分别为 64 和 128,head dimension 都是 512;query compression dimension 分别为 1024 和 1536;grouped output projection 的组数分别为 8 和 16。
3. mHC:把残差流扩展成可控的多通道状态
mHC 的全称是 Manifold-Constrained Hyper-Connections。它不是普通 attention 或 MoE 模块,而是作用在 Transformer 层与层之间的残差连接上。它要解决的问题是:模型变深、残差通路变复杂以后,如何在不直接增大 hidden size 的情况下增强层间信息流,同时避免残差映射在深层堆叠中放大信号、造成训练不稳定。报告中的 mHC 基于 Hyper-Connections 这一类方法,并通过“流形约束”把残差混合矩阵限制在稳定的双随机矩阵集合中。
它的预期效果有两类。表达能力上,残差流从一个通道扩展成多个通道,模型可以在层间保留和混合更多中间状态。稳定性上,残差混合矩阵被约束为 non-expansive,降低深层训练中信号爆炸或梯度异常的风险。DeepSeek-V4 报告把 mHC 作为增强模型能力和稳定性的架构升级,而不是专门为降低长上下文计算量设计的模块。
普通 Transformer 的残差连接可以近似理解为:
其中 是第 层输入, 是 attention 或 MoE/FFN 子层。这个结构简单稳定,但残差流只有一个 维通道。Hyper-Connections(HC)的想法是把残差流扩展为 个通道:
实际进入 Transformer 子层的仍然是一个 维向量,不需要改变 attention 或 MoE 内部结构。HC 通过一个输入映射 把多通道残差流压回 维:
然后子层 处理这个输入,再通过输出映射 写回多通道残差状态。完整更新式是:
这里 控制旧残差状态在多个通道之间如何混合, 控制当前层输出写入哪些残差通道。这样做的价值是提供了一条额外的 scaling axis:不直接增大 hidden size ,而是增加残差流的宽度 。DeepSeek-V4 中 。
朴素 HC 的问题是稳定性。层数很深时, 如果没有约束,连续相乘可能放大残差信号,前向和反向都容易不稳定。mHC 的核心改动就是约束 属于双随机矩阵集合:
双随机矩阵的每一行、每一列和都为 1,且元素非负。报告强调这个约束会使 ,因此残差映射是 non-expansive 的。直观理解是: 只能重新分配和混合残差通道中的信息,不能任意放大它。双随机矩阵集合还对矩阵乘法封闭,深层堆叠时多个 连乘仍然保持这种稳定性质。
mHC 的 不是简单的静态参数,而是由输入动态生成。具体做法是先把 展平成向量,再做 RMSNorm:
然后用三组线性投影生成未经约束的参数:
这里可以看到两部分: 生成 input-dependent 的动态项, 是 input-independent 的静态项, 是可学习 gate,并且初始化为较小值。这样的设计使 mHC 早期更接近稳定的静态连接,训练中再逐步学习输入相关的残差混合。
约束分两类施加。 和 用 Sigmoid 保证非负且有界:
则通过 Sinkhorn-Knopp 投影到双随机矩阵流形。先取指数保证正值:
然后反复做列归一化和行归一化:
DeepSeek-V4 使用 20 次迭代,得到 。所以 mHC 的具体实现不是“加一个更复杂的残差连接”,而是“动态生成残差混合矩阵,再把它投影到稳定的双随机矩阵集合中”。
工程上,mHC 会带来两个代价。第一,残差状态从 扩展到 ,activation memory 变大。第二,pipeline stage 之间需要传递更宽的残差状态,通信量变大。报告的处理方式包括 fused mHC kernel、选择性 recomputation、以及调整 DualPipe 1F1B overlap。具体 recomputation 策略是重算大多数层间 hidden states 和所有 normalized layer inputs,但避免重算计算量大的操作。最终 mHC 的 wall-time overhead 被控制在 overlapped 1F1B pipeline stage 的 6.7%。
4. CSA/HCA:把百万 token attention 拆成压缩、索引和局部补偿
CSA/HCA 是 DeepSeek-V4 报告中最直接服务于百万 token context 的架构设计。它们处理的是 attention 的两个核心成本:计算量和 KV cache。标准 attention 在长序列上需要让 query 访问大量历史 key/value,序列越长,attention FLOPs 和 KV cache 压力越大。CSA/HCA 的共同思路是先把历史 KV 沿序列维度压缩,再在压缩后的表示上做 attention。
这组设计不是凭空出现的。CSA 继承了稀疏 attention 的思想,并明确使用 DeepSeek Sparse Attention(DSA)的 top-k 选择策略;HCA 则更接近“高倍率压缩后的全局 dense attention”。DeepSeek-V4 的新意在于把两类 attention 交错放进同一个模型:CSA 保留较细粒度的历史检索能力,HCA 以更低成本维持全局上下文。二者再配合 sliding window branch,弥补压缩对局部细节的损失。
DeepSeek-V4 的长上下文效率主要来自这套混合注意力。CSA 和 HCA 都先压缩 KV cache,但压缩率和后续 attention 方式不同。CSA 是“较小压缩率 + sparse top-k 选择”,HCA 是“很大压缩率 + 压缩后 dense attention”。两者交错使用,避免模型只依赖一种长上下文近似。
4.1 CSA:先压缩,再稀疏选择
Compressed Sparse Attention(CSA)的流程可以分成三步。
第一步是压缩 KV entries。设输入 hidden states 为 。CSA 不直接从 生成一组 KV,而是生成两组 KV entries 和两组 compression weights:
其中 , 是 head dimension。对第 个 compressed entry,CSA 使用当前块的 和前一个块的 ,一共 个 KV entries。它先把对应的 加上可学习位置偏置 ,再在这 个位置上做 softmax,得到 compression weights:
然后做加权求和:
这个式子说明两点。第一,压缩不是平均池化,而是每个维度都有模型学习出的加权汇聚。第二,CSA 使用了重叠压缩:每个 compressed entry 来自 个 KV entries,但相邻 compressed entries 使用的 区间有重叠。因此它既引入一些跨块连续性,又把序列长度压缩到原来的 。DeepSeek-V4 中 。
第二步是 lightning indexer。CSA 不是让 query 对所有 compressed KV 做 attention,而是先选择 top-k compressed blocks。它对 compressed KV 使用同样的压缩操作生成 indexer keys 。对 query token ,先把 hidden state 下投影成 latent query:
再上投影成多头 indexer queries:
同时,模型从 生成每个 indexer head 的权重:
query token 与历史 compressed block 的 index score 为:
这里的 ReLU 表示只有正相关部分进入得分, 让不同 indexer head 的贡献由当前 token 动态加权。得到 后,CSA 只保留 top-k compressed KV entries。Flash 的 top-k 为 512,Pro 的 top-k 为 1024。
第三步是 shared-KV MQA。被选中的 compressed KV entries 同时作为 key 和 value,query 则复用前面 latent query 上投影得到:
然后对 selected compressed KV 做 core attention:
这里的一个关键点是 compressed KV entry 同时当 key 和 value,因此是 shared key-value MQA。它减少了 KV 表示和缓存复杂度。由于 DeepSeek-V4 中 很大,如果直接把所有 head 输出一次性投影回 维,成本会很高。报告因此使用 grouped output projection:先把 个 heads 分成 组,每组从 投影到 维,再把所有组的中间输出合并投影成最终 attention 输出。Flash 的 ,Pro 的 。
4.2 HCA:更重压缩,但保持 dense attention
Heavily Compressed Attention(HCA)使用更大的压缩率 。它不做 CSA 那样的 sparse top-k 选择,而是在更短的 compressed sequence 上做 dense attention。
HCA 的压缩更简单,不使用 CSA 的重叠双分支。它先生成:
然后每 个 KV entries 压成一个 compressed entry:
所以 HCA 的序列长度变为原来的 。当 时,1M token 的全局历史会被压成约 8192 个 compressed entries。这个长度上再做 dense attention 就可行得多。
这是一种不同的取舍。CSA 保留较细粒度的 compressed blocks,再通过 indexer 选择相关块;HCA 牺牲更多 token-level 粒度,把长历史压得更短,然后在压缩后的序列上完整注意。二者交错使用,让模型同时获得较强的长程检索能力和更低的全局上下文成本。
4.3 保留局部细节
压缩 attention 有一个自然问题:当前 token 无法看到同一压缩块中还未形成完整 compressed block 的细节,而近期 token 在语言建模中通常最重要。DeepSeek-V4 因此为 CSA 和 HCA 都加入额外的 sliding window attention 分支,窗口大小 。这个分支保留最近 128 个 token 的未压缩 KV entries,用于建模局部依赖。
这个设计很重要。CSA/HCA 的核心 attention 为了保持因果性,只能看当前 token 之前已经形成的 compressed KV blocks。如果当前 token 所在压缩块还没有完成,块内其他 token 的细节不能通过 compressed branch 访问。sliding window branch 直接保留最近 个 token 的 uncompressed KV,把局部建模从压缩机制里独立出来。
报告还提到几个稳定性和位置处理细节:
- query 和 compressed KV entry 在核心 attention 前做额外 RMSNorm,避免 attention logits 爆炸;
- 对 query、KV entry 和 core attention output 的最后 64 维使用 RoPE;
- 使用 attention sink,使每个 attention head 的总 attention score 可以不严格等于 1,甚至接近 0;
- KV cache 存储采用混合精度:RoPE 维度使用 BF16,其余维度使用 FP8;
- CSA indexer 的 attention 计算使用 FP4。
RoPE 的处理尤其值得注意。因为 compressed KV entry 同时作为 key 和 value,如果只对 KV entry 加 RoPE,那么 attention 输出会带着 value 中混入的绝对位置信息。报告的做法是在 core attention output 的最后 64 维再施加位置 的 RoPE,使输出携带相对位置信息,而不是简单保留 value 的绝对位置。
attention sink 的公式是在 softmax 分母中额外加入一个可学习项:
这样每个 head 的注意力总和可以小于 1。模型可以选择“少关注任何历史块”,这对稀疏/压缩 attention 有意义,因为被选中的历史信息不一定总是有用。
相对于常见 BF16 GQA8、head dimension 128 的 attention 配置,报告称 DeepSeek-V4 在 1M context 下的 KV cache 可以降到约 2%。
5. Muon:用于大部分模块的优化器
Muon 不是 DeepSeek-V4 首次提出的优化器。报告引用了已有的 Muon 相关工作,并把它应用到 DeepSeek-V4 的大规模 MoE 训练中。它解决的问题和 AdamW 不同:AdamW 主要对每个参数元素做自适应更新,而 Muon 把矩阵参数作为一个整体处理,对更新矩阵做近似正交化。
这种设计的目标是让矩阵更新在不同方向上更均衡,减少某些奇异方向过度放大或过度衰减,从而改善大模型训练的收敛速度和稳定性。DeepSeek-V4 中,Muon 主要用于矩阵形状明确、适合整体正交化的参数;embedding、prediction head、RMSNorm 权重,以及 mHC 的静态 bias 和 gating factors 仍然使用 AdamW。 报告中的 Muon 每一步大致如下。
对一个逻辑独立的矩阵参数 ,先计算梯度:
再更新 momentum buffer:
然后使用 Nesterov 形式,把 送入 HybridNewtonSchulz:
Newton-Schulz 的目标是把矩阵 近似正交化。若 ,理想结果是 。这会保留更新方向中的行/列空间结构,同时把奇异值推向 1,避免某些方向更新过大或过小。报告先把输入矩阵按 Frobenius norm 归一化,再迭代:
DeepSeek-V4 使用 10 次 hybrid Newton-Schulz。前 8 次系数为 ,用于快速把奇异值推近 1;最后 2 次系数为 ,用于稳定在 1 附近。
得到 后,还要按矩阵尺寸和 update rescaling factor 缩放:
最后更新权重:
这个过程解释了为什么 Muon 与普通 ZeRO 不完全兼容。Muon 的正交化需要看到完整矩阵,如果 ZeRO 随意把一个矩阵切成多个 shard,每个 rank 就无法独立计算正确的 Newton-Schulz 更新。
Muon 与 ZeRO 的结合需要特别处理。因为 Muon 要看到完整梯度矩阵,而传统 ZeRO 更适合 AdamW 这类 element-wise optimizer。报告的方案是 hybrid ZeRO bucket assignment:dense 参数限制 ZeRO 并行规模并用 knapsack 做负载均衡;MoE 参数按 expert 中逻辑独立矩阵组织,不切开单个矩阵;相同形状的连续参数会自动合并,批量执行 Newton-Schulz。MoE 梯度同步还会随机舍入到 BF16,以减半通信量,再用 all-to-all 加本地 FP32 求和避免低精度累加误差。
6. 训练设置与稳定性
预训练数据在 DeepSeek-V3 数据基础上继续扩展,重点包括数学、代码、网页、长文档和多语言数据。报告特别强调长文档数据,例如科学论文和技术报告。总训练 token 数超过 32T:Flash 训练 32T token,Pro 训练 33T token。tokenizer 继承 DeepSeek-V3,词表大小仍为 128K,并加入少量用于上下文构造的特殊 token。
训练从 4K sequence length 开始,逐步扩展到 16K、64K 和 1M。稀疏 attention 不是一开始就启用:模型先用 dense attention warmup,之后在 64K 阶段引入 sparse attention,并先短暂 warmup CSA 的 lightning indexer,再进入主要 sparse attention 训练阶段。
大规模 MoE 训练中,报告遇到的主要问题是 loss spike。作者观察到 spike 与 MoE 层中的 outliers 相关,routing 机制会加剧这些 outliers。报告提出两个实用技巧:
Anticipatory Routing:在 step 使用当前参数计算 feature,但 routing indices 来自历史参数 。实现上提前取 step 的数据,在 step 预先计算 routing indices 并缓存。系统会在检测到 loss spike 后短暂 rollback 并启用该模式,一段时间后恢复标准训练。单独启用时 wall-clock overhead 约 20%,但动态触发后总体额外开销很小。
SwiGLU Clamping:对 SwiGLU 的 linear component 限制到 ,gate component 上界限制为 10。报告称这能有效消除 outliers,并且没有观察到性能损失。
长上下文训练还需要处理 context parallelism。传统 CP 按序列维度切分,每个 rank 保存连续的 个 token。CSA/HCA 会遇到两个问题。第一,样本 pack 后每条 sequence 要独立压缩,长度不足 或 的尾部会被丢弃,因此不同 rank 的 compressed KV 长度不一致。第二,压缩需要连续 个 KV entries,压缩窗口可能跨过两个 CP rank 的边界。
DeepSeek-V4 的方案是两阶段通信。第一阶段,每个 rank 把自己的最后 个未压缩 KV entries 发给 rank ,这样后一个 rank 可以和本地 token 一起完成跨边界压缩,并产生固定长度的 compressed entries,其中可能包含 padding。第二阶段,所有 CP ranks 做 all-gather,收集局部 compressed KV entries,再用 fused select-and-pad operator 整理成全局 compressed KV 序列,把 padding 放到尾部。HCA 和 CSA indexer 的可见范围可以按规则预先计算;CSA sparse attention 的可见块则由 top-k selector 明确给出。
activation checkpointing 也做了更细粒度扩展。常规 checkpointing 以 module 为单位决定保留还是重算,粒度太粗。DeepSeek-V4 允许开发者在 forward 中标注单个 tensor 是否 checkpoint/recompute。框架用 TorchFX trace 计算图,对每个标注 tensor 反向追踪出最小 recomputation subgraph,在 backward 中需要梯度前插入重算。重算时直接释放原 tensor 的 GPU memory,并让重算结果复用 storage pointer,避免 GPU memory copy。对于 reshape 这类共享 storage 的 tensor,框架还能自动去重。
报告还有一组不直接改变模型结构、但决定模型能否高效训练和部署的基础设施。
Fine-Grained EP:MoE 层主要由 Dispatch、Linear-1、Activation、Linear-2、Combine 几段组成,其中 Dispatch/Combine 偏通信,Linear-1/Linear-2 偏计算。DeepSeek-V4 把专家拆成多个 wave,在一个 fused kernel 中让当前 wave 的计算、下一 wave 的 token 传输、已完成 wave 的结果回传同时进行。报告给出的结果是:相比强 non-fused baseline,一般推理 workload 加速 1.50 到 1.73 倍;在 RL rollout 和高吞吐 agent serving 这类小 batch、长尾明显的场景中最高加速 1.96 倍。作者还强调,MoE 通信是否能被隐藏不只取决于带宽,而取决于计算量和通信量的比例;对 DeepSeek-V4-Pro,每个 token-expert pair 的条件可以化简为 FLOPs/Byte。
TileLang 与 fused kernels:复杂架构如果直接落成 Torch ATen operators,会产生大量细粒度算子和调度开销。DeepSeek-V4 使用 TileLang 开发 fused kernels,并通过 Host Codegen 把运行时检查、参数封送等 host-side 逻辑从 Python 路径移到生成的 host launcher 中,使 CPU 侧 validation overhead 从数十或数百微秒降到小于 1 微秒。TileLang 还把 Z3 SMT solver 接入整数表达式分析,用于 layout inference、memory hazard detection、bound analysis、vectorization 和 barrier insertion 等编译优化。
Batch-invariant 与 deterministic kernels:报告把可复现性当成基础设施目标,而不只是调试便利。batch invariance 要求同一个 token 的输出不随它在 batch 中的位置变化而发生 bit-level 差异;determinism 则要求训练 backward 中的累加顺序稳定,避免 atomicAdd 等操作带来的非确定性。DeepSeek-V4 因此为 attention、matrix multiplication、MoE backward 和 mHC 中的小矩阵乘法实现了专门 kernel 或规约策略。这样做的代价是实现更复杂,但它能让 pre-training、post-training 和 inference 之间更容易保持 bitwise alignment,也能在 loss spike 出现时更容易复现实验状态。
7. 推理系统:异构 KV cache 与磁盘缓存
DeepSeek-V4 的 KV cache 结构比标准 PagedAttention 更复杂。原因是 CSA、HCA、SWA 和 CSA indexer 产生的缓存大小、更新频率和 eviction policy 都不同。报告因此把缓存分为两类:
- classical KV cache:存放 CSA/HCA 的 compressed KV entries;
- state cache:存放 SWA 的最近窗口 KV,以及 CSA/HCA 中尚未形成完整压缩块的 uncompressed tail states。
对每个 request,state cache 使用固定大小的 sequence-specific state。classical KV cache 则按 block 管理。为了让 CSA 的压缩率 和 HCA 的压缩率 对齐,每个 block 覆盖的原始 token 数可以取 lcm(m, m') 的倍数。
这里的关键是 DeepSeek-V4 破坏了 PagedAttention 的一个隐含假设:不同层、不同 attention 类型的 KV cache 可以用统一 page/block 规则管理。但在 DeepSeek-V4 中,CSA main KV、CSA indexer KV、HCA KV、SWA KV 和 uncompressed tail states 的形状与生命周期都不同。CSA/HCA 每隔 或 个 token 才产生 compressed KV;当前不足一个压缩块的 tail tokens 不能丢,因为后续还要参与压缩;SWA 只关心最近窗口,eviction policy 又与 compressed KV 不同。
因此 state cache 存的是“当前位置相关的有限状态”,包括 SWA 最近窗口和未完成压缩的 tail states。classical KV cache 存的是已经形成的 compressed KV blocks。报告中的 block 对齐规则是:每个 cache block 覆盖 lcm(m, m') 个原始 token 的倍数。这样一个 block 内可以同时容纳 CSA 压缩出的 个 compressed tokens,以及 HCA 压缩出的 个 compressed tokens。
报告还设计了 on-disk KV cache,用于复用 shared-prefix request 的 prefill 结果。CSA/HCA 的 compressed KV entries 直接写入磁盘;命中前缀时读取到最后一个完整压缩块,尾部未压缩部分需要重新计算。SWA KV entries 因为未压缩且存在于每一层,体积约为 compressed CSA/HCA KV 的 8 倍,所以报告给出三种策略:
- Full SWA Caching:存所有 SWA KV,计算零冗余,但写入压力大;
- Periodic Checkpointing:每隔 个 token 存最近 token 的 SWA state,在存储和重算之间折中;
- Zero SWA Caching:不存 SWA KV,命中前缀后基于 CSA/HCA cache 重算最后 个 token,恢复 层模型中最后 个 SWA KV。
8. 后训练:专家训练与 On-Policy Distillation
OPD 的全称是 On-Policy Distillation,也不是 DeepSeek-V4 首次提出的概念。它属于模型蒸馏的一种后训练范式,用来把多个 teacher model 的能力合并到一个 student model 中。和普通离线蒸馏相比,OPD 的关键是 student 在自己生成的 trajectories 上学习 teacher 分布,因此训练分布更接近 student 实际会访问的状态。
DeepSeek-V4 使用 OPD 的动机是合并多个领域专家。数学、代码、agent、instruction following 等能力可以分别通过 SFT/RL 训练出 specialist,但最终产品需要一个统一模型同时具备这些能力。直接权重合并或混合 RL 容易损失能力,OPD 则通过 logits-level alignment 把多个专家的输出分布蒸馏到同一个参数空间中。
DeepSeek-V4 的 post-training 由两个阶段组成:先训练多个 domain specialists,再通过 On-Policy Distillation(OPD)合并为一个统一模型。
specialist training 继承 DeepSeek-V3.2 的流程。每个领域先做 SFT,再用 GRPO 做 RL,领域包括数学、代码、agent、instruction following 等。DeepSeek-V4 支持三种 reasoning effort:
| 模式 | 特点 | 典型用途 | 输出格式 |
|---|---|---|---|
| Non-think | 快速、直觉式回答 | 日常任务、低风险决策 | </think> 后直接 summary |
| Think High | 更慢但更准确的逻辑分析 | 复杂问题、规划、中等风险决策 | <think>...</think> 后 summary |
| Think Max | 最大推理 effort | 探索模型能力边界 | 特殊 system prompt + <think>...</think> |
报告还引入 Generative Reward Model。对于 hard-to-verify tasks,不再依赖传统 scalar reward model,而是让 actor model 本身作为 GRM,结合 rubric-guided RL data 评价 policy trajectories。这样评估能力和生成能力一起优化,减少对大量人工标注的依赖。
OPD 阶段使用多个 teacher model,将领域专家能力蒸馏到一个 student model。目标是让 student 在自己生成的 on-policy trajectories 上对齐 teacher 的输出分布。报告使用的是 full-vocabulary logit distillation,而不是只用采样 token 上的近似 KL。这样梯度方差更低,训练更稳定,但工程代价更高。
为了让 full-vocabulary OPD 可行,报告把 teacher 权重 offload 到中心化分布式存储,按需加载;前向时不直接物化所有 teacher 的全词表 logits,而是缓存最后一层 hidden states,训练时再通过对应 prediction head 重建 logits。样本还会按 teacher index 排序,使每个 mini-batch 同时最多只保留一个 teacher head 在显存中。
OPD 的目标函数是多个 teacher 的 reverse KL 加权和:
这里的“on-policy”很重要。student 不是在 teacher 生成的数据上被动模仿,而是在自己生成的 trajectories 上学习 teacher 分布。这样训练分布与最终 student 行为更接近。reverse KL 也有选择性学习的含义:当任务更像数学,student 会更强地对齐数学专家;当任务更像代码,则对齐代码专家。报告称这一阶段使用了十多个覆盖不同领域的 teacher。
为什么报告强调 full-vocabulary logit distillation?更省资源的做法是只在采样到的 token 上估计 KL,把 teacher/student 在当前 token 的 log-prob 差当作 per-token advantage,复用 RL 框架。但这种估计方差高,容易不稳定。full-vocabulary KL 保留完整词表分布,梯度更稳定,也能传递 teacher 对“非采样 token”的偏好。代价是词表超过 100K,多个 trillion-parameter teacher 的 logits 不能直接全部物化。
DeepSeek-V4 的工程解法分三步。第一,teacher 权重放在中心化分布式存储中,teacher forward 时按需加载,并使用类似 ZeRO 的参数切分降低 I/O 和 DRAM 压力。第二,forward 时不缓存完整 logits,而是只缓存 teacher 最后一层 hidden states;训练时再取出 hidden states,通过对应 teacher prediction head 重建 full logits。第三,按 teacher index 对样本排序,使一个 mini-batch 中同一个 teacher head 只加载一次,并且任意时刻显存中最多保留一个 teacher head。最终 KL 计算使用专门的 TileLang kernel,减少动态内存分配。
FP4 QAT 也属于 post-training infrastructure。报告把 FP4(MXFP4)用于两个位置:MoE expert weights,以及 CSA indexer 的 QK path。MoE expert weights 是显存大头;CSA indexer 的 QK path 在长上下文中需要缓存、加载并做乘法,适合低精度加速。index scores 还从 FP32 量化到 BF16,使 top-k selector 加速 2 倍,同时保持 99.7% 的 KV entry recall。
MoE expert weights 的 QAT 细节也比较有意思。优化器维护 FP32 master weights,forward 时先量化到 FP4,再反量化到 FP8 计算。报告称 FP4 到 FP8 的反量化在当前权重上是无损的,因为 FP8 E4M3 比 FP4 E2M1 多 2 个 exponent bits,动态范围更大;只要同一个 FP8 量化块内 FP4 sub-block scale 的最大/最小比值不超过阈值,scale 信息就能被 FP8 的更大动态范围吸收。这样 QAT 可以复用已有 FP8 训练框架。rollout 和推理阶段则直接使用 native FP4 weights,而不是模拟量化,使采样行为与部署一致。
OPD 和 RL rollout 还需要处理长上下文训练的容错与数据搬运。报告实现了 token-granular Write-Ahead Log(WAL):每生成一个 token 就写入对应 request 的 WAL;任务被抢占时保存未完成 request 的 KV cache,恢复时用 WAL 和 KV cache 继续 decode。作者特别指出,不能简单从头重新生成未完成样本,因为短回答更容易在中断前完成,从头重采样会引入 length bias。对于百万 token 的 RL/OPD 数据,框架把 rollout 数据拆成轻量 metadata 和重 per-token fields:metadata 用来全局 shuffle 和计算 packing layout,per-token fields 通过 shared-memory data loader 按 mini-batch 加载,用完立即释放,从而降低 CPU/GPU 内存压力。
9. 面向 agent 的系统设计
DeepSeek-V4 的技术报告把 agent 相关基础设施放在很重要的位置。
首先是 tool-call schema。DeepSeek-V4 使用 XML 风格的 tool invocation,并引入 |DSML| 特殊 token。报告认为 XML 格式能降低转义错误和 tool-call 错误。模型仍然用 <think></think> 标记 reasoning path。
其次是 interleaved thinking。DeepSeek-V3.2 在 tool-result round 中保留 reasoning traces,但新 user message 到来时会丢弃这些 traces。DeepSeek-V4 利用 1M 上下文窗口,在 tool-calling 场景下跨 user turn 保留完整 reasoning history;普通对话场景则仍沿用旧策略,避免无意义地占用上下文。
再次是 Quick Instruction。搜索触发、query 生成、authority/domain 判断等辅助任务不再一定依赖额外小模型,而是通过专门的 special tokens 直接接在输入序列后执行。这样可以复用已有 KV cache,减少重复 prefill,并降低用户感知到的 TTFT。
最后是 DSec 沙箱基础设施。DSec 用 Rust 实现,包括 API gateway、per-host agent 和 cluster monitor,统一封装 Function Call、Container、microVM 和 fullVM 四类执行 substrate。报告称单个 DSec cluster 可以管理数十万个并发 sandbox instances,并通过 trajectory logging 支持 preemption-safe resumption 和 deterministic replay。
10. 评测结果如何理解
base model 评测中,DeepSeek-V4-Flash-Base 虽然只有 13B 激活参数和 284B 总参数,但在多数 benchmark 上超过 DeepSeek-V3.2-Base。DeepSeek-V4-Pro-Base 则在知识、推理、代码和长上下文任务上进一步提升。报告中的 LongBench-V2 结果为:V3.2-Base 40.2,V4-Flash-Base 44.7,V4-Pro-Base 51.5。
post-training 后,DeepSeek-V4-Pro-Max 在开放模型中表现很强。报告给出的代表性结果包括:
- SimpleQA-Verified:DeepSeek-V4-Pro-Max 为 57.9,领先 K2.6 和 GLM-5.1,但低于 Gemini-3.1-Pro 的 75.6;
- LiveCodeBench:DeepSeek-V4-Pro-Max 为 93.5,高于表中 GPT-5.4 缺失项之外的其他对比模型;
- Codeforces rating:DeepSeek-V4-Pro-Max 为 3206,高于 GPT-5.4 xHigh 的 3168 和 Gemini-3.1-Pro High 的 3052;
- MRCR 1M:DeepSeek-V4-Pro-Max 为 83.5,高于 Gemini-3.1-Pro 的 76.3,低于 Claude Opus 4.6 Max 的 92.9;
- Terminal Bench 2.0:DeepSeek-V4-Pro-Max 为 67.9,低于 GPT-5.4 xHigh 的 75.1,接近 Gemini-3.1-Pro High 的 68.5;
- Toolathlon:DeepSeek-V4-Pro-Max 为 51.8,低于 GPT-5.4 xHigh 的 54.6,高于 Claude Opus 4.6 Max 的 47.2。
报告对结果的判断比较明确:DeepSeek-V4-Pro-Max 在开放模型中刷新了多个方向的性能,但在知识和部分 agent 任务上仍落后最强闭源模型;V4-Flash 在知识任务上受参数规模限制较明显,但在给足 reasoning budget 后,推理任务接近更大模型。
真实任务评测还包括中文写作、搜索、白领任务和代码 agent。搜索部分的结论是 agentic search 优于 RAG,尤其在复杂任务上更明显;附录表格显示 agentic search 在总计 869 个样本上胜率为 61.7%,RAG 胜率为 18.3%,平局为 20.0%。代码 agent 内部评测包含约 200 个内部研发任务,筛选后保留 30 个任务,DeepSeek-V4-Pro-Max pass rate 为 67%,接近 Claude Opus 4.5 的 70%,低于 Opus 4.6 Thinking 的 80%。
11. 局限与后续方向
报告自己指出,DeepSeek-V4 为追求极端长上下文效率采用了较复杂的架构。许多组件和 trick 虽然有效,但也让系统整体变得不够简洁。后续方向之一是更系统地研究这些设计,保留真正必要的部分,使架构更优雅。
训练稳定性也是未完全解决的问题。Anticipatory Routing 和 SwiGLU Clamping 在实践中有效,但底层原理仍不充分清楚。报告把更原则化、可预测的大规模训练稳定性方法列为未来工作。
此外,DeepSeek 还计划继续探索新的 sparsity 维度,例如更稀疏的 embedding module;继续改进低延迟架构和系统技术;扩展长周期、多轮 agentic tasks;加入 multimodal capabilities;并持续改进数据筛选与合成方法。
12. 总结
DeepSeek-V4 的重点不是“又做了一个更大的 MoE”,而是围绕 1M token 上下文重新设计了模型和系统。
CSA/HCA 解决的是超长上下文 attention 和 KV cache 的主成本;mHC 解决的是在不直接放大 hidden size 的情况下增强层间信息通路的问题;Muon 和训练系统解决的是大规模 MoE 训练中的收敛、稳定性和并行问题;OPD、Quick Instruction、DSec 和 on-disk KV cache 则说明 DeepSeek-V4 并不只把模型看成一个离线 benchmark 对象,而是直接面向长上下文 agent、搜索、代码和生产推理。
这篇报告的阅读价值在于,它把“百万 token 上下文”拆成了具体的技术问题:压缩什么、保留什么、如何选择历史信息、KV cache 如何组织、shared prefix 如何复用、RL/OPD 如何处理超长轨迹、agent 沙箱如何支撑大规模训练和评测。DeepSeek-V4 的贡献也主要体现在这些连续的工程与架构取舍中。