deepseek-tech-notes · 中文导读

丝滑阅读 × 深度拆解 × 前沿跟进 — 非官方 DeepSeek 技术笔记(V1→V4)。与 DeepSeek 官方无隶属关系

Smooth, deep notes on frontier DeepSeek tech. Unofficial; not affiliated with DeepSeek.

← English homepage

在线成书

推荐阅读

本笔记是双向引用 wiki:文首有反向回链,文内有正向深入链接。要发挥这套导航的价值,请用下面两种方式之一——不要用 GitHub 仓库内的 blob 预览

方式何时用导航怎么玩
IDE Preview(VS Code / Cursor)已 clone 仓库、本地精读或改稿点文首 回链与文内链接即可跳转;可开预览分栏或沿预览历史回溯——正向 / 反向引用价值最大
GitHub Pages(mdBook)在线阅读、无需 clone公式、图示与 IDE 一致;用浏览器 后退 / 前进 沿阅读路径返回上一篇或再进下一篇,效果与 IDE 里点链接类似

小结:本地 IDE PreviewPages 二选一即可;编辑与 PR 仍在本仓库 docs/ 进行。

善意提醒:正文里的 SVG 插图下方,通常都有 「图示详情」 链接——点进去可在新页查看可缩放的原图。不少机制就写在图里的箭头、分区与小字标注里,值得放慢节奏、仔细品读。

项目仍在完善中:梗概补全、书中镜像、链接与图示校验仍在推进。阅读时请以各篇文首的 arXiv / 官方 PDF 为准;发现断链、口径不一致或表述错误,欢迎提 issue


这个项目在做什么

我从 DeepSeek V1 技术报告 一路跟到 V4,并把大部分主要技术文章里的机制与细节拆开写清楚:架构怎么变、训练/推理在优化什么、版本之间如何衔接

范围包括:


演进

版本演进总览 — 全系列唯一主线入口:时间线 + 算法 / 基础设施 / MoE 三线;各版本与 infra 补丁的内链均从此文展开。

DeepSeek 版本时间线:V3 至 V4 算法演进与 Index Share / ESS / DSpark / HiSparse 基础设施补丁

图示详情 · 与 演进总览 §1 对照阅读

PPO vs GRPO:RLHF 神经 RM + Critic 与 RLVR 验证器 + 组内 baseline 对比

图示详情 · RLVR / GRPO · R1

MTP 融合:主网单步 1 次前向,MTP 链补 draft,无需 K 遍完整前向

图示详情 · DSpark 投机解码 · MTP 融合 scheme


文章

主题一句话
V1DeepSeek-LLM 完整中文译文
V1 BBPEByte-level BPE 词表与预分词
V2236B/21B;MLA + DeepSeekMoE 首次引入
V3671B MoE + MLA 开源旗舰基座
V3 FP8训练侧 FP8 块级动态量化
R1V3-Base + RLVR;架构不变
RLVR / GRPO可验证奖励 + 组内相对优化
V3.1Hybrid 推理,128K
V3.2DSA 稀疏注意力
DSAindexer + top-$k$ + Core MLA
Index ShareIndexCache 纯 infra 补丁
ESS · 论文梗概Latent-Cache CPU offload
V4CSA + HCA + mHC;1M context
CSA / HCA4:1 稀疏 + 128:1 dense 混合压缩注意力
mHC双随机流形约束超连接
Hash MoE + FP4Hash 路由 + routed expert FP4
V4 KVClassical + State 双池
V4 HiSparseinactive C4 CPU offload
V4 磁盘 PrefixCSA/HCA 落盘 + SWA 三档策略
DSparkV4 投机解码:半自回归 draft + 置信度验证
MLAlatent 压缩 KV
DeepSeekMoE细粒度 routed + shared experts
MoE 路由aux-loss-free 动态 bias 负载均衡
$L_{\mathrm{Bal}}$序列内专家均衡损失
Hyper-Connections$n$ 路并行残差流;mHC 前置


许可

范围许可
导读、图示、成书读本CC BY 4.0
scripts/MIT
docs/engram/Apache 2.0
docs/material/ 镜像上游 / 原论文许可

DeepSeek 论文、权重与官方代码库另有其许可;引用时请以 arXiv / 官方发布 为准。

DeepSeek 版本演进:V1 → V3 → V3.2 → V4,Index Share 与 KV-offload

更新:2026-06-25 ← 中文导读 · ← 仓库首页(EN) · V1→V3 前代演进


1. 总览

DeepSeek 开源主线分两段:

  1. V1 → V2 → V3(2024):稠密双语基座 → MLA + MoE671B 旗舰(详见 V1→V3 演进
  2. V3 之后(2025–2026):R1 / V3.1 / V3.2 / V4 与 infra 补丁

V3 发布后的 Attention / KV infra 与全系列的 MoE 可概括为三条线:

  1. 算法线MLADSA 稀疏注意力CSA/HCA 混合压缩注意力 + mHC
  2. 基础设施线标准 MLA KV cacheIndexer/Latent 异构 cacheIndex ShareESS offloadV4 异构 KV + HiSparse
  3. MoE 线:稠密 FFN → DeepSeekMoEaux-loss-free 路由 + $L_{\mathrm{Bal}}$Hash MoE + FP4

1.1 各工作优化方向分类

下列 §3 版本§4–§6 infra 中的每一项工作,按三条正交优化轴归类。多轴并存时给出 比例(合计 100%);单列 100 表示该工作主要落在此轴。

含义典型内容
模型权重、数据、对齐与后训练scaling laws答疑)、词表SFT/DPO / RLR1)、Hybrid 能力checkpoint 规模
架构-train训练改结构或训推系统MoE 路由DeepSeekMoE)、MTP 辅助头mHCMuonFP8 训推数值DSA / CSA 等需重训的算子
架构-infer推理改结构或纯 infer 补丁MLA latent KVPrefill/Decode 模式切换DSA 异构 cacheIndex ShareESSDSparkHiSparse
优化方向三轴分布:各工作按模型 / 架构-train / 架构-infer 占比落点

图示详情

版本 / 工作一览

工作模型 %架构-train %架构-infer %产出机构发表时间说明
V1 scaling / BBPE / SFT·DPO100DeepSeek2024-01数据管线词表、对齐(SFT/DPO);结构为常规模型
MLA(V2 起)4060DeepSeek2024-05低秩 KV;训推同构,显存/吞吐收益主要在 infer
DeepSeekMoE(V2 起)4555DeepSeek2024-05稀疏 FFN路由在训推两阶段共用
V3 aux-loss-free + 256/8 MoE5050DeepSeek2024-12aux loss、sigmoid 路由、专家池扩容
V3 MTP7030DeepSeek2024-12辅助训练目标;推理可接原生投机
V3 FP8 动态量化100DeepSeek2024-12预训练数值与吞吐 Transformer 拓扑
R1 RLVR / GRPO100DeepSeek2025-01V3 同架构;差异全在后训练
V3.1 Hybrid / Agent8020DeepSeek2025-中post-train 能力;同一权重切换 thinking/chat
V3.1-T MLA Prefill MHA / Decode MQA100DeepSeek2025同权重;仅推理路径 MHA↔MQA 间切换
V3.2 DSA3565DeepSeek2025-12Lightning Indexer + 异构 cache长上下文 infer 主战场(Exp 2025-09)
Index Share100清华 + 智谱2026-03跨层复用 top-$k$ index
ESS Latent offload100百度百舸2025-12Latent-Cache CPU 分层;与 DSA 算法正交
V4 CSA / HCA3070DeepSeek2026压缩 KV 序列;1M context 算力与 cache 主因
V4 mHC5545DeepSeek2025-12残差双随机流形;训推均改前向图(V4 落地 2026)
V4 Muon100DeepSeek2026优化器替换,加速收敛
V4 Hash MoE + FP45545DeepSeek2026Hash 路由FP4 权重量化
DSpark100DeepSeek2026-06V4 线上投机解码;基线 MTP-1不改基座
V4 HiSparse / 异构 KV offload100DeepSeek(layout)+ Together 等2026-05C4 inactive entry磁盘 prefix;纯 infer 内存层级
FlashMLA / DeepGEMM indexer100DeepSeek2025Kernel 实现;承载 MLA / DSA 算子(§6
Visual Primitives MLLM602515DeepSeek-AI2026V4-Flash + ViT;visual primitives CoT;CSA 压视觉 KV(§3.8

版本级粗汇总

版本模型 %架构-train %架构-infer %发表时间相对上一版主叙事
V11002024-01系列首篇;scaling + 双语
V21045452024-05首次 MLA + MoE
V31555302024-12MoE 路由 + MTP + 671B 规模
R11002025-01纯后训练
V3.1 / Terminus75252025-中Hybrid + MLA 模式切换
V3.235652025-12唯一架构改动 = DSA
V4(基座)40602026CSA/HCA/mHC/MoE/Muon 打包
V4 + DSpark(线上)100†2026-06† 相对已训好的 V4 checkpoint 的 decode 补丁

读法:Index Share、ESS、DSpark 等 100% 架构-infer 的工作,与「改权重」的 V3.2 DSA、V4 CSA 可叠加部署;§5 KV-offload 三代与 §6 推理栈是 infer 轴的进一步展开。

1.2 Transformer 四模块演进

Raschka 第三方解读 §8 · 表 8-1 将 Transformer 拆成四条正交演进链;下表映射到本仓库版本节点(非 exhaustive,仅 DeepSeek 主线):

模块行业演进链DeepSeek 落点
NormalizationLayerNorm → RMSNorm → Dynamic TanHV1–V4:RMSNorm(Pre-Norm)
AttentionGQA → sliding window(SWA) → MLA → sparse (DSA) → CSA/HCAMLADSACSA/HCA · V4 另含 SWA 局部精确 KV
FFNGeLU → SwiGLU → MoEDeepSeekMoEaux-loss-freeHash MoE + FP4
残差恒等(ResNet) → Hyper-Connections → mHCHCmHC(V4 落地)

读法:V3.2 的「唯一结构改动」几乎全在 Attention 轴(DSA);V4 同时在 Attention(CSA/HCA)、残差(mHC)、FFN(Hash MoE)三轴打包升级;后训练(R1 RLVR)与 infer 补丁(Index Share / ESS / DSpark)不改变模块拓扑,见 §1.1

延伸:Raschka 全文 §8 · mHC 专文 §1

DeepSeek 版本快速对照:V3 到 V4 主链与 Index Share 补丁

图示详情


2. 版本时间线与关系

DeepSeek 版本时间线:算法演进与基础设施补丁

图示详情

图 2 补充V1 · V2 · MLA · DeepSeekMoE · aux-loss-free · RLVR · DSA · Index Share · ESS · V4 · DSpark · mHC · 优化方向分类 §1.1 各节代表图:§3.1 scaling/BBPE · §3.2 MLA · §3.3 MoE vs V2 / MTP / FP8 · §3.4 GRPO · §3.5 MLA 模式切换 · §3.6 DSA · §3.7 V4 异构 KV + DSpark · §3.8 Visual Primitives · §4 Index Share · §5.1–5.3 KV offload 三代

版本发布时间参数量激活参数上下文机构arXiv相对上一版的核心变化
DeepSeek-LLM V12024-017B / 67B同左(稠密)4KDeepSeek2401.02954系列首篇;LLaMA 系 + GQA(67B);2T 双语;scaling laws
DeepSeek-V22024-05236B21B128KDeepSeek2405.04434首次 MLA + DeepSeekMoE;8.1T
DeepSeek-V32024-12671B37B128KDeepSeek2412.19437MLA 旗舰化 + 256/8 MoE + MTP + aux-loss-free;14.8T
DeepSeek-R12025-01同 V3同 V3128KDeepSeek2501.12948V3-Base 上 RLVR + GRPO架构不变
DeepSeek-V3.12025 中同 V3同 V3128KDeepSeekHybrid 推理:同一权重切换 thinking / non-thinking
V3.1-Terminus2025同 V3.1同 V3.1128KDeepSeekV3.1 收尾 checkpoint,作为 V3.2 续训起点
DeepSeek-V3.2-Exp2025-09同 V3.1-T同 V3.1-T128KDeepSeekExp PDF · 2512.02556DeepSeek 官方实验版;引入 DSA(DeepSeek 原创稀疏注意力)
DeepSeek-V3.22025-12同 V3.1-T同 V3.1-T128KDeepSeek2512.02556DeepSeek 官方正式版;DSA 定型;唯一架构改动即为稀疏注意力
ESS2025-12百度百舸2512.10576纯推理补丁:Latent-Cache CPU offload;与 DSA 正交
DeepSeek-V4-Pro20261.6T49B1MDeepSeek2606.19348CSA + HCA + mHC + Muon;MoE FP4
DeepSeek-V4-Flash2026284B13B1MDeepSeek2606.19348更小激活量,效率优先
Index Share2026-03清华 + 智谱2603.12201纯推理补丁
DSpark2026-06DeepSeek + 北大DeepSpecV4 Flash/Pro 预览引擎;相对 MTP-1 基线;半自回归 draft + 置信度验证;纯推理

arXiv 说明:V3.1 / Terminus 为 post-train 与 checkpoint,无独立论文;V3.2-Exp 先发 GitHub 技术报告,DSA 完整叙述并入 V3.2 论文 2512.02556DSpark 无独立 arXiv,技术报告见 DeepSpec / DSpark_paper.pdf;与 V4 同期开源,叠加在 V4 checkpoint 之上(§3.7 / §6)。


3. 各版本详解

各版本一页纸梗概见 版本梗概索引。以下为展开说明(按时间线从 V1 起)。更细的 V1→V3 脉络另见 V1→V3 演进

3.1 DeepSeek-LLM V1

V1 正文DeepSeek-LLM V1(2401.02954 完整中文译文)

论文DeepSeek-LLM arXiv:2401.02954

架构要点

  • 稠密 LLaMA 系:Pre-Norm + RMSNorm + SwiGLU + RoPE;7B(30 层 MHA)与 67B(95 层加深 + 8 头 GQA)。
  • 上下文 4K;词表 BBPE 102,400
  • 预训练 2.0T 中英双语;数据管线:跨 dump 去重 → 过滤 → domain 重混。
  • 对齐:~150 万 instruction,SFT + DPO

研究贡献

  • 系统 scaling laws($C=M\cdot D$);IsoFLOP 下数据质量越高越应扩模型而非堆数据。

答疑为何用 $C=M\cdot D$ 而非 Chinchilla 的 $C=6ND$? — $M$=non-embedding FLOPs/token、Table 3 误差、与 IsoFLOP 的关系

Figure 4a — IsoFLOP 曲线(各算力档 loss 随 M 呈 U 形,谷底 = 最优分配)

Figure 4a — IsoFLOP 曲线(各算力档 loss 随 $M$ 呈 U 形,谷底 = 最优分配)

来源:V1 论文 Figure 4a(详见 V1 §3.2 最优 model/data Scaling)。横轴 = non-embedding FLOPs/token $M$;纵轴 = validation bits-per-byte;每条 U 形曲线对应固定总算力 $C$,谷底即该预算下最优 model/data 分配。

词表 BBPE

BBPE 训练过程示例:UTF-8 字节、迭代 merge、编码

图示详情 · V1 BBPE 专文

推理 infra 特征

  • 标准 GQA/MHA KV cache(与后续 MLA 不兼容);无 MoE、无 latent 压缩;可按常规 Transformer 部署。

3.2 DeepSeek-V2

梗概DeepSeek-V2 · MLA 详解

论文DeepSeek-V2 arXiv:2405.04434 仓库deepseek-ai/DeepSeek-V2

相对 V1 的架构跃迁

维度V1(67B 稠密)V2
FFN稠密 SwiGLUDeepSeekMoE(160 routed + 2 shared / token 激活 6)
注意力GQA首次 MLA latent KV
规模67B 全激活236B / 21B activated
上下文4K128K
预训练2T8.1T

要点

  • MLA 将 K/V 压入 latent cache;论文称相对 67B 稠密 KV 体积约 -93.3%、生成吞吐 5.76×
  • MoE 路由为 softmax 系(V3 起改为 aux-loss-free sigmoid 路由)。
  • MLA 结构被 V3 / R1 / V3.1 / V3.2 沿用;V2 是系列中 MLA+MoE 的首次引入
MLA 前向计算流程(Eq.37–47,含左下角三个说明框)

图示详情 · 公式与符号详解

为什么 1536 能变成 [128,128] 和 [128,64]? ——不是切分,是两个独立上投影矩阵放大后按头 reshape:

  • $q_t^C = W^{UQ} c_t^Q$: $[16384 \times 1536] \cdot [1536] \to [16384]$, 其中 $16384 = n_h \times d_h = 128 \times 128$ → reshape $[128, 128]$
  • $q_t^R = \mathrm{RoPE}(W^{QR} c_t^Q)$: $[8192 \times 1536] \cdot [1536] \to [8192]$, 其中 $8192 = n_h \times d_h^R = 128 \times 64$ → reshape $[128, 64]$

$[128,128]$ 里两个 128 含义不同:前一个是头数 $n_h$(共 128 个头),后一个是每头维度 $d_h$(每头 128 维),本配置恰好都等于 128。二者都是架构超参,不是从 1536 算出来的;1536 只决定矩阵的列数。(KV 侧同理:$c_t^{KV} = 512$ 经 $W^{UK}, W^{UV}$ 投影成 $[128,128]$。)

右边 $k_t^R = [64]$ 的 64 怎么来? ——$64 = d_h^R$(每头 RoPE 维度,架构超参);$W^{KR}: [64 \times 5120] \cdot h_t \to [64]$,再加上 RoPE。 关键: $k_t^R$ 没有头维度——所有 $n_h = 128$ 个头共享同一个 $[64]$(解耦 RoPE);而左边 $q_t^R$ 是每头各一份 $[128, 64]$。 正因为 K 的 RoPE 部分全局只存一份 $[64]$(不按头复制),KV 缓存才这么小——这是 MLA 省显存的另一半原因。

MLA 到底压缩了谁?如果不做压缩会变多大? ——下面三项就是 MLA 压缩/解耦的对象(格式:MLA 压缩后 $\Rightarrow$ 不压缩):

  • $c_t^Q$ 查询潜向量: $1536 \Rightarrow 16384\ (= n_h d_h)$, 约 11×; 不进缓存,省的是参数与计算量。
  • $c_t^{KV}$ KV 联合潜向量: $512 \Rightarrow 16384\ (= n_h d_h)$, 32×; ★进缓存 —— 这是省显存的核心。
  • $k_t^R$ 共享 RoPE 键: $64 \Rightarrow 8192\ (= n_h d_h^R)$, 128×; ★进缓存,靠全头共享(不按头复制),而非低秩压缩。

缓存总量: 标准 MHA $= 2n_h d_h = 32768$ → MLA 若不压缩 $= 16384 + 64 = 16448$(仅 MHA 一半) → 实际 MLA $= 512 + 64 = 576 \approx$ MHA 的 1/57

来源:V2 论文 Eq. 37–47;cache 仅存 $c_t^{KV}$(512)+ 共享 $k_t^R$(64)。

推理 infra 特征

  • KV cache 变为 MLA latent 格式;需引擎侧自定义 kernel / 适配(后续 FlashMLA 等)。

3.3 DeepSeek-V3

梗概DeepSeek-V3 · 相对 V2 纯模型结构优化§对比 V2

论文DeepSeek-V3 Technical Report 仓库deepseek-ai/DeepSeek-V3

相对 V2 的架构升级

维度V2V3
规模236B / 21B 激活(~8.9%)671B / 37B 激活(~5.5%
MoE160 routed,top-62 shared;softmax + aux loss256 routed,top-81 shared;aux-loss-free(sigmoid + bias $b_i$)
注意力首次 MLA同族 MLA(latent KV 方程不变;671B / 128K 配比升级)
预测头单步 next-token+ MTP 辅助头(多步并行预测)
预训练8.1T14.8T

要点(三条结构线)

  1. MoE 路由革新:去掉 aux loss 主路径;router 内 可学习 bias 做负载均衡,sigmoid affinity 选 expert、门控与选择解耦;专家池扩至 256/8,激活占比更低。

  2. MTP(全新):输出层 Multi-Token Prediction 辅助目标;推理可原生投机解码 → 投机解码与 DSpark 专文 §2

  3. MLA 继承:K/V 仍压入 latent cache($c_t^{KV}$ 512 + 共享 $k_t^R$ 64);V3 价值在旗舰规模与 128K 巩固,新 attention 算子(Hybrid / DSA 在 V3.1 / V3.2)。

DeepSeek-V3 vs V2 MoE 结构创新:aux-loss-free 路由、256/8 专家池、Shared+Routed 融合

图示详情 · MoE 详解 · aux-loss-free · MLA 前向流程图

  • 训练:14.8T tokens;后训练含 SFT + RL(R1 为同架构 + RLVR)。

训练 infra(非模型结构)FP8 动态量化 — 块级 scale + 每 $N_c{=}128$ MMA 提升 FP32 累加;与 DualPipe / DeepEP 并列,支撑 671B 预训练吞吐与数值稳定。

推理 infra 特征

  • KV cache 为 MLA latent 格式,与标准 GQA/MHA 不兼容。
  • vLLM 等引擎需 --trust-remote-code--block-size 1(MLA 专用)。
  • 长上下文下主要瓶颈是 Latent-Cache 线性增长 占满 HBM,限制 batch size。

3.4 DeepSeek-R1

梗概DeepSeek-R1 · RLVR 详解

论文DeepSeek-R1 arXiv:2501.12948 训练管线DeepSeek-R1 训练 Pipeline

要点

  • 架构与 V3 完全相同;差异仅在 后训练
  • RLVR(Reinforcement Learning with Verifiable Rewards):数学/代码等用 规则验证器 给奖励,配合 GRPO(无 critic),不用神经 reward model 做主信号。
  • R1-Zero:V3-Base 上纯 RL,推理能力自发涌现;可读性弱。
  • R1:冷启动 SFT → RL → 拒绝采样 SFT → 二阶段 RL(推理 + 通用 RM),补齐 helpful / safe。
PPO vs GRPO:RLHF 神经 RM + Critic 与 RLVR 验证器 + 组内 baseline 对比

图示详情 · RLVR 详解 · GRPO 算法

推理 infra:与 V3 相同(MLA latent KV、引擎配置一致)。


3.5 DeepSeek-V3.1 / V3.1-Terminus

梗概DeepSeek-V3.1 · V3.1-Terminus checkpoint

变化:在 V3 权重基础上做 post-training,无架构变更

维度V3V3.1
推理模式Base / R1 分离Hybrid:同一模型切换 thinking / chat
上下文128K128K(续训扩展)
Agent / Tool Use较弱明显加强(BrowseComp、SWE 等)

V3.1-Terminus 是 V3.1 系列的最终 checkpoint,上下文已扩至 128K,作为 V3.2 继续预训练 的起点。

MLA 模式切换

V3.1-Terminus MLA 模式切换:Prefill MHA 式 per-head latent,Decode MQA 式 shared latent

图示详情 · V3.1 专节

  • Prefill:MHA 模式(多 query head 独立 latent)
  • Decode:MQA 模式(latent 在 query head 间共享)

这为后续 DSA 在 MQA 模式下做稀疏选择打下基础。


3.6 DeepSeek-V3.2 / V3.2-Exp

梗概DeepSeek-V3.2 · V3.2-Exp

论文DeepSeek-V3.2 · V3.2-Exp 仓库deepseek-ai/DeepSeek-V3.2

相对 V3.1-Terminus 的唯一架构改动:DeepSeek Sparse Attention (DSA)

逻辑详解DSA逻辑详解 · DSA稀疏注意力

DSA 两阶段:Lightning Indexer 选 Top-k=2048,Core MLA 仅读 Latent-Cache 子集

图示详情 · DSA 逻辑详解

DSA 两阶段(三阶段表):

  1. Lightning Indexer:对每个 query,用廉价点积为所有历史 token 打分(复杂度仍 $O(L^2)$,但 head 维极低)。
  2. Top-$k$ Selector:选出 $k=2048$ 个最重要 token 的 latent entry。
  3. Core Attention(Core MLA):仅对这 $k$ 个 latent 做 MLA attention(复杂度 $O(Lk)$)。

概念Lightning Indexer · Top-$k$ Selector · Core MLA · Indexer-Cache · Latent-Cache · ESS

因此 V3.2 的 cache 分裂为两类异构 KV · DSA逻辑详解 §4):

Cache 类型作用占总量比例(ESS 论文是否 offload
Indexer-Cache计算重要性、选 top-$k$~16.8%(每步全算)
Latent-CacheMLA 核心 attention 的 KV~83.2%可 offloadESS

V3.2-Exp 与 V3.2 架构相同;Exp 用于验证 DSA 不损精度,V3.2 为正式训练 + 后训练成品。

推理内核DeepGEMM(indexer logits)、FlashMLA(sparse attention paged kernel)→ 推理 infra


3.7 DeepSeek-V4

梗概DeepSeek-V4-Pro / V4-Flash

论文DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence 模型:V4-Pro(1.6T / 49B act)、V4-Flash(284B / 13B act)

相对 V3.2 的算法大步进

组件说明
CSA (Compressed Sparse Attention)每 $m=4$ token 压缩为 1 条 KV entry,再对压缩序列做 DSA(top-$k$ 压缩 entry)→ 专文 §2
HCA (Heavily Compressed Attention)每 $m'=128$ token 压缩为 1 条,序列极短,直接 dense attention → 专文 §3
mHCManifold-Constrained Hyper-Connections§3 双随机流形):Sinkhorn–Knopp 凸组合
Muon优化器替换,加速收敛 → 专文 §1
Hash MoE前几层 dense FFN → Hash-routed MoE → 专文 §1
FP4 MoErouted expert 权重 FP4 + QAT → 专文 §2
DeepSeek-V4 异构 KV:CSA 4:1、HCA 128:1、SWA、Indexer、Tail buffer 与 HiSparse offload

图示详情 · V4 梗概 · CSA/HCA 详解 · Hash MoE + FP4 · Muon 详解 · mHC 详解

1M context 效率

模型单 token FLOPs累计 KV cache
V4-Pro @ 1M27%10%
V4-Flash @ 1M10%7%

Agentic Coding 场景:V4 面向 100K–1M token 的 agent 工作流(代码库、多轮 tool trace),算法侧用 CSA/HCA 压 cache,infra 侧用异构 KV 管理 + offload 才能「真的跑得动」。

推理加速:V4 预览引擎已部署 投机解码与 DSpark(相对 MTP-1 基线;同等吞吐下单用户 +57%–85%)。细节、图示、自测与 MTP 机制 均在专文,此处不重复。

专文投机解码与 DSpark · DeepSpec

Ablation 困境:V4 同时改了注意力、残差、优化器、MoE 路由、量化精度,很难像 V3.2 那样做单一变量对照——这也是社区更青睐 Index Share 这类「纯 infra、零重训」补丁的原因之一。


3.8 Thinking with Visual Primitives

要点专文Visual Primitives 论文要点 · PDFVisual Primitives 原文 PDF

定位:V4-Flash 之上的 MLLM 支线——把 点 / 框 作为 CoT 的 visual primitives,解决语言难以精确 空间引用 的 Reference Gap。

双模块架构

模块角色
DeepSeek-ViT任意分辨率图像 → patch token → 3×3 通道压缩
V4-Flash LLM视觉 + 文本交错序列;CSA 将视觉 KV 再压
Figure 2 — V4-Flash + DeepSeek-ViT 架构与 Pretrain→SFT→RL→RFT 训练管线

Figure 2 | Model architecture and training pipeline(论文原图)。756×756 示例:2,916 patch → 324 LLM token → 81 KV entries,总压缩 7,056×

直接打开 Figure 2 · 要点专文 §2

效率与精度

Figure 1 — 800×800 输入 token 消耗与各模型 benchmark 均分
指标数值 / 对比
800×800 视觉 KV90 entries(全文 ~361 tokens)vs Gemini-3-Flash ~1100 tokens
7 项 benchmark 均分77.2%(子集评测,非全能榜)
拓扑推理DS_Maze 66.9、DS_Path_Tracing 56.7,显著高于 Qwen3-VL-235B
Table 1 — 与 Gemini / GPT / Claude / Gemma / Qwen3-VL 对比

Table 1 | Comparison with frontier models(bold=最佳)。

直接打开 Figure 1 · Table 1 · 要点专文 §4–§5

与 §3.7 V4 的关系:共享 CSA 压缩 attention 与 MoE 推理栈;增量在 ViT 编码器 + visual primitives 后训练管线,属于 模型轴(数据/对齐)+ 架构-train(ViT 模块) 的扩展,而非新的文本稀疏注意力变体。


4. Index Share

梗概Index Share 逻辑详解Index Share逻辑详解

社区昵称 Index Share / 「V3.3」;正式名 IndexCache。 论文:arXiv:2603.12201清华大学 + 智谱 AI / Z.ai)· 代码:THUDM/IndexCache

4.0 技术归属

角色机构说明
被优化对象DeepSeek自研 DSA + Lightning Indexer;每层独立 top-$k$,长上下文下 indexer 成为瓶颈
优化算法清华 + 智谱(Z.ai)IndexCache / index-share:F 层缓存索引、S 层复用,非 DeepSeek 官方产物
工程落地百度百舸训推引擎集成 IndexCache、分布式与异构芯片适配;ESS 为百舸自研的 Latent-Cache offload,与 IndexCache 正交

详见 Index Share梗概 §技术归属

4.1 解决什么问题

DSA 的 indexer 每层独立运行,复杂度 $O(L^2)$,长上下文 prefill 时 indexer 成为显著开销。观察:相邻层的 top-$k$ index 高度相似

4.2 机制

将 Transformer 层分为两类:

  • Full (F) 层:保留 indexer,正常计算 top-$k$
  • Shared (S) 层不跑 indexer,直接复用最近一个 F 层的 cached indices

典型模式:每 4 层保留 1 个 F 层(FFFS 重复),去掉 75% indexer 计算

Index Share FFFS 跨层复用:F 层算 indexer,S 层复用 cached indices

图示详情 · Index Share 逻辑详解

两种部署:

模式做法
Training-free在校准集上贪心搜索哪些层保留 indexer,最小化 LM loss
Training-aware多层蒸馏,让保留的 indexer 拟合其覆盖层的平均 attention 分布

4.3 为何被称为「最好的 infra 补丁」

属性Index ShareV4 级架构改动
权重变更全量重训
额外显存新 cache layout
实现SGLang / vLLM 一个 if/else 分支异构 KV + 新 kernel
加速200K:TTFT 1.82×,decode 1.48×1M:FLOPs/KV 降至 10% 级
适用模型DSA 系(V3.2、GLM-5)V4 自带 CSA indexer

结论:Index Share 典型体现「infra 归 infra,算法归算法」——在 DSA 算法不变的前提下,用跨层冗余做系统优化。


5. KV-offload 演进

KV-offload 指将部分 cache 卸载到 CPU DRAM(或磁盘),按需 prefetch 回 GPU。DeepSeek 各代的 cache 形态不同,offload 策略也完全不同

5.1 V3 / V3.1:标准 MLA Latent-Cache

  • Cache 内容:单一 MLA latent 向量序列。
  • Offload:可用通用 KV offload(FlexGen、vLLM CPU offload 等),但 MLA 自定义格式导致很多引擎 不支持标准 offload
  • 瓶颈:线性增长的 latent 占满 HBM → decode batch size 受限。
V3 同质 MLA Latent-Cache:线性增长占满 HBM,可选通用 CPU offload

图示详情 · MLA 前向专文 · MLA §KV Cache

5.2 V3.2:Indexer-Cache + Latent-Cache 分离 → ESS

归属澄清DeepSeek-V3.2-Exp / V3.2DSA 均为 DeepSeek 官方发布。下文 ESS 论文标题虽含「DeepSeek-V3.2-Exp」,但 ESS 算法来自百度百舸,是针对 DeepSeek DSA 模型的 Latent-Cache offload 方案,不是 DSA 本身,也不是 V3.2-Exp 的发布方。

详解ESS Latent offload

论文ESS: An Offload-Centric Latent-Cache Management Architecture for DeepSeek-V3.2-Exp

V3.2 异构 Cache:Indexer-Cache 常驻 GPU 选 top-2048,Latent-Cache 可 offload

图示详情 · ESS 概念 · ESS 论文梗概

策略说明
Indexer-Cache 常驻 GPU占 16.8%,每步必须全算,offload 无意义
Latent-Cache offload 到 CPU占 83.2%,利用 top-$k$ 的 时间局部性(相邻 decode step 的 $K_t^l$ 重叠率高)
FlashTrans + UVA解决 656B 小块 PCIe 传输带宽极低(原 ~0.8 GB/s H2D)→ 提升至 ~37 GB/s
GPU 侧 Sparse Memory PoolLRU 维护 GPU 热 latent 子集,miss 时从 CPU prefetch
Layer-wise overlap计算与传输流水线掩盖延迟

收益:32K context 吞吐 +69.4%;128K 最高 +123%。

与 V3 的本质区别:offload 单位从「整条 MLA latent 序列」变为「稀疏选中的 Latent-Cache entry」,且需与 indexer 的 top-$k$ 选择协同。

5.3 V4:异构 KV + HiSparse + 磁盘 Prefix Cache

V4 的 cache 不再是单一 MLA latent,而是多类型并存:

V4 异构 KV 与 HiSparse:inactive C4 entry offload 到 CPU pinned memory

图示详情 · V4 §推理 infra

KV 类型来源特点
CSA 压缩 entry每 4 token → 1序列长 $\frac{L}{4}$,稀疏 top-$k$
HCA 压缩 entry每 128 token → 1序列极短,dense attend
SWA (Sliding Window)最近 $n_{\text{win}}$ token独立 eviction 策略
Indexer KVCSA 的 lightning indexer与主 attention 维度不同
Tail buffer不足 $m$ 个 token 的未压缩尾等待凑满再压缩

KV layout专文:V4 KV Layout

  • Classical KV cache:按 $\mathrm{lcm}(m, m')$ 对齐的压缩块,服务 CSA/HCA
  • State cache:每请求固定大小块,存 SWA + 未就绪压缩尾

HiSparse专文:V4 HiSparse

  • inactive 的 C4(CSA 4:1 压缩层)cache entry offload 到 CPU pinned memory
  • GPU 只保留 active「热」工作集
  • 单节点 B200 上 KV 容量从 ~1.2M tokens 提升到 ~3.7M tokens(约 3×)

磁盘 Prefix Cache专文:V4 磁盘 Prefix Cache

  • CSA/HCA 压缩 entry 可直接落盘,共享 prefix 免重复 prefill
  • SWA 体积约为压缩 entry 的 8×,提供 Full / Periodic Checkpointing / Zero 三档策略

5.4 三代 offload 对比

维度V3 / V3.1V3.2 (ESS)V4 (HiSparse)
Cache 结构同质 MLA latentIndexer + Latent 异构CSA + HCA + SWA + Indexer + tail
Offload 对象全量 latent(若引擎支持)仅 Latent-CacheInactive C4 压缩 entry + 磁盘 prefix
局部性依据顺序滑动窗口top-$k$ index 时间相似度稀疏激活 + SWA 复用策略
传输优化通用 PCIeFlashTrans / UVA分层内存池 + PD 分离
与算法耦合中(依赖 DSA top-$k$)高(依赖压缩比 $m, m'$)

知乎社区观点(2026-06):V4 的 KV-offload 策略与 DSV3.2 完全不同——不是简单扩大 ESS,而是围绕异构压缩 cache 重新设计内存层级;V3.2 上可叠加 Index Share + ESS,V4 则需要 HiSparse + 定制 layout。


6. 推理技术栈对照

技术适用版本类型链接
FlashMLAV3+Kerneldeepseek-ai/FlashMLA
DeepGEMM indexerV3.2+KernelDeepGEMM PR#200
DSpark + DeepSpecV4 Flash / Pro(线上)投机解码 / decode 吞吐DeepSpec · DSpark 专文
IndexCache (Index Share)V3.2, GLM-5Infra 补丁THUDM/IndexCache
ESS(百度百舸)DeepSeek-V3.2 / V3.2-ExpLatent-Cache offloadarXiv:2512.10576
SGLang / vLLM recipes全系列serving各模型 README

7. 与本仓库其他专题的关系

优化方向:各专题在 §1.1 模型 / 架构-train / 架构-infer 分类 中的落点见该表「工作一览」。

专题关系
Engram另一条稀疏轴(条件记忆查表),与 MoE 正交;可 offload 到 Host/CXL
Engram 系列导读Engram / CXL Pooling / Tiny-Engram 深度笔记
DSA 系列 · ESS 概念 · Index ShareV3.2 稀疏注意力 + 推理 infra 补丁(与 §3.6 / §5.2 对应)
DSpark / DeepSpecV4 投机解码 线上加速;与 KV/offload 正交(§3.7 / §6)
Visual PrimitivesV4-Flash 多模态:visual primitives CoT + ViT;CSA 压视觉 KV(§3.8)
DeepSeek-R1 训练管线R1 四阶段;RLVR 概念

8. 参考资料

  1. DeepSeek-AI. DeepSeek-V3 Technical Report. arXiv:2412.19437, 2024.
  2. DeepSeek-AI. DeepSeek-V3.2: Pushing the Frontier of Open Large Language Models. arXiv:2512.02556, 2025.
  3. DeepSeek-AI. DeepSeek-V3.2-Exp: Boosting Long-Context Efficiency with DeepSeek Sparse Attention. 2025.
  4. Chen et al. ESS: An Offload-Centric Latent-Cache Management Architecture for DeepSeek-V3.2-Exp. arXiv:2512.10576, 2025.
  5. Bai et al. IndexCache: Accelerating Sparse Attention via Cross-Layer Index Reuse. arXiv:2603.12201, 2026.
  6. DeepSeek-AI. DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence. arXiv:2606.19348, 2026.
  7. Together.ai. Serving DeepSeek-V4: why million-token context is an inference systems problem. 2026.

DeepSeek 算法线:MLA → DSA → CSA/HCA + mHC

← 中文导读 · ← 仓库首页(EN) · 更新:2026-06-27 ← 演进总览 §1 · 基础设施线导读 · MoE 线导读 · 版本梗概索引 · 《ds-技术报告》读本

V3 发布之后,DeepSeek 在 注意力与残差路径 上的算法演进可概括为(与 演进总览 §1 正文内联一致):

MLADSA 稀疏注意力CSA/HCA 混合压缩注意力 + mHC

本文是这条 算法线 的专题导读与双向跳转 hub;全景时间线(含 infra 线)见 版本演进总览


1. 演进链

阶段核心机制首发 / 定型版本本地文档论文
① MLAK/V 压入低维 latent 再缓存;Core 仍做多头注意力V2(2024-05)→ V3/R1/V3.1 沿用MLA 低秩注意力2405.04434
② DSALightning Indexer 选 top-$k$ → 仅对 $k$ 个 latent 做 MLAV3.2-Exp / V3.2(2025)DSA 稀疏注意力 · DSA 逻辑详解2512.02556
③ CSA / HCA4:1 / 128:1 压缩 KV + 内嵌 indexer;百万 tokenV4(2026)CSA / HCA · DeepSeek-V42606.19348
④ mHC残差 Hyper-Connections → 双随机流形约束V4 落地mHC(含 §3 双随机流形)· HC 基础2512.24880

注意:mHC 改的是 残差路径(与 Attention / KV 正交),在演进总览里与 CSA/HCA 并列 标注,便于对照 V4 全架构;详见 mHC §7


2. 阅读顺序

  1. MLA 低秩注意力 — latent KV 压缩基座
  2. V3.1 Hybrid — Prefill MHA / Decode MQA(DSA 前置)
  3. DSA 梗概逻辑详解Lightning Indexer
  4. CSA/HCA 混合压缩注意力 — 4:1 稀疏 + 128:1 dense
  5. V4 梗概 — 两个规格、MoE、训练与 infra 总览
  6. Hyper-Connections(HC) — 多路残差流基础
  7. mHC 流形约束超连接 — V4 残差组件

外部解读Raschka 要点速读 §3–4 MLA/DSA · §8 mHC


3. 节点间关系

关系
MLA → DSAMLA 结构不变;在 latent 序列上加 indexer + top-$k$ 稀疏选择
DSA → CSA/HCADSA 的「先选再看」思想延续;V4 先做 token 块压缩 再在压缩序列上稀疏 / dense
CSA/HCA ⊥ mHC前者改 Attention / KV;后者改 残差拓扑,V4 同期引入

4. 与 infra 线的交叉

完整 基础设施线基础设施线导读

算法阶段常见 infra 补丁文档
DSAIndexer/Latent 异构 cache、Index Share、ESSinfra 线 §②–④
V4 CSA/HCAHiSparse、磁盘 prefix cache、异构 KV layoutinfra 线 §⑤ · KV layout · HiSparse · 磁盘 prefix

MoE 线MoE 线导读


5. 反向引用

节点文档文首应含
MLA 低秩注意力[← 算法线导读](05-算法线导读.md)
DSA 稀疏注意力同上 + 上游 MLA、下游 V4
CSA / HCA同上 + 上游 DSA、下游 infra
DeepSeek-V4同上 + 链 CSA/HCA 专文
mHC同上 + 说明残差路径角色

维护约定见 DeepSeek 版本演进线文档引用约定

DeepSeek 基础设施线:MLA KV → 异构 Cache → Index Share → ESS → V4 HiSparse

← 中文导读 · ← 仓库首页(EN) · 更新:2026-06-27 ← 演进总览 §1 · 算法线导读 · MoE 线导读 · 版本梗概索引 · 《ds-技术报告》读本

V3 发布之后,DeepSeek 推理侧 KV cache 与 offload 的演进可概括为(与 演进总览 §1 正文内联一致):

标准 MLA KV cacheIndexer/Latent 异构 cacheIndex ShareESS offloadV4 异构 KV + HiSparse

本文是这条 基础设施线 的专题导读与双向跳转 hub;算法侧演进见 算法线导读,全景时间线见 版本演进总览


1. 演进链

阶段核心机制适用版本本地文档论文 / 归属
① 同质 MLA KV单类 latent cache;整条序列同格式V2/V3/R1/V3.1MLA 低秩注意力 · 演进 §5.1MLA 2405.04434
② Indexer/Latent 异构DSA 把 cache 拆成 Indexer-Cache + Latent-CacheV3.2DSA稀疏注意力§异构 KV · DSA 逻辑详解DSA 2512.02556
③ Index Share跨层复用 top-$k$ index;减 indexer 重复计算V3.2 / GLM-5(纯 infraIndex Share 梗概 · Index Share 逻辑详解2603.12201(清华 + 智谱)
④ ESS offloadLatent-Cache → CPU;Indexer 常驻 GPU;稀疏 prefetchV3.2 / GLM-5(纯 infraESS Latent offload · ESS 论文梗概2512.10576(百度百舸)
⑤ V4 异构 KV + HiSparseCSA/HCA/SWA/Indexer/tail 多类 cache;C4 offload + 磁盘 prefixV4CSA/HCA 算法 · DeepSeek-V4 梗概§推理 infra · KV layout · HiSparse · 磁盘 prefix2606.19348
⑥ 投机解码 / DSparkMTP 原生 + DSpark 线上;唯一专文V4 Flash/Pro 预览引擎投机解码与 DSparkDeepSpec

③ 与 ④ 并列:二者都依赖 ② 异构 cache,分别优化 indexer 算力Latent 显存;可 同开⑥ 与 ①–⑤ 正交:DSpark 优化 decode 步吞吐,不改变 KV 布局。


2. 阅读顺序

  1. MLA 低秩注意力 — 理解 同质 latent KV 基线
  2. DSA 梗概 §异构 KV — Indexer/Latent 分裂
  3. Index Share 梗概逻辑详解 — 跨层 index 复用
  4. ESS 概念论文梗概 — Latent offload
  5. V4 §推理 infra — 异构 cache 总览
  1. 投机解码与 DSpark唯一入口(MTP、自测、DSpark、MTP-1)

对照表演进总览 §5.4 三代 offload 对比


3. 节点间关系

关系
① → ②DSA 算法改动 使 cache 天然分为 Indexer / Latent 两类
② → ③Index Share 只优化 indexer 路径;不改 Latent 布局
② → ④ESS 只 offload Latent-Cache;Indexer 必须 GPU 常驻
③ ⊥ ④正交:一个省算、一个省显存;V3.2 上可叠加
④ → ⑤V4 非 ESS 简单放大;围绕 CSA/HCA/SWA 重做 内存层级

4. 与算法线的交叉

infra 阶段依赖的算法组件文档
② 异构 cacheDSA(Lightning Indexer + Core MLA)算法线 §②
⑤ V4 HiSparseCSA/HCA 压缩 entryCSA / HCA · 算法线 §③

算法线完整导读见 算法线导读MoE 线MoE 线导读


5. 反向引用

节点文档文首应含
MLA 低秩注意力[← 基础设施线导读](06-基础设施线导读.md)
DSA 稀疏注意力同上 + 下游 Index Share / ESS
Index Share 梗概同上 + 并列 ESS
ESS Latent offload同上 + 并列 Index Share
DeepSeek-V4同上 + 说明与 V3.2 ESS 差异
V4 KV Layout · V4 HiSparse · V4 磁盘 Prefix CacheV4 infra 三专题;文首链回 §5.3
投机解码与 DSpark投机解码 / DSpark 唯一专文

维护约定见 DeepSeek 版本演进线文档引用约定

DeepSeek MoE 线:稠密 FFN → DeepSeekMoE → aux-loss-free → Hash MoE

← 中文导读 · ← 仓库首页(EN) · 更新:2026-06-27 ← 演进总览 §1 · 算法线导读 · 基础设施线导读 · V1→V3 演进 · 版本梗概索引 · 《ds-技术报告》读本

DeepSeek 在 FFN / 专家路由 上的演进可概括为(与 演进总览 §1 正文内联一致):

稠密 FFN → DeepSeekMoEaux-loss-free 路由 + $L_{\mathrm{Bal}}$Hash MoE + FP4

本文是 MoE 线 专题导读;Attention 侧见 算法线导读,KV/offload 见 基础设施线导读


1. 演进链

阶段核心机制定型版本本地文档论文
① 稠密 FFN全参数 SwiGLU;无稀疏激活V1(2024-01)DeepSeek-LLM V12401.02954
② DeepSeekMoE细粒度 routed + shared experts;softmax 路由V2(2024-05)DeepSeekMoE · DeepSeek-V22405.04434
③ aux-loss-freesigmoid affinity + 动态 bias $b_i$;无 aux loss 主均衡V3(2024-12)→ V3.2aux-loss-free MoE 路由 · DeepSeek-V32412.19437 §2.1
④ $L_{\mathrm{Bal}}$序列内 $f_i P_i$ 互补兜底;极小 $\alpha$V3 起序列均衡损失同上 Eq. 17–20
⑤ Hash MoE + FP4前几层 Hash-routed MoE;routed expert FP4 + QATV4(2026)Hash MoE + FP4 · DeepSeek-V42606.19348

③ 与 ④ 互补:aux-loss-free $b_i$ 管 **batch 级**主均衡;$L_{\mathrm{Bal}}$ 防 单序列内 expert 打穿


2. 阅读顺序

  1. V1 正文 — 稠密基线
  2. DeepSeekMoE 架构 — 细粒度 routed + shared(Figure 2 优化逻辑 · Fine-grained vs GShard
  3. V2 梗概 — MLA + MoE 版本落地(236B/21B)
  4. V3 梗概 — 256 / 8 act 旗舰化
  5. aux-loss-free 路由逻辑$L_{\mathrm{Bal}}$ 详解
  6. Hash MoE + FP4 — Hash 路由与 FP4 量化
  7. V4 梗概 — 两个规格、Attention、训练与 infra 总览

前代三代对照:V1→V3 演进 §3.2 FFN


3. 节点间关系

关系
① → ②V2 用 条件计算 替换稠密 FFN,稀疏激活降训练/推理 FFN 成本
② → ③V3 扩专家数(256/8)并改 sigmoid + bias 路由,去掉 aux loss 主路径
③ + ④$L_{\mathrm{Bal}}$ 不替代 aux-loss-free,仅序列内安全网
③ → ⑤V4 继承 DeepSeekMoE 框架;前几层改 Hash 路由,并 FP4 量化 routed expert

4. 与 Attention / infra 线的交叉

MoE 阶段正交模块文档
全阶段Attention / KV算法线 · 基础设施线
V3.2+DSA / Index Share不改 MoE 路由权重形状
V4mHC 残差mHC — 子层前后混合,不替代 expert 选择

5. 反向引用

节点文档文首应含
DeepSeekMoE[← MoE 线导读](07-MoE线导读.md)
DeepSeek-V2[← MoE 线导读](07-MoE线导读.md)
DeepSeek-V3同上
aux-loss-free MoE 路由同上 + 上游 DeepSeekMoE
序列均衡损失同上 + 主文档 aux-loss-free
Hash MoE + FP4同上 + 上游 aux-loss-free
DeepSeek-V4同上 + 链 Hash MoE 专文

维护约定见 版本演进线文档引用约定

DeepSeek V1 → V2 → V3:前代到旗舰基座

更新:2026-06-25 ← 全系列演进总览 · V1 正文 · V2 · V3


1. 三代在系列中的位置

DeepSeek 开源主线可粗分为两段:

  1. V1 → V2 → V3(2024):从稠密双语基座,到 MLA + MoE 效率架构,再到 规模化旗舰 MoE(671B)
  2. V3.1 → V3.2 → V4(2025–2026):在同一 V3 权重架构上 post-train、加 DSA、再 架构大步进

本文梳理第一段:V1 → V2 → V3


2. 对照总表

版本时间机构arXiv总参 / 激活上下文注意力FFN预训练
DeepSeek-LLM V12024-01DeepSeek2401.029547B / 7B;67B / 67B4KMHA / GQA稠密 SwiGLU2T
DeepSeek-V22024-05DeepSeek2405.04434236B / 21B128KMLADeepSeekMoE(6 routed + shared)8.1T
DeepSeek-V32024-12DeepSeek2412.19437671B / 37B128KMLA(同 V2 族)MoE 256 / 8 act + aux-loss-free14.8T

3. 演进逻辑

3.1 注意力:标准 GQA → MLA

V1 GQA → V2/V3 MLA latent KV 压缩

图示详情

  • V2 首创 MLA2405.04434);V3 沿用同一 latent 格式(MLA 详解
  • V3.1 再在 Prefill/Decode 间切换 MHA/MQA 模式;V3.2 叠加 DSA — 均属 V3 代之后,不在 V1–V3 段

3.2 FFN:稠密 → MoE → 大规模 aux-loss-free MoE

代际做法
V1全参数激活;67B 用 加深(95 层) 而非单纯加宽 FFN
V2DeepSeekMoE:160 routed,每 token 6 个 + shared;稀疏激活降训练/推理 FFN 成本(MoE 线 §②
V3扩到 256 experts / 8 activated;路由改为 sigmoid + 动态 biasaux-loss-free),并加 MTP 辅助头

3.3 规模与数据:scaling laws → 产品化旗舰

代际训练叙事
V1系统研究 IsoFLOP / batch-LR scaling;7B/67B 同训 2T 双语语料
V28.1T 多源语料;证明 21B 激活可打过 67B 稠密
V314.8T + 完整后训练管线;671B 成为 R1 / V3.1 / V3.2 的共同架构母版

4. 能力代际

V1 → V2 → V3 能力代际及 R1 / V3.1 / V3.2 分叉

图示详情


5. 推理 infra 代际差异

维度V1V2V3
KV 格式标准 GQA/MHAMLA latentMLA latent(同 V2)
引擎适配通用 HF/vLLM需 MLA / MoE 定制FlashMLA、DeepGEMM、block-size=1
长上下文瓶颈4K 上限128K latent 线性涨同左;V3.2 才拆 Indexer/Latent

6. 阅读顺序

  1. V1 正文(DeepSeek-LLM 完整译文)
  2. DeepSeekMoE 架构 · V2 梗概 · MLA 前向流程图
  3. V3 梗概 · 演进总览 §3
  4. 后续代际:R1V3.1V3.2V4

7. 参考

  1. DeepSeek-AI. DeepSeek LLM: Scaling Open-Source Language Models with Longtermism. arXiv:2401.02954, 2024.
  2. DeepSeek-AI. DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model. arXiv:2405.04434, 2024.
  3. DeepSeek-AI. DeepSeek-V3 Technical Report. arXiv:2412.19437, 2024.

DeepSeek 各版本梗概

更新:2026-06-25 ← 中文导读 · ← 仓库首页(EN) · 版本演进总览 · 算法线导读 · 基础设施线导读 · MoE 线导读

每篇一页纸梗概:定位、核心改动、infra 关注点、上下游关系。

| 算法线 | 算法线导读 | MLA → DSA → CSA/HCA + mHC 专题 hub | | 基础设施线 | 基础设施线导读 | MLA KV → 异构 Cache → Index Share → ESS → V4 HiSparse | | MoE 线 | MoE 线导读 | 稠密 FFN → DeepSeekMoE → aux-loss-free → Hash MoE |

版本文档一句话
V1DeepSeek-LLM V1DeepSeek-LLM 完整中文译文(7B/67B;Figure 2–5 / Table 3–4)
V1 BBPEV1 BBPE 词表Byte-level BPE 词表、预分词规则、102,400 embedding
V2DeepSeek-V2236B/21B;MLA + DeepSeekMoE 首次引入;128K
V1→V3V1→V3 前代演进前代三代对照与演进逻辑
V3DeepSeek-V3671B MoE + MLA 基座,开源旗舰起点
V3 FP8V3 FP8 动态量化训练侧 FP8 块级动态 scale + FP32 累加提升
R1DeepSeek-R1V3-Base + RLVR;架构不变
RLVRRLVR可验证奖励 + GRPO;R1 后训练核心
MLAMLA 低秩注意力latent 压缩 KV;前向流程图(Eq. 37–47)
DeepSeekMoEDeepSeekMoE细粒度 routed + shared;V2 首发、V3 旗舰化
MoE 路由aux-loss-free MoE 路由aux-loss-free 动态 bias 负载均衡(V3 论文 Table 5)
Seq-wise $L_{\mathrm{Bal}}$序列均衡损失单序列内 $f_i P_i$ 互补均衡(Eq. 17–20)
V3.1DeepSeek-V3.1Hybrid 推理,无架构变更,128K
V3.2DeepSeek-V3.2DSA 稀疏注意力,长上下文效率拐点
DSADSA 稀疏注意力indexer + top-$k$ + Core MLA;完整逻辑
Index ShareIndex Share 梗概IndexCache 纯 infra 补丁,社区称「V3.3」
ESSESS Latent offloadLatent-Cache CPU offload;论文梗概

推理答疑答疑索引(如 H2D / D2H

DSA / Index Share 逻辑详解DeepSeek DSA 与 Index Share 系列

| mHC | mHC | 双随机流形约束残差超连接(含 §3 流形推导);V4 落地 | | Hyper-Connections | Hyper-Connections | $n$ 路并行残差流 + pre/post/comb;mHC 前置(HC 子专文) | | CSA / HCA | CSA / HCA | 4:1 稀疏 + 128:1 dense 混合压缩注意力;V4 算法线 ③ | | Hash MoE + FP4 | Hash MoE + FP4 | 前几层 Hash 路由 + routed expert FP4;MoE 线 ⑤ | | Muon | Muon 优化器 | 矩阵正交化优化器;V4 训练侧替换大部分 AdamW | | V4 | DeepSeek-V4 | V4-Pro / V4-Flash 梗概,1M context | | V4 KV layout | V4 KV Layout | Classical + State 双池 | | V4 HiSparse | V4 HiSparse | inactive C4 CPU offload;~3× KV 容量 | | V4 磁盘 Prefix | V4 磁盘 Prefix Cache | CSA/HCA 落盘 + SWA 三档策略(§3.5.2) | | DSpark / 投机解码 | 投机解码与 DSpark | 唯一专文(MTP + 自测 + DSpark + MTP-1) |

DeepSeek 技术报告与外部解读

← 中文导读 · ← 仓库首页(EN) · 版本梗概 · 演进总览 · Raschka V3→V3.2 解读

本目录存放 官方技术报告摘要第三方深度解读

文档类型说明
V1→V3 前代演进本地总览V1 → V2 → V3 前代演进
DeepSeek-LLM V1精读DeepSeek-LLM V1 完整中文译文(2401.02954;Figure 2–5 / Table 3–4)
版本演进总览本地总览全系列 V1→V4 算法线 + infra 线
算法线导读算法线导读MLA → DSA → CSA/HCA + mHC 专题 hub
基础设施线导读基础设施线导读MLA KV → 异构 Cache → Index Share → ESS → V4 HiSparse
MoE 线导读MoE 线导读稠密 FFN → DeepSeekMoE → aux-loss-free → Hash MoE
Raschka 要点速读梗概Raschka 一文要点速读
Raschka 全文解析全文解析分章整理 + 关键表格嵌入
如何评价 DeepSeek 发布 DSpark?哪些亮点值得关注?外部解读酱紫君(GalAster):DSpark、半自回归、验证截断、MTP、draft 训练
投机解码与 DSpark投机解码全集MTP、外挂 draft 自测、DSpark、MTP-1(唯一入口
投机解码自测加速比重定向已并入上表专文 §3
文档系列结构审查结构审查双向引用、章节导航、概念/SVG 复用审计

CI 门禁bash scripts/doc_series_gate.shcheck_svgs + build_book + FP8 导航 spot-check)

外部原文A Technical Tour of the DeepSeek Models from V3 to V3.2(Sebastian Raschka,2025-12-03,更新 2026-01-01)

DeepSeek-V3 梗概

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §3.3 · ← MoE 线导读 · ← 版本目录 · Raschka 解读


定位

2024 年 12 月发布的开源旗舰 Base 模型,奠定 DeepSeek 后续全系架构基座。671B 总参数、每 token 激活 37B,支持 128K 上下文。同年 1 月基于同一架构推出 DeepSeek-R1RLVR 推理专精,DeepSeek-R1),架构不变、训练管线不同。

核心架构

组件要点
MLAMulti-Head Latent Attention:K/V 压入 latent 再缓存;前向流程图(Eq. 37–47)
DeepSeekMoE256 routed + shared experts,每 token 激活 8 个
MTPMulti-Token Prediction 辅助训练,推理可做 speculative decoding
路由aux-loss-free 负载均衡(动态 expert bias,无 aux loss 主均衡)

对比 V2:纯模型结构优化

边界:本节只讲 Transformer 内部 — MoE 路由、注意力、预测头、层内数据流;不含 DualPipe / FP8 训练框架、DeepEP、vLLM 调度、KV 量化等训推系统(见文末 排除项)。

一、MoE:路由与负载均衡

DeepSeek-V3 vs V2 MoE 结构创新:aux-loss-free 路由、256/8 专家池、Shared+Routed 融合

图示详情 · 详解:aux-loss-free · DeepSeekMoE

二、MLA 注意力

V3 沿用 V2 的 MLA 方程与 latent KV 格式($c_t^{KV}$ 512 + 共享 $k_t^R$ 64 进 cache;前向流程图)。相对 V2 的改动主要是 671B 母版下的 hidden / 层数 / 128K 上下文配比,而非全新 attention 算子。

V2V3
MLA 结构首次引入 latent KV同族,checkpoint 可续训
解耦 RoPE(content $d_h^C$ + RoPE $d_h^R$)有(Eq. 37–47)继承
128KV2 主模型已支持V3 14.8T 预训练巩固

易混Prefill MHA / Decode MQA HybridV3.1-Terminus 起;Lightning Indexer + top-$k$ 稀疏V3.2 DSA 起。二者均 不是 V3-Base 相对 V2 的架构差分。

三、MTP:Multi-Token Prediction

V3 相对 V2 全新 的训练目标头:主 loss + MTP 辅助头(链式预测 $t{+}2, t{+}3, \ldots$)。推理时可丢弃 MTP,也可 复用做 speculative decoding

V2V3
预测头单步 next-token主 loss + MTP 辅助头
预训练辅助 CE 提升数据效率
推理原生 投机解码(无需外挂第二套权重)

投机解码全集投机解码与 DSpark§2

补充阅读酱紫君(GalAster)知乎:DSpark 与投机解码全篇 — 投机背景、半自回归、MTP 融合、draft 训练;知乎原文

四、Transformer 主干层内微调

  • RMSNorm / 残差:随层数与 MoE 深度做实现级微调,适配 671B 稀疏 FFN 栈(细节见 2412.19437)。
  • 128K 原生配比:hidden、MLA latent 秩、MoE intermediate 等张量维随旗舰规模重配;词表扩至 128K(V1 BBPE 演进)。
  • MoE 层内张量布局:routed 按 expert 分组 gather/scatter 的 层内数据流 随 256/8 专家池优化(属模块前向结构,非 EP 通信库本身)。

附、FP8 动态量化

不属于上文「纯模型结构」;与 DualPipe / DeepEP 并列,支撑 671B 预训练。详解:FP8 动态量化专文

DeepSeek-V3 FP8 动态量化:细粒度块 scale 与 FP32 累加提升

图示详情 · FP8 专文

五、排除项

类别示例
推理引擎KV 量化、FlashMLA kernel、投机解码 调度、batch 调度
训练分布式DualPipe、FP8 动态量化、DeepEP、集群拓扑
纯工程显存框架、硬件协同

六、浓缩:V3 相对 V2 的三条结构线

  1. MoE 路由:aux-loss-free(bias 均衡 + sigmoid)+ 256/8 细粒度稀疏,激活占比 5.5% vs V2 8.9%
  2. MTP:多 token 并行预测头,预训练提效 + 推理可投机解码。
  3. MLA结构继承 V2;V3 价值在 671B / 128K / 14.8T 旗舰化落地(Hybrid、DSA 在后续版本)。

V2 ↔ V3 结构对照

维度DeepSeek-V2DeepSeek-V3
总参 / 激活236B / 21B671B / 37B
Routed / token160 / 6256 / 8
Shared / 层21
路由softmax + aux losssigmoid + biasaux-loss-free
MLA首次引入同族
MTP
预训练8.1T14.8T

MoE 线位置

方向文档
本节点(③ 256/8)DeepSeekMoE 架构 · MoE 线导读 §1
上游 ② DeepSeekMoEDeepSeekMoE(V2 首发)
同节点 ③④aux-loss-free MoE 路由 · 序列均衡损失

训练约 14.8T tokens;后训练含 SFT + RL。

推理 infra 关注点

  • KV cache 为 MLA latent 格式,与标准 GQA/MHA 不兼容
  • vLLM 等需 --trust-remote-code--block-size 1
  • 长上下文瓶颈:Latent-Cache 线性增长占满 HBM,限制 decode batch size
  • 通用 KV CPU offload 常因 MLA 自定义格式而不可用

上下游

方向关系
上游DeepSeek-V2(MLA 首次引入)· V1→V3 演进
下游R1RLVR)、V3.1(post-training)、V3.2(在 V3.1-T 上续训 + DSA)

参考

MLA前向计算流程

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §2 · ← 算法线导读 · ← 基础设施线导读 · ← V3 梗概 · V2 MLA 首发 · V3.1 Hybrid MLA 切换 · 下游 DSA · Raschka §3.1 MLA 论文:DeepSeek-V2 首次提出 MLA arXiv:2405.04434;V3/R1/V3.1/V3.2 沿用同一 MLA 结构


一句话

MLA 把 K/V 先压到低维 latent $c^{KV}$ 再写入 KV cache;推理时对 latent 升维 得到多头 K/V 的 content 部分;RoPE 的 R 分量维度小且 全头共享。相对标准 MHA,单 token cache 可从 $O(n_h d_h)$ 降到 $O(d_c^{KV} + d_h^R)$


流程图

MLA 前向计算流程(公式 37–47):Query / Key / Value 三分支、KV Cache 压缩对比(DeepSeek-V2 维数标注)

图示详情

为什么 1536 能变成 [128,128] 和 [128,64]? ——不是切分,是两个独立上投影矩阵放大后按头 reshape:

  • $q_t^C = W^{UQ} c_t^Q$: $[16384 \times 1536] \cdot [1536] \to [16384]$, 其中 $16384 = n_h \times d_h = 128 \times 128$ → reshape $[128, 128]$
  • $q_t^R = \mathrm{RoPE}(W^{QR} c_t^Q)$: $[8192 \times 1536] \cdot [1536] \to [8192]$, 其中 $8192 = n_h \times d_h^R = 128 \times 64$ → reshape $[128, 64]$

$[128,128]$ 里两个 128 含义不同:前一个是头数 $n_h$(共 128 个头),后一个是每头维度 $d_h$(每头 128 维),本配置恰好都等于 128。二者都是架构超参,不是从 1536 算出来的;1536 只决定矩阵的列数。(KV 侧同理:$c_t^{KV} = 512$ 经 $W^{UK}, W^{UV}$ 投影成 $[128,128]$。)

右边 $k_t^R = [64]$ 的 64 怎么来? ——$64 = d_h^R$(每头 RoPE 维度,架构超参);$W^{KR}: [64 \times 5120] \cdot h_t \to [64]$,再加上 RoPE。 关键: $k_t^R$ 没有头维度——所有 $n_h = 128$ 个头共享同一个 $[64]$(解耦 RoPE);而左边 $q_t^R$ 是每头各一份 $[128, 64]$。 正因为 K 的 RoPE 部分全局只存一份 $[64]$(不按头复制),KV 缓存才这么小——这是 MLA 省显存的另一半原因。

MLA 到底压缩了谁?如果不做压缩会变多大? ——下面三项就是 MLA 压缩/解耦的对象(格式:MLA 压缩后 $\Rightarrow$ 不压缩):

  • $c_t^Q$ 查询潜向量: $1536 \Rightarrow 16384\ (= n_h d_h)$, 约 11×; 不进缓存,省的是参数与计算量。
  • $c_t^{KV}$ KV 联合潜向量: $512 \Rightarrow 16384\ (= n_h d_h)$, 32×; ★进缓存 —— 这是省显存的核心。
  • $k_t^R$ 共享 RoPE 键: $64 \Rightarrow 8192\ (= n_h d_h^R)$, 128×; ★进缓存,靠全头共享(不按头复制),而非低秩压缩。

缓存总量: 标准 MHA $= 2n_h d_h = 32768$ → MLA 若不压缩 $= 16384 + 64 = 16448$(仅 MHA 一半) → 实际 MLA $= 512 + 64 = 576 \approx$ MHA 的 1/57

口诀:$h_t$ → Q 降维 $c^Q$ / KV 共享降维 $c^{KV}$ → Q/K 拆头 C + 共享 R(RoPE)→ V 仅 C → 注意力 → concat + $W^O$。


符号

符号含义典型值(V2 论文)
$d$ / $d_{\mathrm{model}}$隐状态维度5120
$n_h$注意力头数128
$d_h^C$单头 content 维128
$d_h^R$RoPE 维(全头共享)64
$d_h$单头 Q/K 维 $d_h^C + d_h^R$192
$d_c'$Q 侧 latent 秩1536
$d_c$ / $d_{\mathrm{latent}}^{KV}$KV 共享 latent 秩512

三分支计算

① Query

公式Shape
压缩$c_t^Q = W^{DQ} h_t$$[d] \to [d_c']$
升维 C$q_t^C = W^{UQ} c_t^Q$ → 按头拆 $q_{t,i}^C$$[n_h \cdot d_h^C]$
RoPE R$q_t^R = \mathrm{RoPE}(W^{QR} c_t^Q)$$[d_h^R]$,所有头共用
拼接$q_{t,i} = [q_{t,i}^C;, q_t^R]$$[d_h]$

② Key

公式Shape
KV 共享压缩$c_t^{KV} = W^{DKV} h_t$$[d_c]$ — K 与 V 共用
升维 C$k_t^C = W^{UK} c_t^{KV}$ → $k_{t,i}^C$按头拆
RoPE R$k_t^R = \mathrm{RoPE}(W^{KR} h_t)$来自 $h_t$(非 $c^{KV}$),全头共享
拼接$k_{t,i} = [k_{t,i}^C;, k_t^R]$$[d_h]$

③ Value

公式说明
复用 latent同 $c_t^{KV}$与 Key 分支共享降维结果
升维$v_t^C = W^{UV} c_t^{KV}$ → $v_{t,i}^C$无 RoPE、无 R 支路

④ 注意力与输出

$$ o_{t,i} = \sum_{j=1}^{t} \mathrm{Softmax}j\left( \frac{q{t,i}^\top k_{j,i}}{\sqrt{d_h^C + d_h^R}} \right) v_{j,i}^C $$

$$ u_t = W^O, [o_{t,1};\ldots;o_{t,n_h}] $$


KV Cache 里到底存什么

标准 MHAMLA(推理)
每 token 缓存$n_h$ 份 K + $n_h$ 份 V$c^{KV}$ + $k^R$(共享)
典型字节量(上表维度)$2 \times n_h \times d_h^C \approx 32768$ 维量级$d_c + d_h^R = 512 + 64 = 576$
压缩比约 1/57

推理时从 cache 读出 $c_j^{KV}$ 再乘 $W^{UK}$、$W^{UV}$ 现场升维;多一次矩阵乘,换显存。

V3.1 Hybrid:Prefill 时 Q/K可按 MHA 式展开 latent;Decode 时 MQA 式共享 latentcache 布局仍是 MLA latent,切换的是展开方式。


基础设施线位置

方向文档
本节点(① 同质 MLA KV)基础设施线导读 §1
下游 ② 异构 cacheDSA稀疏注意力§异构 KV

算法线位置

方向文档
本节点(① MLA)算法线导读 §1
下游 ② DSADSA 稀疏注意力(MLA 结构不变,加稀疏选择)
下游 ③ CSA/HCACSA / HCA · DeepSeek-V4(新注意力,不再单一 MLA latent)

与后续版本

版本MLA 变化
V3 / R1 / V3.1稠密 MLA attention
V3.2 + DSAMLA 不变indexer 在 latent 序列上选 top-$k$Core 仍做 MLA
V4CSA/HCA 等 新注意力,不再单一 MLA latent · DeepSeek-V4

延伸

资源说明
MLA前向计算流程(含 PyTorch 对照)更长的 shape 推演与 mla_forward.py
FlashMLAV3+ 推理 kernel
DeepSeek-V3V3 梗概中的 MLA 一行

论文:V2 2405.04434 · V3 2412.19437

DeepSeekMoE 架构

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §2 · ← MoE 线导读 · V2 首发版本 · V3 旗舰化 · aux-loss-free 下游 论文V2 arXiv:2405.04434 · V3 arXiv:2412.19437 §2.1


一句话

DeepSeekMoE = DeepSeek 自研的 细粒度 routed experts + shared experts FFN 稀疏激活框架:每 token 只激活少量 routed expert,并 始终保留 shared expert 路径;V2(2024-05)首次引入,V3 / R1 / V3.1 / V3.2 沿用同一 MoE 骨架,V3 起路由改为 aux-loss-free,V4 前几层改 Hash 路由


相对稠密 FFN 的动机

稠密(V1)DeepSeekMoE
每层 FFN 全参数激活top-$K$ routed + shared 参与计算
容量 ↔ 算力线性绑定总参大、激活参小(如 236B / 21B)
无 expert 路由负载均衡(V2 softmax 系 → V3 aux-loss-free)

V2 论文相对 67B 稠密:训练成本 -42.5%、生成吞吐 5.76×(同参数量级对比语境见 DeepSeek-V2)。


优化逻辑:从常规 MoE 到 DeepSeekMoE

V2 技术报告 §2.2 将 DeepSeekMoE 概括为两步改进(引自 Dai et al., 2024):

  1. Fine-grained expert segmentation(细粒度专家切分) — 把粗专家拆小,在相同激活算力下提高组合灵活性;
  2. Shared expert isolation(共享专家隔离) — 固定激活 shared expert 承担通用知识,routed expert 专注特化,减轻冗余与「参数竞争」。

论文用三张子图 (a)→(b)→(c) 说明:每一步都尽量保持每 token 激活的 FFN 参数量 / FLOPs 不变,只改「专家怎么切、怎么路由」。

Figure 2 — Illustration of DeepSeekMoE:(a) 常规 Top-2 (b) 细粒度切分 (c) Shared Expert 隔离

直接打开 Figure 2

来源:DeepSeek-V2 论文 Figure 2 — Illustration of DeepSeekMoE。蓝 = routed expert;绿 = shared expert;黄 = Router。

常规 Top-$K$ 路由

设定
专家池$N$ 个 routed expert
每 token 激活$K=2$(经典 Top-2 MoE,如 GShard / Switch 系)
数据流Hidden → Router 选 2 个 expert → 加权求和 → 输出

局限:专家粒度粗,每个 expert 体积大;Top-2 组合空间只有 $\binom{N}{2}$ 种,特化不够细——不同 token 往往被迫共用同一套「大块」知识。

+ 细粒度专家切分

相对 (a) 的变化
专家池同样总参下,$N$ 个大 expert → $2N$ 个小 expert(每个约一半宽度)
每 token 激活$K=4$ routed(数量翻倍)
算力约束激活 expert 个数 × 单 expert 大小 ≈ 与 (a) 相同 → FLOPs 持平

直觉:用「更多、更小」的积木拼 FFN;每 token 仍只付固定算力,但可访问的组合从「选 2 大块」变成「选 4 小块」,表达更灵活、特化更准。 V2 产品配置是这一思想的规模化:单层 160 routed、每 token 6 routed(见下表),而非示意图里的 $N/2N$ 玩具数。

答疑Fine-grained 为何优于 GShard? — 组合数 $\binom{N}{K}!\to!\binom{mN}{mK}$、IsoFLOP 切分与训练机制

+ Shared Expert 隔离

相对 (b) 的变化
Shared expert划出 $N_s$ 个 shared(图中 1 个;V2 为 2 个/层),每个 token 必过,不经 Router
Routed 选择Router 只在剩余 routed 池里 Top-$K_r$;示意 $K_r=3$
总算力$N_s + K_r = 1 + 3 = 4$,仍与 (b) 的 4 routed 激活量同级

为什么要 shared? 许多 token 都需要的通用 FFN 模式(语法、高频搭配等)若全塞进 routed expert,会占掉 routed 容量,导致:

  • 多个 routed expert 学重复(knowledge redundancy);
  • 特化 expert 抢不过通用模式,负载均衡更难。

Shared 路径隔离通用知识,routed 专注长尾 / 领域特化——论文称这能提升 expert specialization 与知识获取精度。

三步合起来:设计不变量

不变量含义
激活 FFN 预算(a)(b)(c) 示意中每 token 激活 expert 总数 × 单 expert 宽度大致恒定
总参可扩总 expert 数可随层加宽加深,但每 token 只走 sparse 子集
DeepSeekMoE = (b) + (c)细粒度 routed shared 与 routed 分工

前向公式

对第 $t$ 个 token 的 FFN 输入 $u_t$,输出 $h_t'$ 为 残差 + shared 支路 + routed 支路

$$ h_t' = u_t + \sum_{i=1}^{N_s} \mathrm{FFN}i^{(s)}(u_t) + \sum{i=1}^{N_r} g_{i,t},\mathrm{FFN}_i^{(r)}(u_t) $$

其中 routed 门控:

$$ g_{i,t} = \begin{cases} s_{i,t}, & s_{i,t} \in \mathrm{TopK}\big({s_{j,t}}{j=1}^{N_r},, K_r\big) \ 0, & \text{otherwise} \end{cases}, \quad s{i,t} = \mathrm{Softmax}_i(u_t^\top e_i) $$

符号含义
$N_s$shared expert 数(V2:2/层)
$N_r$routed expert 数(V2:160/层)
$K_r$每 token 激活 routed 数(V2:6
$e_i$第 $i$ 个 routed expert 的 routing centroid(非 FFN 权重)

答疑为何叫 centroid 而非 gate-weight? — affinity / gate 分工与 V3 选择-门控解耦

Shared 项 $g_{i,t}$ 门控 — 与图中 Expert 1(绿)始终接通一致。

与 V2 工程配置的对应

示意图用 $N,,2N,,K=2/4/3$ 做教学缩放;DeepSeek-V2 真实超参:

示意 (c)DeepSeek-V2
1 shared + 3 routed2 shared + 6 routed / token / 层
softmax Router同左;另加 device-limited routing(§2.2.2:每 token 目标 expert 最多跨 $M$ 台设备,$M\ge 3$ 时精度与无限制 Top-$K$ 接近)
负载均衡Expert / device / comm 三级 aux loss(V3 起路由改为 aux-loss-free,MoE 骨架仍为 shared + fine-grained routed)

结构要点

  1. Fine-grained routed experts:单层 routed 数量 显著多于 早期 MoE(V2:160),单 expert 更小 → 见上文 §优化逻辑 (b)。
  2. Shared experts:每层 恒激活 shared FFN(V2:2 个),与 routed 输出相加 → 见 §优化逻辑 (c)。
  3. Per-token top-$K_r$:V2 每 token 6 routed;V3 8 routed / 256 池。
  4. 路由演进:V2 softmax + aux balance loss → V3 aux-loss-free + $L_{\mathrm{Bal}}$

各版本配置

版本总参 / 激活routed 规模每 token 激活 routedshared路由
V2236B / 21B160 routed / 层62 / 层softmax
V3671B / 37B256 routed / 层8aux-loss-free
V41.6T / 49B 等继承 V3 框架同族前几层 Hash MoE + FP4

版本文档V2 · V3 · V4


MoE 线位置

方向文档
本节点(② DeepSeekMoE)MoE 线导读 §1
上游 ①稠密 FFN(概念阶段;V1 产品实例见 DeepSeek-LLM V1
下游 ③④aux-loss-free MoE 路由 · 序列均衡损失
下游 ⑤Hash MoE + FP4 · DeepSeek-V4

推理 infra 关注点

  • Expert Parallel(EP):routed expert 分片;负载不均时 GPU 空转 → 路由均衡是训练关键(答疑:EP 与 gather/scatter)。
  • Shared + routed 双路径:引擎需支持 shared 始终 on + 稀疏 routed gather/scatter。
  • V2 路由为 softmax 系;V3+ 为 sigmoid + 动态 bias,权重 checkpoint 不混用路由逻辑。

参考

aux-loss-free MoE 路由逻辑

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §3.3 · ← MoE 线导读 · ← DeepSeekMoE 上游 · ← V3 梗概 · 版本目录 论文DeepSeek-V3 arXiv:2412.19437 §2.1 · Megatron MoE aux loss free


一句话

aux-loss-free = MoE 不用(或几乎不用)辅助损失 逼专家均匀,而是在每个 routed expert 上维护一个 可学习的 routing bias $b_i$,按 batch 负载 动态加减 $b_i$ 来调 top-$K$ 路由;门控权重仍用原始 affinity $s_{i,t}$,避免 aux loss 伤害主任务 loss。

V3 起标配;V4 系仍沿用同一思路。


为什么 MoE 要「负载均衡」

问题后果
少数 expert 过热、多数闲置routing collapse(Shazeer et al., 2017)
Expert Parallel(EP)下 token 分布不均部分 GPU 空转、部分打满 → 算力浪费

因此几乎所有 MoE 都要某种 load balancing——关键是 用什么机制,以及会不会 牺牲模型质量


传统做法:auxiliary loss 及其矛盾

经典 Switch / GShard 路线在总 loss 里加 辅助损失 $L_{\mathrm{Bal}}$,惩罚专家负载不均(token 级或 sequence 级)。

优点缺点
实现简单、梯度直接推路由aux loss 过大 → 损害主任务表现(Wang et al., 2024a)
易与训练框架集成aux loss 过小 → 均衡不够,EP 效率差
sequence-wise aux 强制 每条序列内 专家均匀 → 抑制 按领域 specialization

DeepSeek-V3 论文 Table 5:纯 aux-loss 基线在多数 benchmark 上 不如 aux-loss-free。


aux-loss-free 核心逻辑

1. 路由分数 vs 门控值

DeepSeek-V3 MoE 对 routed experts 用 sigmoid affinity $s_{i,t}$,再对选中专家做归一化得到门控 $g_{i,t}$(与 V2 的 softmax 路由不同,见 V3 论文 §2.1)。

aux-loss-free 只改「谁进 top-$K$」,不改门控乘到 FFN 输出的数值:

是否加 bias $b_i$作用
Top-$K$ 选择✅ 用 $s_{i,t} + b_i$ 排序决定 token 去哪个 expert
门控 $g_{i,t}$❌ 仍用原始 $s_{i,t}$乘 expert 输出,参与前向/反传主 loss

这样 bias 是 纯路由调度旋钮,不直接扭曲 expert 输出的幅度。

2. 每个训练 step 末尾更新 $b_i$

监控 整个 batch(一步训练)上各 expert 的负载:

过载 b_i -= γ;欠载 b_i += γ

图示详情

$\gamma$ = bias update speed(V3 预训练:前 14.3T tokens 取 0.001,论文 §3.2)。

无 aux loss 梯度 参与均衡;均衡靠 启发式反馈 调 bias,主 loss 只负责「学得好不好」。

3. 公式

专家 $i$ 在 token $t$ 被激活,当且仅当 $s_{i,t} + b_i$ 落在 top-$K_r$ 集合内;否则 $g'{i,t}=0$。门控 $g{i,t}$ 仍由 $s_{i,t}$ 经 top-$K$ 内归一化得到。


与传统 aux loss 对比

维度auxiliary lossaux-loss-free(+ bias)
均衡信号加在 loss 上,反传进 router不改 loss;改 routing bias
均衡粒度常见 sequence-wise(每序列内均匀)默认 batch-wise(一步内整体均匀)
专家 specializationsequence 内被压平允许 不同领域 走不同专家
超参aux loss 系数 $\alpha$ 难调$\gamma$(bias 步长)
与主任务冲突大 $\alpha$ 伤性能论文 ablation:多数 benchmark 更优

表:V3 论文 Table 5 摘要

Small MoE

BenchmarkAux-Loss-BasedAux-Loss-Free
Pile-test (BPB↓)0.7270.724
BBH (EM)37.339.3
MMLU (EM)51.051.8
DROP (F1)38.139.0
GSM8K (EM)27.129.6
MATH (EM)10.911.1

Large MoE

BenchmarkAux-Loss-BasedAux-Loss-Free
Pile-test (BPB↓)0.6560.652
BBH (EM)66.767.9
HumanEval (Pass@1)40.246.3
GSM8K (EM)70.774.5
MATH (EM)37.239.6

论文结论:去掉纯 aux loss、改用 aux-loss-free 后,大多数评测一致更好


补充:sequence-wise auxiliary loss 仍在

aux-loss-free 不是完全不管极端倾斜。V3 还保留 互补的 sequence-wise balance loss $L_{\mathrm{Bal}}$,防止 单条序列内 专家极度失衡——但 主均衡机制 仍是 bias 方案。

详解序列均衡损失 — $f_i$、$P_i$ 如何在每条序列上统计、$f_i P_i$ 如何反传拉平负载、与 $b_i$ 的分工。

机制作用域角色
aux-loss-free biasbatch-wise主负载均衡($b_i \pm \gamma$,无梯度)
sequence-wise aux loss $L_{\mathrm{Bal}}$单序列兜底,$\alpha$ 极小;$\sum_i f_i P_i$ 反传 router

论文 §4.5.3:batch-wise(含 aux-loss-free)比 sequence-wise 更灵活,专家更易 按领域分化;1B/3B 实验上 batch-wise aux 与 aux-loss-free 的 val loss 可打平。sequence-wise 单独作主均衡时会 压平序列内 specialization(val loss 略差)。


推理时是什么

  • $b_i$ 在训练结束后 固定(推理不再按 step 更新)。
  • 路由仍按 训练结束时的 $s+b$ 选 expert;与训练一致。
  • Index Share / DSA无关——纯 MoE router 训练策略。

工程对应

概念Megatron 配置
aux-loss-free--moe-router-enable-expert-bias
bias 步长 $\gamma$--moe-router-bias-update-rate(如 1e-3
传统 aux loss--moe-router-load-balancing-type aux_loss / seq_aux_loss

DeepSeek-V3 细粒度 MoE + sigmoid router 在 Megatron侧常配合 FlexDispatcher + DeepEP 做 token dispatch


MoE 线位置

方向文档
本节点(③ aux-loss-free)MoE 线导读 §1
上游 ② DeepSeekMoEDeepSeekMoE
并列 ④ $L_{\mathrm{Bal}}$序列均衡损失
下游 ⑤ Hash MoEHash MoE + FP4 · DeepSeek-V4

在 DeepSeek 系列中的位置

版本MoE 路由
V3 / R1 / V3.1 / V3.2DeepSeekMoE + aux-loss-free(256 routed + shared,top-8)
V4论文仍写 auxiliary-loss-free;另改 score 函数(如 Sqrt(Softplus))等

演进总览表中「aux-loss-free 路由」即指此项,不是 Engram 或 DSA 的 index。


参考

序列均衡损失

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 · ← MoE 线导读 · ← aux-loss-free 主文档 · V3 梗概 论文DeepSeek-V3 arXiv:2412.19437 §2.1(Eq. 17–20);§4.5.3 batch vs sequence


一句话

V3 主均衡靠 batch-wise $b_i$ 启发式(aux-loss-free);$L_{\mathrm{Bal}}$ 是互补兜底:在 每条序列内 用极小 $\alpha$ 惩罚 $\sum_i f_i P_i$,梯度反传进 router,防单条序列里少数 expert 被「打穿」。


两条机制的分工

机制作用域更新方式角色
aux-loss-free $b_i$整个 training step 的 batchstep 末 $b_i \pm \gamma$,无梯度主均衡
$L_{\mathrm{Bal}}$单条序列$\alpha \sum_i f_i P_i$,反传 router兜底

论文 §4.5.3:sequence-wise 强制序列内更均匀 → 抑制按领域 specialization;batch-wise(含 aux-loss-free)更灵活(Fig. 9)。

MoE 线位置

方向文档
本节点(④ $L_{\mathrm{Bal}}$)MoE 线导读 §1
主机制 ③aux-loss-free MoE 路由

总公式与符号

一条序列(长度 $T$,$N_r$ 个 routed expert,每 token 激活 $K_r$ 个):

$$ \mathcal{L}{\mathrm{Bal}} = \alpha \sum{i=1}^{N_r} f_i , P_i \qquad \text{(Eq. 17)} $$

符号含义论文
$f_i$expert $i$ 的 实际负载(离散计数)Eq. 18
$P_i$expert $i$ 的 平均路由概率(连续、可微)Eq. 19–20
$\alpha$极小超参,几乎不伤主任务§2.1
$s_{i,t}$token $t$ 对 expert $i$ 的 sigmoid affinityEq. 15
$K_r T$整条序列的 routed 槽位总数

$f_i$ 与 $P_i$ 对照(先建立地图)

$f_i$$P_i$
问什么实际接了多少活?router 平均多想派给它多少?
怎么算数 top-$K$ 选中次数对每个 token 归一化 $s$,再 对 $t$ 求平均
可微吗否(计数);梯度经 $P_i$ 传入,直接反传 router
均匀时$f_i = 1$(本文记法;论文 raw $= 1/N_r$)$P_i = 1/N_r$

前置:「槽位」是什么?

MoE 每一层、对 一条序列

  • $T$ 个 token,每个 token 选 $K_r$ 个 routed expert
  • $K_r \times T$ 个槽位(slot)= 每次 expert 被选中的机会
T=4, K_r=2 → 共 8 个槽位

token1 → [A, B] token2 → [A, C]
token3 → [A, D] token4 → [B, C]

$f_i$ 数的是:这 8 个槽位里 expert $i$ 占几个。 $P_i$ 看的是:router 在每个 token 上对 $i$ 的归一化意愿,整条序列平均多少

batch 里 每条序列单独 算一套 $(f_i, P_i)$,不跨样本混合。


一、$f_i$:实际负载

核心:$f_i$ = 这条序列里 expert $i$ 分到的槽位,相对完全均匀水平的倍数;均匀时 $f_i = 1$。

公式

$$ f_i = \frac{N_r}{K_r T} \sum_{t=1}^{T} \mathbf{1}!\left( \text{expert } i \text{ 在 token } t \text{ 被选入 top-}K_r \right) $$

做什么结果
1每个 token 上,$i$ 进 top-$K_r$ 则 $\mathbf{1}=1$,否则 $0$逐 token 判断
2对 $t$ 求和$\mathrm{count}_i$ = 被选总次数
3$\mathrm{count}_i / (K_r T)$ 再乘 $N_r$$f_i$:相对均匀的倍数

归一化直觉

$$ \text{raw}_i = \frac{\mathrm{count}_i}{K_r T}, \qquad f_i = N_r \cdot \text{raw}_i $$

$f_i$含义
$= 1$刚好均匀(每 expert 约 $K_r T / N_r$ 次)
$> 1$过热
$< 1$偏冷;可为 $0$

论文写「均匀时 $f_i = 1/N_r$」指 raw 形态 $\mathrm{count}_i/(K_r T)$;与本文 $f_i = N_r \cdot \text{raw}_i$ 差一个 $N_r$,说的是同一件事。

实现注意:计数用 $s$ 还是 $s+b$?

环节分数
真实派活(Eq. 16)$s_{i,t} + b_i$ 取 top-$K_r$
论文 Eq. 18 写法示性函数写 $s_{i,t}$
工程(Megatron seq_aux_loss按真实 dispatch 计数($s+b$ 选中则 $\mathrm{count}_i{+}{+}$)

二、$P_i$:平均路由概率

核心:$P_i$ = 这条序列上,router 对 expert $i$ 的 归一化意愿 的时间平均;均匀时 $P_i = 1/N_r$。

公式

Step 1 — 原始 affinity

$$ s_{i,t} = \mathrm{Sigmoid}(\mathbf{u}_t^\top \mathbf{e}_i) \in (0, 1) \qquad \text{(Eq. 15)} $$

$\mathbf{u}_t$:token $t$ 的 FFN 输入;$\mathbf{e}_i$:expert $i$ 的路由向量。注意:这里用 $s$,不加 $b_i$

Step 2 — 在全体 expert 上归一化

$$ s'{i,t} = \frac{s{i,t}}{\displaystyle\sum_{j=1}^{N_r} s_{j,t}} $$

  • 分母是 全部 $N_r$ 个 routed expert,不是只在 top-$K_r$ 内
  • 对每个 token $t$,$\sum_i s'_{i,t} = 1$(概率分布)
  • $s'_{i,t}$ 可微,梯度可回传到 router

Step 3 — 对序列求平均

$$ P_i = \frac{1}{T} \sum_{t=1}^{T} s'_{i,t} $$

$P_i$含义
$= 1/N_r$router 对 $i$ 的意愿与其他 expert 相当
$> 1/N_r$router 系统性偏爱 $i$
$< 1/N_r$router 系统性冷落 $i$

$P_i$ 与门控 $g_{i,t}$ 的区别

$s'_{i,t}$ / $P_i$门控 $g_{i,t}$(Eq. 13–14)
归一化范围全部 $N_r$ 个 experttop-$K_r$ 内 的 $s$
是否进 loss$P_i$ 进入 $L_{\mathrm{Bal}}$乘 FFN 输出,进 主 loss
是否加 $b_i$不加top-$K$ 选择用 $s+b$,但 $g$ 仍用 $s$

$L_{\mathrm{Bal}}$ 通过 $P_i$ 调的是 router 的 全局偏好;门控 $g$ 只管选中 expert 的输出权重。


三、为什么乘 $f_i P_i$?

只惩罚 $P_i$只惩罚 $f_i$$f_i P_i$
router 可压低概率,top-$K$ 仍可能选它计数不可微,无法直接反传负载高 意愿高 → 惩罚最大
负载未必下来梯度压低 $s_{i,t}$,top-$K$ 与 $P_i$ 一起下来

Switch / GShard 经典结构:离散负载 × 连续概率 = 可微的负载均衡信号。

计算流水线(每条序列、每个 MoE 层)

MoE 前向积累 f_i/P_i → L_Bal → 反传 router

图示详情


四、完整手算示例

设定:$N_r=4,, K_r=2,, T=4$ → 8 个槽位;均匀目标每 expert 2 次

4.1 路由结果

token选中 expert累计 count
1A, BA:1 B:1
2A, CA:2 C:1
3A, DA:3 D:1
4B, CB:2 C:2
expert$\mathrm{count}_i$$f_i = \dfrac{4}{8}\times\mathrm{count}_i$状态
A3$1.5$过热(均匀是 2 次,拿了 3 次)
B2$1.0$均匀
C2$1.0$均匀
D1$0.5$偏冷

4.2 各 token 的 $s$ 与 $s'$

设每层 router 给出的 raw affinity(sigmoid 后):

token$s_{0,t}$$s_{1,t}$$s_{2,t}$$s_{3,t}$$\sum_j s_{j,t}$
10.900.700.400.302.30
20.850.400.750.202.20
30.900.300.350.602.15
40.500.800.700.252.25

token 1 归一化

$$ s'{0,1} = \frac{0.90}{2.30} \approx 0.391,\quad s'{1,1} \approx 0.304,\quad s'{2,1} \approx 0.174,\quad s'{3,1} \approx 0.130 $$

对 $t$ 求平均得 $P_i$

expert各 token 的 $s'_{i,t}$$P_i = \frac{1}{4}\sum_t s'_{i,t}$vs 均匀 $1/4=0.25$
A (0).391, .386, .419, .2220.355偏爱 ↑
B (1).304, .182, .140, .3560.246≈ 均匀
C (2).174, .341, .163, .3110.247≈ 均匀
D (3).130, .091, .279, .1110.153冷落 ↓

4.3 合并算 $L_{\mathrm{Bal}}$

(忽略 $\alpha$,只看 $\sum_i f_i P_i$)

expert$f_i$$P_i$$f_i P_i$解读
A1.50.3550.532负载高 + router 偏爱 → 惩罚最重
B1.00.2460.246正常
C1.00.2470.247正常
D0.50.1530.076本就偏冷,贡献小

$$ \sum_i f_i P_i \approx 1.10 $$

反传会 压低 A 的 $s_{0,t}$ → 后续 token 更少选 A,$P_0$ 与 $\mathrm{count}_0$ 一起下降。D 的 $f_3 P_3$ 很小,loss 几乎不阻止其他 expert 把活分给 D。


五、超参与总 loss

$\alpha$:论文取 极小值extremely small),$L_{\mathrm{Bal}}$ 只作安全网(对比 aux-loss-free Table 5 里大 $\alpha$ 的纯 aux-loss 基线)。

$$ \mathcal{L} = \mathcal{L}{\mathrm{main}} + \lambda{\mathrm{MTP}}\mathcal{L}{\mathrm{MTP}} + \alpha \sum{i} f_i P_i + \cdots $$

$L_{\mathrm{Bal}}$ 只动 router(经 $s_{i,t}$);不改 $b_i$ 启发式;不加在 expert FFN 上。


六、工程与场景

概念Megatron-LM
sequence-wise aux--moe-router-load-balancing-type seq_aux_loss
batch-wise auxaux_loss
aux-loss-free bias--moe-router-enable-expert-bias
场景说明
训练$b_i$ + $L_{\mathrm{Bal}}$ 并存;$\alpha$ 小
推理$L_{\mathrm{Bal}}$ 不参与;$b_i$ 固定

参考

DeepSeek-V3 FP8 动态量化

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §3.3 · ← V3 基座 · 论文 Figure 7 边界:属 训练侧 GEMM 数值/内核(与 DualPipe、DeepEP 并列),不是 Transformer 权重结构本身;V3 纯模型结构对比 刻意不含本节。


一句话

V3 在 FP8 Tensor Core GEMM 上用 块级动态 scale(fine-grained quantization) 抑制激活离群点误差,并 每隔 $N_c{=}128$ 次 MMA名词解释:MMA)把 Tensor Core 低精度累加 提升到 CUDA Core FP32 寄存器 再续算——在保持 FP8 吞吐的同时,把 671B 预训练做稳。


为何需要「动态」量化

问题后果V3 对策
激活 离群值(outliers)整块 FP8 动态范围被少数大值撑满,有效精度下降细粒度:每 $N_c$ 元素一块,独立 scale
Tensor Core 低精度长累加大量 FP8 MMA 后 partial sum 漂移周期性提升:每 $N_c$ MMA 进 FP32 累加
仅粗粒度 per-tensor scale大模型宽 hidden / 宽 expert 更易失真激活与权重 双侧 块 scale

答疑partial sum 漂移是什么、为何每 128 MMA 要提升 FP32?


Figure 7 两路逻辑

DeepSeek-V3 FP8 动态量化:细粒度块 scale 与 FP32 累加提升

图示详情

Fine-grained quantization

激活权重 均按长度 $N_c$ 分块

  1. 每块各自算 动态 scale $s_x$(激活)、$s_w$(权重);
  2. 块内元素量化到 FP8 后在 Tensor Core 做 GEMM / MMA,得到 低精度积
  3. CUDA Core 用 $s_x \cdot s_w$ 反量化 写回输出。

要点:scale 随块动态更新,离群只污染所在块,不拖垮整条 tensor。

实现:$s_x = \mathrm{absmax}(X_{\mathrm{block}}) / F_{\max}$($F_{\max}$ 为 FP8 可表示最大值;$s_w$ 同理);量化 $\mathrm{FP8}(x) = \mathrm{round}(x / s_x)$;MMA 输出在 CUDA Core 做 $\mathrm{out} \mathrel{+}= \mathrm{MMA}(\mathrm{FP8}(x), \mathrm{FP8}(w)) \cdot s_x s_w$。

Increasing accumulation precision

一次 GEMM 对应多轮 WGMMA(warp-group MMA):

  1. Tensor Core 内先用 低精度累加器 收 partial sum;
  2. 每累计 $N_c = 128$ 个 MMA 元素,把当前 partial 提升到 CUDA Core 的 FP32 寄存器 再累加;
  3. 下一轮 WGMMA 再从低精度路径开始,避免 全程 FP8/低精度 长链漂移。

要点:算在 TC、稳在 CUDA FP32——速度与 671B 训练可收敛性之间的折中。

实现:沿归约维 $K$ 维护 MMA 计数;每 128 步执行 acc_fp32 += promote(acc_tc); acc_tc = 0;GEMM 结束后再 acc_fp32 += promote(acc_tc) 写回 BF16/FP16 激活。

分工速查

机制实现落点关键参数
(a) 块 scale + 反量化量化在 GEMM 前;CUDA Core 乘 $s_x s_w$$N_c = 128$
(b) FP32 promotionTC 低精度 acc;CUDA Core FP32 续加128 MMA flush 一次

答疑partial sum 漂移与 (a)(b) 实现分工


硬件分工

单元职责
Tensor CoreFP8 MMA / GEMM;块内低精度乘加
CUDA Core乘 $s_x s_w$ 反量化;FP32 高精度累加

这与 V3 报告里 FP8 训练框架(配合 DualPipe 并行、DeepEP 通信)同属 训推系统层;换推理引擎 FP8 kernel(如自测 draft+FP8)是 另一套部署量化,数值策略不必与训练块 scale 完全相同。


在 V3 全景中的位置

层级示例本文
模型结构MLA、MoE 256/8、MTP
训练数值/内核FP8 GEMM、块 scale、FP32 promotion
训练并行DualPipe、DeepEP相关但另文
推理 infraMLA KV、投机解码、KV 量化否(推理 FP8 另论)

参考

RLVR

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §2 · ← R1 梗概 · Raschka §RLVR/GRPO 论文DeepSeek-R1 arXiv:2501.12948


一句话

RLVR = 在强化学习里 不用神经 reward model,而对 可程序/符号验证 的任务(数学答案、代码单测、格式规则)直接给 0/1 或规则分 作奖励;DeepSeek 用 GRPO 做优化(无 critic 的组内相对 advantage)。R1 = V3-Base 架构不变 + RLVR 后训练。


和 RLHF / GRPO 的关系

PPO vs GRPO:RLHF 神经 RM + Critic 与 RLVR 验证器 + 组内 baseline 对比

图示详情

路线奖励从哪来优化算法典型场景
RLHF人类偏好训练的 神经 RMPPO(需 critic)开放域对齐
GRPO任意标量奖励组内采样 $G$ 条,相对 baseline 算 advantage;无 critic省显存、易扩展
RLVR + GRPO规则 / 验证器(计算器、sympy、单测、格式检查)同上 GRPO数学、代码、可判定推理

同一条 prompt 采样 $G$ 次 rollout:每条用 verifier 打分(对/错、格式、语言)→ 组内减均值得 advantage → 更新 policy(R1 上即 V3-Base 权重)。

RLVR 省掉什么:不训、不依赖 reward model,减轻 reward hacking(模型讨好 RM 而非真做对题)。

RLVR 局限:只适合 答案可验证 的短程任务;开放域写作、主观 helpfulness 仍需 RM 或 LLM-as-judge(V3.2 后训练即 RLVR + 生成式 RM 混合)。


DeepSeek-R1 里的 RLVR

算法:GRPO

  • 同一 prompt 生成 $G$ 条 完整回答(R1 一阶段约 16 rollout / 题
  • 每条算规则奖励 → 组内相对 advantage(无 value network)
  • 配合 KL 到 reference、clip 等稳定训练

R1 奖励

奖励作用阶段
Accuracy / verifier数学、代码等 对错(sympy、单测等)R1-Zero、R1 一阶段 RL
Format思考/答案分隔、`` 等结构R1-Zero 起
Language consistency惩罚中英混杂,鼓励与问题同语言R1 二阶段 RL 起

两条产物

模型路径要点
R1-ZeroV3-Base → 纯 GRPO + RLVR(无 SFT 冷启动)推理能力 自发涌现(长度增长、自反思);可读性差
R1冷启动 SFT → RL → 拒绝采样 SFT → RL在 R1-Zero 能力上补 可读性、通用任务、安全

详见 R1 四阶段训练管线(含 Dev-1→R1 与 Table 3 指标)。


在 DeepSeek 系列中的位置

版本与 RLVR 关系
V3Base; RLVR
R1RLVR + GRPO 主路径;架构 同 V3
V3.1 / TerminusHybrid 对话;训练管线不同,非 R1 专用推理模型
V3.2继承 R1 系 GRPO 经验 + 生成式 RM(开放域)+ DeepSeekMath V2 过程奖励;Raschka 对比
V3-Base 后训练分叉:R1 专用推理 vs V3.1 Hybrid vs V3.2

图示详情


为何 R1 不改架构

RLVR 只改 后训练(采样、奖励、策略梯度),不动 MLA / MoE 结构。因此 R1 与 V3 权重形状、KV cache 格式、推理引擎配置一致——差异在 行为分布(更长 CoT、更强推理)。


延伸

资源说明
DeepSeek-R1R1 一页纸梗概
DeepSeek-R1 训练 Pipeline四阶段 + R1-Zero 详解
Raschka 全文解析 §3.2RLVR vs PPO vs GRPO 对照表
GRPO 长程任务局限社区讨论:GRPO 与长程任务局限

论文:R1 2501.12948 · V3 2412.19437

DeepSeek-R1 梗概

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §3.4 · ← 版本目录 · RLVR 详解 · Raschka §RLVR/GRPO


定位

2025 年 1 月发布,基于 DeepSeek-V3-Base推理专精 模型。架构与 V3 完全相同(671B / 37B activated / 128K);差异在 RLVR + GRPO 后训练,带火「可验证奖励强化学习」路线。

核心训练

组件要点
基座DeepSeek-V3-Base,零架构改动
RLVR规则/验证器奖励,无神经 RM → RLVR
GRPO组内相对 advantage,无 critic
R1-Zero纯 RL 探索路径(无 SFT 冷启动)
R1冷启动 SFT → RL → 拒绝采样 SFT → 二阶段 RL(+ 通用 RM)

训练管线DeepSeek-R1 训练 Pipeline

与相邻版本

维度V3R1V3.1
架构MoE + MLA同 V3同 V3
定位通用 Base推理 / CoTHybrid chat + thinking
后训练SFT + RL(V3 论文)RLVR 为主另一套 post-train

推理 infra

与 V3 相同:MLA latent KV--trust-remote-code--block-size 1

参考

RL / 后训练笔记

← 演进总览 §3.4 R1 · RLVR 详解 · 书中 RL 卷

文档内容
RLVR 详解可验证奖励强化学习;R1 的 GRPO + 规则奖励
R1 梗概V3-Base + RLVR,架构不变
R1 训练管线四阶段 Dev-1→R1、R1-Zero
GRPO 长程任务局限社区长文:GRPO 与长程任务局限

GRPO 长程任务局限

← 中文导读 · ← 仓库首页(EN) · ← RL 笔记索引 · ← RLVR · GRPO · ← 演进总览 §3.4 R1 · 书中对应

作者:划水的青蛙 · 知乎原文
性质:社区讨论整理;非 DeepSeek 官方文档。商业转载请联系原作者。


一句话

GRPO 仍是好算法,但 R1 时代验证的是 短程、可终局判分 的任务;硬搬到 长程 Agent / 编程 时,会在 吞吐、奖励稀疏、组内可比性 上同时吃瘪——智谱、MiniMax、DeepSeek 的后续路线都在 绕开或补 GRPO 的短板


背景:短程优化 vs 长程 Agent

阶段代表任务形态
2024 末–2025 初DeepSeek R1、OpenAI O 系数学、代码单测等 短而可验证
2025 下Sonnet 4.5、Opus + Claude Code 等长程编程 / 多步 Agent 真正可用

R1 的 RLVR + GRPO 针对的是 同一 prompt、$G$ 条 rollout、终局 verifier 打分——在短 CoT 上成立。长程任务把 轨迹长度、上下文压缩、延迟归因 拉进同一个组内比较,前提就被动摇了。


核心结论

维度短程(R1 舒适区)长程(GRPO 吃力)
奖励终局 0/1 或规则分,相对稠密极度稀疏;整段 rollout 可能 零信号
吞吐单题 rollout 短,组内 $G$ 条可并行收尾长短任务 混训 → 算力空转;分阶段训 → 梯度震荡
比较单位同一题下 $G$ 次 平行、完整 作答轨迹 状态不一致(压缩、工具调用、试错长度差几个数量级)

工程瓶颈:吞吐 vs 样本多样性

长程 RL 要先解决 怎么跑起来,再谈算法:

  1. 先短后长:课程从短任务切到长任务时,梯度信号剧烈震荡
  2. 长短混训、同组打分:短 rollout 先结束,长 rollout 还在跑 → 组内 advantage 汇总前 大量 GPU 空转
  3. 全组长程失败:一组任务跑数小时、$G$ 条全败 → 零 reward,等于白烧资源(见下文「全败退化态」)。

GRPO 的三条前提

社区归纳 GRPO / RLVR 能 work 的三条前提,以及长程下的裂缝:

前提短程下长程下的问题
同题可比较同一 prompt 下 $G$ 条 独立完整 轨迹,比终局分即可轨迹 状态空间不一致(见下例)
信号可验证答案 / 单测 终局可判只有「整体不行」,第几步错 要几十步后才显现
组内能降噪看相对组均,滤掉绝对分噪声稀疏 + 低成功率 → 全败独赢 两种退化(见下节)

同题可比较:A/B/C/D 反例

同一长程 prompt 采样 $G=4$,终局成功 $=1$、失败 $=0$,组内均分 $\bar r = 0.5$:

样本轨迹特征终局分组内 advantage
A约 4k token,路径干净1$+0.5$
B约 200k token,大量试错 + 工具调用 + 上下文压缩1$+0.5$
C与 B 类似过程0$-0.5$
D与 B 类似过程0$-0.5$

问题在于:

  • 同样的 $+0.5$,A 与 B 不是一回事:B 里大量 冗余 token 也被正向奖励per-token 信用分配不一致
  • B 后半段 可能在 摘要/压缩后的上下文 上生成,与 A 全程单一状态 的轨迹 不可比
  • GRPO 只奖终局:无法表达「前半段垃圾、后半段正确」这类 过程结构

信号可验证 → 延迟归因

模型收到的是 「这次整体不行」,而不是 「第 $X$ 步动作错了」。错误可能要 几十步之后 才暴露,需要 反传归因——critic / 过程奖励 擅长,纯组内终局比较 不擅长。

组内降噪 → 两种退化态

退化态现象长程为何更致命
$G$ 条全败组内 advantage 全为 0 或无效更新长 rollout 耗时极长完全无信号
仅 1 条成功唯一成功轨迹获得 巨大正 advantage长任务 基线成功率极低,成功多半是 偶然 → 高方差事件被当成 强监督 灌进梯度 → 训练 死循环

短程任务里「独赢」相对少见;长程里 二者都更常出现


业界应对

方向做法(原文归纳)本质
智谱Critic 回归,做 token 级 advantage恢复细粒度信用分配
MiniMaxCISPO + 复合奖励(过程 / 时间 / 结果)+ Forge 调度新算法 + 新 infra,不硬扛纯终局 GRPO
DeepSeekGRPO 训 专家模型On-Policy Distillation 在探索时给监督专家提供 过程/行为 信号,不全靠组内终局分

三家路径不同,共同点:承认 GRPO 直接硬上长程不够,要在 critic、过程奖励、蒸馏监督 上补洞。

与本地文档的对照:

本地关联
RLVR · GRPOR1 短程可验证 场景下 GRPO 怎么工作
R1 训练管线四阶段 + R1-Zero; 长程 Agent 专文
Raschka §RLVR/GRPOV3.2 如何在 GRPO 上叠 生成式 RM / 混合奖励

延伸阅读

资源说明
RLVR 详解可验证奖励 + GRPO 机制
GRPO vs PPO 对照图PPO(critic)vs GRPO(组内 baseline)对照图
知乎原文未删节的社区论述

DeepSeek-R1 训练 Pipeline

← 中文导读 · ← RL 笔记索引 · ← 演进总览 §3.4 R1 · 《ds-技术报告》 论文:DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning arXiv2501.12948 · PDFDeepSeek-R1 论文 PDF 基座:DeepSeek-V3 Base

Pipeline 总览

参考图(公众号整理版)


总览:两条支路

支路产物核心思想
A. 纯 RLDeepSeek-R1-Zero跳过 SFT,GRPO + 规则 reward,推理能力自发涌现
B. 四阶段DeepSeek-R1继承 R1-Zero 推理,补齐可读性、多语言能力、通用任务与对齐
V3 Base 分叉:纯 RL → R1-Zero vs 四阶段 → R1

图示详情


支路 A:DeepSeek-R1-Zero

输入 / 算法 / Reward

内容
起点DeepSeek-V3 Base
算法GRPO(Group Relative Policy Optimization),无 critic,组内相对 advantage
PromptReasoning prompts(数学/代码/逻辑)
RewardAccuracy(答案对错,sympy 等规则验证)+ Format(`` 等格式约束)
不用神经 RM(防 reward hacking)、SFT 冷启动

涌现行为

  • 响应长度随训练增长(「思考时间」增加)
  • 自反思、验证、换策略
  • 「Aha moment」:模型自发学会重新审视

局限

  • 可读性差、中英混杂
  • 偏推理,写作/开放域 QA 弱

支路 B:DeepSeek-R1 四阶段

中间 checkpoint:Dev-1 → Dev-2 → Dev-3 → R1

阶段 1:冷启动 SFT → R1 Dev-1

内容
数据数千条 Cold Start Long CoT(高质量、对话式、第一人称思考)
来源R1-Zero 高温采样 → 过滤正确+可读 → DeepSeek-V3 精炼 → 人工复核
目的解决 R1-Zero 的语言混杂与表达问题;产品向可读 CoT
数据配比(整理图参考)指令遵循 30% · 知识问答 30% · 推理 20% · 安全对齐 20%

冷启动 CoT 风格要求

  1. 先理解问题 → 详细推理 → 反思与验证
  2. 第一人称、段落简短、避免 markdown
  3. 语言与问题一致(V3 翻译 thinking 消混杂)

Trade-off:Dev-1 指令遵循↑(IF-Eval、ArenaHard),但冷启动数据小,AIME 等推理略降于 R1-Zero


阶段 2:第一阶段 RL → R1 Dev-2

内容
算法GRPO
PromptReasoning prompts
RewardRule-based(同 R1-Zero)+ Language Consistency(目标语言词占比)
关键超参lr=3e-6,每题 16 rollout,max len 32768,clip ratio ε=10

Dev-2 推理能力恢复并超越 Dev-1(Table 3:AIME、Codeforces 等显著提升)。


阶段 3:拒绝采样 + SFT → R1 Dev-3

内容
数据总量~800K SFT 样本
Reasoning~600K:从 Dev-2 checkpoint 拒绝采样(多采样、只留正确);扩展生成式 RM(V3 判对错);过滤混杂语言/长段落/代码块
Non-Reasoning~200K:写作、事实 QA、翻译、自认知、软件工程等(复用 V3 SFT 管线);简单 query 不加 CoT
域分布Math 395K · Code 211K · General 178K · STEM 10K · Logic 10K(Table 5)

后处理链

Dev-2 / R1-Zero / V3 → 采样 → Filter → Refine → SFT 混合数据

图示详情

Dev-3 在推理与通用(MMLU、IF-Eval)上进一步平衡。


阶段 4:第二阶段 RL → DeepSeek-R1

内容
PromptDiverse prompts(推理 + 通用)
Reward$R = R_{\text{reasoning}}^{\text{rule}} + R_{\text{general}}^{\text{RM}} + R_{\text{language}}$
RMHelpful RM(66K 偏好对,只看 summary)+ Safety RM(106K 点式安全标注)
训练共 1700 steps;最后 400 steps 才加入通用指令与偏好 RM(防 reward hacking)
温度0.7(比一阶段低,防incoherent)

最终 R1:推理保持 + helpful & harmless 对齐。


各阶段指标快照

BenchmarkR1-ZeroDev-1Dev-2Dev-3R1
AIME 202471.059.373.376.779.8
MMLU88.889.191.291.090.8
IF-Eval46.671.772.078.183.3
LiveCodeBench50.057.563.565.965.9
ArenaHard53.677.073.275.692.3

与 OneReason / LoRA 系列对照

维度DeepSeek-R1OneReason
领域通用 LLM 推理生成式推荐
纯 RL 探索R1-Zero无直接对应
分阶段 RL两阶段 + 不同 rewardspecialize-then-unify(分域 GRPO)
拒绝采样 SFT800K 混合数据RFT 路径
冷启动数千 Long CoTR0–R3 分层 SFT

蒸馏

DeepSeek-R1 还将长 CoT 能力 蒸馏到小模型(Qwen/Llama 等),开源 R1 系列 checkpoint。


文件索引

文件说明
版本演进总览 §3.4 R1全系列时间线中的 R1 定位
DeepSeek-R1 训练 Pipeline本文
R1 训练管线流程图自绘流程图
R1 训练管线参考图外部参考图
DeepSeek-R1 论文 PDF原文

DeepSeek-LLM V1

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §3.1 · ← 版本目录 · BBPE 词表专文 · V1→V3 演进 原文DeepSeek LLM: Scaling Open-Source Language Models with Longtermism · arXiv:2401.02954 PDF2401.02954.pdf · 图件见 Scaling Laws 图件 · BBPE 词表专文

命名说明:论文与社区常称 DeepSeek-LLMDeepSeek V1;与后续 DeepSeek-V2 / V3(MoE + MLA 旗舰线)是不同架构代际,但构成同一产品线的早期稠密基座。

摘要

开源大语言模型(LLM)近年来发展迅猛,但既往文献中的 scaling laws 结论各异,给 LLM 规模化扩展蒙上了阴影。本文深入研究 scaling laws,并给出适用于两种主流开源配置(7B67B)的独到发现。在 scaling laws 指导下,我们推出 DeepSeek LLM——一项以长期主义推进开源语言模型的工程。

预训练阶段我们构建了目前约 2 万亿 tokens、持续扩充的数据集;并对 Base 模型进行 监督微调(SFT)直接偏好优化(DPO),得到 Chat 模型。评测表明:DeepSeek LLM 67B 在多项 benchmark 上超越 LLaMA-2 70B,尤其在代码、数学与推理领域;开放评测中,DeepSeek LLM 67B Chat 表现优于 GPT-3.5


1. 引言

基于 decoder-only Transformer 的 LLM 已成为通向 AGI 的核心路径。通过下一词预测在大规模语料上自监督预训练,模型获得创作、摘要、代码补全等能力;SFT 与奖励建模使其更好遵循用户意图,对话能力迅速扩展。

ChatGPT、Claude、Bard 等闭源产品以巨大算力与标注成本拉高社区对开源 LLM 的期望。LLaMA 系列整合多项工作,形成高效稳定架构(7B–70B),成为开源模型的 de facto 基准。

然而开源社区在 LLaMA 之后多聚焦于固定尺寸(7B/13B/34B/70B)的高质量训练,较少系统研究 scaling laws。早期工作(Chinchilla、Kaplan 等)对模型/数据随算力扩展的最优分配结论不一致,对超参讨论也不充分。

本文工作:

  1. 研究 batch size 与 learning rate 的 scaling laws;
  2. 系统研究 模型与数据规模 的 scaling laws,揭示最优分配策略并预测大模型性能;
  3. 发现 不同数据集 拟合出的 scaling laws 差异显著——数据选择会明显影响 scaling 行为,跨数据集泛化 scaling laws 需谨慎。

在 scaling laws 指导下,我们从零训练并尽可能开源信息:

  • 2T tokens 预训练语料,以中英文为主;
  • 架构大体遵循 LLaMA,但用 multi-step LR 替代 cosine,便于 continual training;
  • 150 万+ SFT 实例;并采用 DPO 提升对话表现。

DeepSeek LLM 67B 在代码/数学/推理上超越 LLaMA-2 70B;67B Chat 在中英文开放评测上优于 GPT-3.5;安全评测表明 67B Chat 在实践中可给出无害回复。


2. 预训练

2.1 数据

目标:全面提升数据丰富度与多样性。参考 The Pile、RedPajama、FineWeb、LLaMA 等来源,流程分三阶段:

阶段作用
去重(deduplication)跨 dump 全局去重,保证样本唯一性
过滤(filtering)语言与语义质量评估,提高信息密度
重混(remixing)提升低占比 domain,平衡多样性

去重:对 Common Crawl 全语料去重,效果远优于单 dump 内去重。91 个 dump 跨库去重率达 89.8%,单 dump 仅 22.2%(Table 1)。

Tokenizer — 完整解读见 BBPE 词表与 Tokenizer 专文(§2.1 论文段落;V2 沿用同词表):

专文
算法BBPE(Byte-level BPE;BPE 简述HuggingFace tokenizers
预分词换行 / 标点 / CJK 不跨类 merge(同 GPT-2)避免中英混排边界错误
数字拆成 单 digit(同 LLaMA)算术、代码、编号更稳
常规 + special100,000 + 15 → 100,015§4 词表规模
BBPE 训练语料~24GB 多语言来自上述三阶段管线子集
vocab_size(embedding)102,400(预留扩展)有效 id 仍以 100,015 为准;见专文 易混点

编码流程(推理侧) · 系列延续(V2→V4)

BBPE 训练过程示例:UTF-8 字节、迭代 merge、编码

图示详情 · 详述见 BBPE 专文 §2

2.2 架构

Table 2 — DeepSeek LLM 规格

7B67B
层数3095
d_model40968192
n_heads3264
n_kv_heads32 (MHA)8 (GQA)
上下文40964096
序列 batch23044608
学习率4.2e-43.2e-4
预训练 tokens2.0T2.0T

同 D、不同 M → 不同 $C$;2T 是产品统一语料,非 Formula 4 compute-optimal 要求(7B 相对 ~140B 最优属 over-train)。详见 产品训练与 Scaling Law

微观设计

  • Pre-Norm + RMSNorm
  • FFN:SwiGLU,中间维 8/3 × d_model
  • 位置编码:RoPE
  • 67B 使用 GQA 降低推理成本

宏观设计

  • 7B:30 层;67B:95 层(在参数量与其他开源模型可比的前提下,便于 pipeline 划分)
  • 与常见 GQA 模型加宽 FFN 不同,67B 加深网络而非加宽 FFN,以追求更好性能

2.3 超参数

  • 初始化 std = 0.006
  • AdamW:β1=0.9, β2=0.95, weight_decay=0.1
  • Multi-step LR(非 cosine):
  • Warmup 2000 steps 至最大 LR
  • 80% tokens 后降至最大值的 31.6%
  • 90% tokens 后降至 10%
  • 梯度裁剪:1.0

Multi-step vs Cosine:1.6B 模型、100B tokens 上,最终性能基本一致;multi-step 在扩大训练规模时可复用第一阶段 checkpoint,便于 continual training。三阶段 token 比例选 80% / 10% / 10% 以平衡复用与性能。

原理详解、公式与 LLaMA cosine 对比 → 学习率调度 Wiki

Batch size 与 LR 随模型规模变化,见 Table 2。

2.4 基础设施

  • 并行:数据并行 + 张量并行 + 序列并行 + 1F1B 流水线并行
  • Flash Attention
  • ZeRO-1 分片 optimizer states
  • 计算/通信 overlap(ZeRO-1 reduce-scatter、序列并行 all-gather 等)
  • 算子融合:LayerNorm、GEMM、Adam update
  • bf16 训练 + fp32 梯度累积
  • In-place cross-entropy(kernel 内 bf16→fp32,降低显存)
  • 5 分钟 异步 checkpoint;支持换 3D 并行配置 resume
  • 评测:vLLM(生成任务);continuous batching(非生成)

3. Scaling Laws

算力预算 $C$、模型规模 $N$、数据规模 $D$:传统近似 $C \approx 6ND$。核心问题:算力增加时如何最优分配模型与数据。

答疑为何改用 $C=M\cdot D$? — $6N_1$/$6N_2$ 相对 $M$ 的误差(Table 3)、IsoFLOP 为何必须用 $M$

早期工作对最优分配结论不一,且超参是否达最优存疑。本文:

  1. 先研究超参 scaling laws(batch、LR);
  2. M(non-embedding FLOPs/token) 替代 N,用 C = MD 替代 C = 6ND;
  3. 发现数据质量影响最优 model/data 分配。

3.1 超参 Scaling Laws

小算力($C=10^{17}$ FLOPs,177M FLOPs/token)网格搜索:batch 与 LR 在较宽范围内 generalization error 稳定(Figure 2a)。

Figure 2 — batch × LR 网格搜索(上:$C=10^{17}$;下:$C=10^{20}$ 验证)

Figure 2 — batch × LR 网格搜索(上:$C=10^{17}$;下:$C=10^{20}$ 验证)

来源:Figure 2。(a) 小算力下 batch/LR 宽带稳定;(b) $10^{20}$ 验证时拟合点(红星)落在最优区中心。

用 multi-step LR 训练多组模型(算力 $10^{17}$–$2\times10^{19}$),复用第一阶段。将 generalization error 超出最小值 ≤0.25% 的参数视为 near-optimal,拟合得 Formula 1

$$ \begin{aligned} \eta_{\mathrm{opt}} &= 0.3118 \cdot C^{-0.1250} \ B_{\mathrm{opt}} &= 0.2920 \cdot C^{0.3271} \end{aligned} $$

符号含义
$C$训练算力预算(FLOPs),$C = M \cdot D$
$\eta_{\mathrm{opt}}$最优学习率(最大 LR)
$B_{\mathrm{opt}}$最优 batch size,单位 tokens/step(非序列条数)

Formula 1 数值对照

$C$$B_{\mathrm{opt}}$$\eta_{\mathrm{opt}}$备注
$10^{17}$0.11M tok/step$2.34\times10^{-3}$小算力拟合区
$10^{18}$0.23M tok/step$1.75\times10^{-3}$
$10^{19}$0.48M tok/step$1.31\times10^{-3}$
$10^{20}$1.02M tok/step$9.86\times10^{-4}$1e20 验证点(Figure 2b)
$8.5\times10^{22}$9.22M tok/step$4.25\times10^{-4}$DeepSeek 7B @ 2T
  • 算力 ↑ → $B_{\mathrm{opt}}$ ↑,$\eta_{\mathrm{opt}}$ ↓
Figure 3 — batch / LR scaling curves

直接打开 Figure 3

  • 7B/67B 实测点落在 near-optimal 带内;$10^{20}$ 验证时拟合参数位于最优区中心(Figure 2b)

局限:尚未建模 $C$ 以外因素;同算力不同 model/data 分配下最优超参空间略有差异——待后续研究。→ Scaling-Law 选择性应用 §3

3.2 最优模型/数据 Scaling

传统写法用 $C \approx 6ND$,其中模型规模 $N$ 有两种常见取法:

符号含义来源
$N_1$non-embedding 参数量Kaplan et al.
$N_2$完整参数量(含 embedding)Hoffmann et al. / Chinchilla

于是可用 $6N_1$ 或 $6N_2$ 近似「每 token 算力」。但两者都有明显误差:

  • $6N_1$:不含 attention 的 $O(L^2)$ 计算开销;
  • $6N_2$:多了 vocab 投影(对模型能力贡献小),仍不含 attention。

为此报告引入 $M$(non-embedding FLOPs/token):计入 attention,不计 vocab;算力预算简化为 $C = M \cdot D$

Formula 2 — 三种表示的关系:

$$ \begin{aligned} 6N_1 &= 72 \cdot n_{\mathrm{layer}} \cdot d_{\mathrm{model}}^2 \ 6N_2 &= 72 \cdot n_{\mathrm{layer}} \cdot d_{\mathrm{model}}^2 + 6 \cdot n_{\mathrm{vocab}} \cdot d_{\mathrm{model}} \ M &= 72 \cdot n_{\mathrm{layer}} \cdot d_{\mathrm{model}}^2 + 12 \cdot n_{\mathrm{layer}} \cdot d_{\mathrm{model}} \cdot l_{\mathrm{seq}} \end{aligned} $$

符号含义
$n_{\mathrm{layer}}$层数
$d_{\mathrm{model}}$模型宽度
$n_{\mathrm{vocab}}$词表大小(V1 配置 102,400,见 BBPE 专文 §4
$l_{\mathrm{seq}}$序列长度

Table 3 — 不同规模下 $6N_1$、$6N_2$ 相对 $M$ 的偏差($n_{\mathrm{vocab}}=102400$,$l_{\mathrm{seq}}=4096$):

$n_{\mathrm{layer}}$$d_{\mathrm{model}}$$N_1$$N_2$$M$$6N_1/M$$6N_2/M$
851225.2M77.6M352M0.431.32
1276884.9M164M963M0.531.02
241024302M407M3.02B0.600.81
2420481.21B1.42B9.66B0.750.88
3240966.44B6.86B45.1B0.850.91
40512012.6B13.1B85.6B0.880.92
80819264.4B65.3B419B0.920.94
Table 3 — 模型规模三种表示的差异($N_1$、$N_2$ 相对 $M$ 的偏差)

Table 3 — 模型规模三种表示的差异($N_1$、$N_2$ 相对 $M$ 的偏差)

来源:Table 3。右两列 $6N_1/M$、$6N_2/M$ 越偏离 1,用 $6N$ 近似 $M$ 的误差越大。

怎么读 Table 3:

  • $6N_1/M < 1$(小模型仅 0.43):$6N_1$ 低估算力,因缺 attention 项;层数少、$d$ 小时最明显。
  • $6N_2/M > 1$(小模型 1.32):$6N_2$ 高估算力,因计入 vocab 投影。
  • 模型变大后两列趋近 1,但小模型上偏差仍可达 50%,会污染 IsoFLOP 拟合——故 Formula 4 统一用 $M$ 而非 $6N_1$/$6N_2$。

采用 IsoFLOP profile(Chinchilla):8 个算力预算($10^{17}$–$3\times10^{20}$),每预算约 10 种 model/data 分配;超参由 Formula 1 确定;在 100M tokens 独立验证集上算 generalization error(bits-per-byte)。

Figure 4a — IsoFLOP 曲线(各算力档 loss 随 $M$ 呈 U 形,谷底 = 最优分配)

Figure 4a — IsoFLOP 曲线(各算力档 loss 随 $M$ 呈 U 形,谷底 = 最优分配)

来源:Figure 4a。横轴 = non-embedding FLOPs/token $M$;纵轴 = validation bits-per-byte。

Formula 4 — 最优 model/data 分配:

$$ \begin{aligned} M_{\mathrm{opt}} &= 0.1715 \cdot C^{0.5243} \ D_{\mathrm{opt}} &= 5.8316 \cdot C^{0.4757} \end{aligned} $$

符号含义
$M_{\mathrm{opt}}$最优 non-embedding FLOPs/token
$D_{\mathrm{opt}}$最优训练 token 总量

→ 模型与数据规模随算力近似等比扩展(指数 $a \approx b \approx 0.5$)。

Formula 4 数值对照

$C$$M_{\mathrm{opt}}$ (FLOPs/tok)$D_{\mathrm{opt}}$备注
$10^{17}$$1.4\times10^{8}$0.71B
$10^{18}$$4.7\times10^{8}$2.1B
$10^{19}$$1.6\times10^{9}$6.4B
$10^{20}$$5.3\times10^{9}$19B
$8.5\times10^{22}$$4.2\times10^{10}$2.0TDeepSeek 7B @ 2T
Figure 4b/4c — 最优 model / data scaling

Figure 4b/4c — 最优 model / data scaling

来源:Figure 4b/4c。左:$M_{\mathrm{opt}}$ vs $C$;右:$D_{\mathrm{opt}}$ vs $C$。

Figure 5 — 性能 scaling 曲线(小实验预测 7B/67B)

Figure 5 — 性能 scaling 曲线(小实验预测 7B/67B)

来源:Figure 5。灰点 = 小算力实验;虚线 = loss 幂律拟合;蓝星 = DeepSeek LLM 7B / 67B(各 2T tokens)。

小实验可准确预测 1000× 算力下 7B/67B 性能。

读图提示:Figure 3/5 蓝星 = 给定产品 $(M,D=2T)$ 校验 hyperparam / loss;Figure 4 = 固定 $C$ 下最优 $M/D$ 分配(用于 Table 2 定 2T)。详见 Scaling-Law 选择性应用

3.3 不同数据上的 Scaling Laws

DeepSeek LLM 开发过程中语料迭代多轮:调整各数据源占比、提升整体质量。借此可分析数据集差异对 scaling laws 的影响。

在三种语料上分别拟合 Formula 4 的指数 $a$($M_{\mathrm{opt}} \propto C^a$)与 $b$($D_{\mathrm{opt}} \propto C^b$):

  • 早期内部数据 vs 当前内部数据(质量逐步提升)
  • OpenWebText2(Kaplan et al. 用过的公开集;规模较小、处理更精细,质量甚至高于当前内部数据)

Table 4 — 模型/数据 scaling 系数随训练数据分布而变:

数据集模型指数 $a$数据指数 $b$
OpenAI OpenWebText20.730.27
Chinchilla MassiveText0.490.51
Ours 早期0.4500.550
Ours 当前0.5240.476
Ours on OpenWebText20.5780.422
Table 4 — 模型/数据 scaling 系数随训练数据分布而变

Table 4 — 模型/数据 scaling 系数随训练数据分布而变

来源:Table 4。$a$ 越大 → 算力应多投模型;$b$ 越大 → 算力应多投数据。

数据质量越高 → $a$ 越大、$b$ 越小 → 应多分配算力给模型扩展。高质量数据逻辑清晰、充分训练后预测难度低,扩大模型更有利。不同数据集的 scaling 指数差异也可作为数据质量间接指标——这或许也是早期 scaling law 研究结论不一致的原因之一。


4. 对齐

4.1 数据

150 万 中英 instruction 实例:

  • Helpful(120 万):通用 31.2% / 数学 46.6% / 代码 22.2%
  • Safety(30 万):各类敏感话题

4.2 SFT

7B67B
Epochs42(67B 过拟合严重)
LR1e-55e-6
  • 7B:GSM8K、HumanEval 持续提升;67B 很快触顶
  • 监控 repetition ratio:3868 条中英 prompt,统计无法终止、无限重复的比例
  • 数学 SFT 增多 → repetition ratio 上升(推理模式相似,弱模型难学)
  • 缓解:两阶段 SFT(第二阶段去掉 math/code)或 DPO

7B 两阶段 SFT:stage-1 repetition 2.0% → stage-2 1.4%

4.3 DPO

  • 基于 helpfulness / harmlessness 构建 preference 数据
  • Helpful:多语言 prompt(创作、QA、指令遵循等),用 DeepSeek Chat 生成候选回复
  • 1 epoch,LR 5e-6,batch 512,warmup + cosine LR
  • 效果:增强开放域生成;标准 benchmark 变化不大

5. 评测

5.1 公开 Benchmark

数据集覆盖

  • 多选:MMLU, C-Eval, CMMLU
  • 语言理解/推理:HellaSwag, PIQA, ARC, OpenBookQA, BBH
  • 闭卷 QA:TriviaQA, NaturalQuestions
  • 阅读:RACE, DROP, C3
  • 指代:WinoGrande, CLUEWSC
  • LM:Pile
  • 中文:CHID, CCPM
  • 数学:GSM8K, MATH, CMath
  • 代码:HumanEval, MBPP
  • 考试:AGIEval

评测方式

方式适用任务
Perplexity 选题HellaSwag, MMLU, C-Eval 等多选题
生成式(greedy)GSM8K, HumanEval, BBH 等
LM(bits-per-byte)Pile-test

最大序列长度 2048 或 4096。

5.1.1 Base 模型

  • 2T 双语预训练,英文理解与 2T 英文 LLaMA-2 相当
  • 67B 在 MATH、GSM8K、HumanEval、MBPP、BBH、中文 benchmark 上显著优于 LLaMA-2 70B
  • 67B 相对 LLaMA-2 70B 的优势 大于 7B 相对 7B——语言冲突对小模型影响更大
  • LLaMA-2 在部分中文任务(如 CMath)表现不错——数学推理可跨语言迁移;但 CHID(成语)等需足够中文 tokens

5.1.2 Chat 模型

  • SFT 后多数任务提升
  • 知识类(TriviaQA, MMLU):小幅波动,不代表 SFT 增删知识;Chat 0-shot 可比 Base 5-shot
  • 推理类:SFT 含 CoT 格式,BBH 等略升——主要是学会推理格式而非新推理能力
  • 下降任务:HellaSwag 等完形/句补——纯 LM 更擅长
  • 数学/代码:HumanEval、GSM8K 等提升 20+ 点——Base 在这些任务上欠拟合,SFT 补充知识;能力可能偏代码补全与代数题

5.2 开放评测

5.2.1 中文 — AlignBench

683 题,8 大类 36 小类;GPT-4 按参考答案与模板打分。

  • DeepSeek 67B Chat 超越 ChatGPT 等基线,仅次于两版 GPT-4
  • DPO 版几乎全面提升
  • 中文基础语言:DPO 版甚至高于最新 GPT-4;中文推理:显著领先其他中文 LLM

5.2.2 英文 — MT-Bench

8 类多轮对话。

  • 67B Chat8.35,与 GPT-3.5-turbo 可比;超越 LLaMA-2-Chat 70B、Xwin 70B、TÜLU 2+DPO 70B
  • 67B Chat-DPO8.76,仅次于 GPT-4

5.3 Held-Out 评测

在独立 held-out 集上 bits-per-byte 与 scaling 预测一致,验证 scaling laws 有效性。

5.4 安全评测

20 人专家团队,覆盖歧视偏见、侵犯合法权益、违法犯罪等类别。

  • 多数子类 >95% 无害回复率(如歧视类 486/500,侵权类 473/500)
  • 安全贯穿预训练、SFT、DPO 全流程

5.5 讨论

  • 避免 benchmark decoration 与训练「暗箱」
  • 双语训练在代码/数学/推理上的优势随规模放大
  • SFT 数据配比(尤其数学)需与模型容量匹配

6. 结论、局限与未来工作

结论

DeepSeek LLM 是在 2T 中英 tokens 上从零训练的开源系列。本文详述超参选择、scaling laws 与微调经验;校准既往 scaling laws,提出新的最优 model/data 分配策略;给出给定算力下 near-optimal batch/LR 的预测方法;并指出 scaling laws 与数据质量相关——可能是不同工作 scaling 行为差异的根因。在 scaling laws 指导下完成预训练与全面评测。

局限

  • Chat 模型无预训练后持续知识更新
  • 可能生成非事实内容、幻觉
  • 初版中文数据不 exhaustive,部分中文话题表现欠佳
  • 语料以中英为主,其他语言需谨慎使用

未来

  • 发布代码智能MoE 技术报告(高质量代码预训练数据、稀疏架构达稠密性能)
  • 构建更大更好数据集,提升推理、中文知识、数学、代码
  • 对齐团队研究 helpful/honest/safe;初步实验表明 RL 可提升复杂推理

附录概要

附录内容
A.1致谢
A.2不同模型规模表示(N1/N2/M)分析
A.3Benchmark 指标随训练曲线
A.4与代码/数学专用模型对比
A.5DPO 阶段 benchmark 结果
A.6各 benchmark 评测格式细节

相关文档

DeepSeek-LLM V1:BBPE 词表与 Tokenizer

← 中文导读 · ← 仓库首页(EN) · ← V1 正文 · ← 演进总览 §3.1 V1 · V1→V3 演进 论文DeepSeek-LLM arXiv:2401.02954 §2.1 · V2 沿用同词表


一句话

DeepSeek-LLM V1 采用 BBPE(Byte-level Byte-Pair Encoding):在 UTF-8 字节序列上做 BPE,配合 字符类预分词数字单 digit 拆分;常规词表 100,000,加 15 个 special token 后 100,015,模型 embedding 维配置 102,400 以预留扩展位。


BPE 简述

Byte Pair Encoding(BPE) 是 subword 分词里最常用的训练式词表构造法之一(Sennrich et al., 2016;GPT-2 / RoBERTa 系广泛采用)。相对词级分词,它在 词表大小序列长度 / OOV 之间折中:常见片段共享 id,罕见词由若干 subword 拼成,无需 <unk>

训练

  1. 初始符号表 = 基础单元(字符、或 字节 —— 见下节 BBPE)
  2. 重复:统计当前序列中 相邻 symbol pair 的频率,将最高频 pair 合并为新 symbol,写入词表
  3. 达到目标 merge 次数或词表大小 $V$ 后停止

编码:对输入做同样的预切分后,按 merge 优先级 贪心最长匹配(或等价 trie 查表),得到 token id 序列。解码为 merge 的逆过程:id → subword 字符串 → 拼接还原文本。

方法与 BPE 的关系典型场景
BPE / BBPE频率驱动 mergeGPT-2、LLaMA、DeepSeek V1
WordPiece选 merge 时最大化语言模型似然BERT
Unigram LM从大词表 子词(SentencePiece)T5、部分多语模型

对已有 NLP 基础的读者:BPE 不建模语义,只压缩词表;预分词(pre-tokenization) 规则(空格、标点、CJK 边界等)往往比 merge 算法本身更影响中英混排质量。DeepSeek V1 在标准 BPE 之上把基础单元降到 UTF-8 字节,并约束字符类不跨类 merge —— 即下文 §2 BBPE


1. 与预训练数据管线的关系

Tokenizer 训练语料来自 V1 三阶段数据管线 的多语言子集(与 V1 §2.1 数据 / #tokenizer 同一论文段落):

原始语料 → 去重 → 过滤 → 重混 → BBPE 训练 / 预训练

图示详情

阶段与 Tokenizer 相关的要点
去重跨 Common Crawl 91 个 dump 全局去重,去重率 89.8%(单 dump 内仅 22.2%)
过滤语言 + 语义质量
重混提升低占比 domain,保证多语言多样性

BBPE 本身在约 24GB 多语言语料 上训练 merge 规则;2.0T tokens 的预训练则走完整管线后再分词。


2. BBPE 是什么

BBPE = 在 字节(byte)序列 上运行 BPE,而非 Unicode 字符或 SentencePiece 的 pretokenized 单元。

对比典型做法V1 BBPE
词表基础字符 / 子词UTF-8 字节 → 合并为 subword
OOV需 unk 或 fallback任意 UTF-8 文本可 字节级覆盖
实现多种HuggingFace tokenizers

直觉:先 text → bytes,再在 byte 序列上统计 pair 频率、迭代 merge,得到 subword 词表。

BBPE 训练过程示例:UTF-8 字节、迭代 merge、编码

图示详情

示意说明:预分词后文本变为 UTF-8 字节流;初始符号表为 256 个字节;每轮合并语料中最高频 相邻 byte pair,写入 merge 表;重复至 100,000 次 merge。推理时对同样预切分后的字节序列 贪心最长匹配。因任意 UTF-8 文本可先落到字节层,不会出现字符级 OOV(罕见片段至多拆成更多 byte/subword token,序列变长而非 <unk>)。

图上 48 69E4 B8 96 是十六进制记法,不是单独一套「16 进制词表」。实现里每个符号是 8-bit 字节 $b \in {0,\ldots,255}$(即 0x000xFF);48 = 十进制 72 = 'H'69 = 'i'E4 B8 96 等为 中文等 CJK 字符在 UTF-8 下的 3 字节编码示意。HuggingFace tokenizers 在内部用 u8 序列做 merge/encode。

3. 预分词规则

论文在 BPE 合并前做 pre-tokenization,限制 不同字符类之间不得跨类 merge(做法类似 GPT-2):

规则目的
换行 / 标点 / CJK 等分属不同字符类避免中文与标点、换行被错误粘成单一 token
数字拆成单 digit(同 LLaMA 系列)稳定算术、代码、编号类文本的 token 边界

效果:中英双语 + 代码混排时,CJK 与 Latin 边界清晰,数字可组合性更好。


4. 词表规模与 embedding 配置

数值说明
常规 merge tokens100,000BPE 训练目标词表大小
Special tokens+15如 BOS/EOS/PAD 及任务相关控制符
Tokenizer 总大小100,015100,000 + 15
模型 vocab_size(embedding 行数)102,400训练与推理配置;预留未来 special / 扩展 token

易混点:HF config.json 里的 vocab_size=102400embedding 矩阵行数;有效 token id 仍以 tokenizer 的 100,015 为准,未用 id 对应 embedding 行可视为预留。


5. 编码流程

UTF-8 文本 → pre-tokenization → byte → BBPE → token id → embedding

图示详情

与后续 MLA / MoE / DSA 正交:改 attention 或 FFN 不改变 tokenizer;V1 Chat 的 SFT/DPO 也在同一词表上继续。


6. 在 DeepSeek 系列中的延续

版本Tokenizer 相对 V1
V1(7B/67B)定义 BBPE 词表(本文)
V2沿用 DeepSeek 67B 同一 tokenizer2405.04434);8.1T 预训练
V3仍 BBPE 族,扩展至 128K 词表;pretokenizer 与训练语料针对多语言压缩优化(2412.19437 §4.1)
V3.2 / R1与 V3 同词表
V4随新旗舰再扩展(DeepSeek-V4 梗概 训练节

V1 的 102,400 embedding 预留 与 V3 的 128K 扩展 是不同代际决策;读 checkpoint 时须对齐 config.vocab_size 与 tokenizer 文件。


7. 推理 infra 关注点

V1
与 MLA 兼容性V1 为 标准 MHA/GQA,无 MLA;词表独立问题
引擎配置常规 Transformers / vLLM;加载 deepseek-llm-7b-base 等官方权重即可
上下文4K;tokenizer 无 RoPE,位置在模型侧
续训 / 扩词表若新增 token,须 扩 embedding + lm_head 并重训或至少微调新增行

参考

  1. DeepSeek-AI. DeepSeek LLM: Scaling Open-Source Language Models with Longtermism. arXiv:2401.02954, 2024. — §2.1 Data, Tokenizer; Table 1 dedup.
  2. DeepSeek-V2:同 tokenizer(§2 / Appendix 数据节)。
  3. 本地精读:V1 §2.1 Tokenizer · technical-highlights(复现向)

DeepSeek-V2 梗概

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §3.2 · ← MoE 线导读 · ← 版本目录 · V1→V3 演进 · MLA 详解 · V1 BBPE 词表 · Raschka 解读


定位

2024 年 5 月发布。相对 DeepSeek-LLM 67B 稠密,V2 是架构代际跃迁:首次引入 MLADeepSeekMoE,236B 总参、每 token 激活 21B128K 上下文。论文称相对 67B 稠密:训练成本 -42.5%、KV cache -93.3%、生成吞吐 5.76×

核心架构

组件要点
MLAK/V 低秩 latent 联合压缩进 cache;V3/R1/V3.1/V3.2 沿用同一 MLA 结构
DeepSeekMoE每层 160 routed + 2 shared experts,每 token 激活 6 个 routed
规模236B total / 21B activated
上下文128K(Lite 版 16B / 2.4B act,32K)
预训练8.1T tokens
Tokenizer沿用 V1 DeepSeek 67B 同一 BBPE 词表(100K + special,embedding 102,400)
后训练SFT + RL → Chat 版

相对 V1 的关键变化

维度V1(67B 稠密)V2
FFN稠密 SwiGLUMoE 稀疏激活
注意力GQA(8 KV 头)MLA latent KV
上下文4K128K
预训练2T8.1T
KV cache标准 GQA~6.7% 体积

推理 infra 关注点

  • KV cache 变为 MLA latent 格式(后续 V3 系继承)
  • 需自定义 kernel / vLLM 适配(DeepSeek 后续提供 FlashMLA 等)
  • MoE 路由为 softmax 系(V3 改为 aux-loss-free sigmoid 路由,见 aux-loss-free
方向文档
MoE 架构DeepSeekMoE 详解
本版本V2 为 DeepSeekMoE 首发落地(见上表配置)
下游 ③ aux-loss-freeaux-loss-free MoE 路由 · DeepSeek-V3

上下游

方向关系
上游DeepSeek-LLM V1(稠密 + scaling laws)
下游DeepSeek-V3:671B / 37B act、256 experts / 8 act、MTP、aux-loss-free、14.8T

参考

DeepSeek-V3.1 梗概

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §3.5 · ← 版本目录 · Raschka §3.4 Hybrid


定位

2025 年中期在 V3 权重基础上做 post-training无架构变更。主要贡献是 Hybrid 推理模式:同一套权重可在 thinking(推理链)与 chat(直接回答)之间切换,不再像 V3/R1 那样 Base 与推理模型分离。

V3.1-Terminus 是 V3.1 系列收尾 checkpoint,上下文扩至 128K,并作为 V3.2 继续预训练 的起点。

相对 V3 的变化

维度V3V3.1
推理模式Base / R1 分离Hybrid 单模型双模式
上下文128K128K(续训巩固)
Agent / Tool Use较弱BrowseComp、SWE 等明显加强
架构MoE + MLA + MTP完全相同

MLA 模式切换

为后续 DSA 铺路,Prefill 与 Decode 采用不同 MLA 模式:

V3.1-Terminus MLA 模式切换:Prefill MHA 式 per-head latent,Decode MQA 式 shared latent

图示详情 · 演进总览 §3.5

  • Prefill:MHA 模式(各 query head 独立 latent)
  • Decode:MQA 模式(latent 在 query head 间共享)

两阶段 仍是 MLA(低秩 latent 进 cache);差别在 latent 按 head 展开还是全体共享。与常见注意力族的对应(以 8 个 Q head 为例):

Q head 到 KV/latentV3.1 对应
MHA8 到 8Prefill 近似这一档
GQA8 到 2(分组)不是 Decode 这一档
MQA8 到 1Decode 近似这一档
阶段MLA 内的展开瓶颈取舍
Prefillper-head latent(MHA 式)算力并行吃 prompt,表达力优先
Decodeshared latent(MQA 式)KV 带宽每步读全长 cache,体积优先

延伸DSA 逻辑 · 演进总览 §V3.1


推理 infra 关注点

  • 与 V3 相同:同质 MLA Latent-Cache
  • 新增 Prefill MHA / Decode MQA 切换逻辑,引擎需正确实现两阶段模式
  • KV offload 困境与 V3 相同:格式非标准,长上下文仍受 HBM 限制

上下游

方向关系
上游DeepSeek-V3
下游V3.2-Exp / V3.2(在 Terminus 上引入 DSA)

参考

DeepSeek-V3.2 梗概

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §3.6 · ← 版本目录 · DSA 梗概 · Raschka §4 DSA


定位

2025 年 12 月正式版;2025 年 9 月先有 DeepSeek-V3.2-Exp(DeepSeek 官方实验 release)。相对 V3.1-Terminus,唯一架构改动是引入 DeepSeek Sparse Attention (DSA)——DeepSeek 原创稀疏注意力,在长上下文场景显著降算量,公开 benchmark 与 V3.1-Terminus 基本持平。

V3.2-Exp 与 V3.2 架构相同;Exp 用于验证稀疏注意力不损精度,V3.2 为完整续训 + 后训练成品。

DSA 机制

DSA 详解 · 完整逻辑 · 系列目录

两阶段稀疏注意力:

  1. Lightning Indexer:廉价点积为历史 token 打分(仍 $O(L^2)$,但 head 维极低)
  2. Top-$k$ Selector:选出 $k=2048$ 个最重要 latent entry
  3. Core Attention:仅对 top-$k$ 做 MLA attention($O(Lk)$)

概念Lightning Indexer · Top-$k$ Selector · Core MLA · Indexer-Cache · Latent-Cache · ESS

异构 Cache

异构 KV 表 · DSA逻辑详解 §4

Cache 类型作用占比(ESS 论文Offload
Indexer-Cache算重要性、选 top-$k$~16.8%否(每步全算)
Latent-Cache核心 MLA attention KV~83.2%ESS offload

推理 infra 关注点

  • DeepGEMM:indexer logit kernel(含 paged 版)
  • FlashMLA:sparse attention paged kernel
  • Index Share(IndexCache)与 ESS offload 均叠加在 V3.2 上
  • vLLM day-0 support;需自定义 sparse attention 代码路径

规格

参数量671B(同 V3.1-T)
激活参数37B
上下文128K
发布时间Exp 2025-09,正式版 2025-12

上下游

方向关系
上游V3.1-Terminus(128K,续训起点)
下游Index Share、ESS;算法线继续演进为 CSA/HCA

参考

DeepSeek-V4 梗概

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §3.7 · ← 算法线导读 · ← 基础设施线导读 · ← MoE 线导读 · Hash MoE + FP4 详解 · Muon 详解 · ← 版本目录 · CSA/HCA 详解 · DSpark 投机解码 · 上游 DSA · 上游 MLA · mHC 详解 · Raschka §8 mHC


定位

2026 年 preview release,面向 百万 token 上下文Agentic Coding(100K–1M token 代码库、多轮 tool trace)。相对 V3.2 是架构级大步进:注意力、残差、优化器、MoE 路由、量化同时翻新,不利于做单一变量 ablation。

两个规格:

模型总参数激活参数定位
V4-Pro1.6T49B能力上限,含 Pro-Max 推理模式
V4-Flash284B13B效率优先

核心架构变化

组件说明
CSA / HCA混合压缩注意力专文:CSA 4:1 + top-$k$;HCA 128:1 + dense
mHCManifold-Constrained Hyper-Connections§3 双随机流形):Sinkhorn–Knopp 投影,恢复 HC 恒等映射稳定性
MuonMuon 优化器专文:矩阵正交化更新,更快收敛
Hash MoE / FP4Hash MoE + FP4 专文:前几层 Hash 路由 + routed expert FP4 + QAT

继承自 V3:DeepSeekMoE 框架、MTP 配置。

DeepSeek-V4 异构 KV:CSA 4:1、HCA 128:1、SWA、Indexer、Tail buffer 与 HiSparse offload

图示详情 · 演进总览 §3.7

MoE 线位置

方向文档
MoE 线 ⑤ Hash MoE + FP4Hash MoE + FP4
MoE 线 hubMoE 线导读
上游 ③④aux-loss-free MoE 路由 · DeepSeek-V3

1M context 效率

模型单 token FLOPs累计 KV cache
V4-Pro @ 1M27%10%
V4-Flash @ 1M10%7%

推理 infra 关注点

V4 的 cache 异构,不再是单一 MLA latent:

KV 类型特点
CSA 压缩 entry4:1,稀疏 top-$k$
HCA 压缩 entry128:1,dense
SWA滑动窗口,独立 eviction
Indexer KVCSA lightning indexer
Tail buffer未凑满压缩块的尾 token

KV layout专文:V4 KV Layout(Classical + State 双池;演进总览 §5.3

HiSparse专文:V4 HiSparse(inactive C4 offload;§5.3

磁盘 Prefix Cache专文:V4 磁盘 Prefix Cache(SWA 三档策略;§5.3

Decode 吞吐:V4 预览引擎 → 投机解码与 DSpark 专文(含 MTP、MTP-1 基线、DSpark;与 HiSparse 正交)。

V4 的 KV-offload 与 V3.2 ESS 完全不同,需围绕异构压缩 cache 重新设计内存层级。


基础设施线位置

方向文档
本节点(⑤ V4 异构 KV + HiSparse)基础设施线导读 §1 · KV layout · HiSparse · 磁盘 prefix
上游 ②–④DSA 稀疏注意力 · Index Share 梗概 · ESS Latent offload
算法线 ③ CSA/HCACSA / HCA · 算法线导读
MoE 线 ⑤ Hash MoEHash MoE + FP4 · MoE 线导读

训练要点

  • 32T+ tokens,渐进式上下文:4K dense → 16K → 64K 引入稀疏 → 1M
  • 后训练:分域专家独立培养 + on-policy distillation 合并

算法线位置

方向文档
算法线 ③ CSA/HCACSA / HCA · 算法线导读 §1
上游 ② DSADSA 稀疏注意力
并列 ④ mHCmHC(残差路径,与 Attention 正交)

上下游

方向关系
上游V3.2(DSA 思想延续为 CSA 内嵌 indexer;算法线导读
并行Index Share 解决 V3.2 长上下文 indexer 瓶颈,与 V4 路线互补

参考

CSA / HCA 混合压缩注意力

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §3.7 · ← 算法线导读 · ← 基础设施线导读 · V4 梗概 · 上游 DSA · 上游 MLA · 并列 mHC · Lightning Indexer 详解 论文DeepSeek-V4 arXiv:2606.19348


一句话

CSA(Compressed Sparse Attention)与 HCA(Heavily Compressed Attention)是 V4 的 双档 KV 压缩注意力:先把历史 token 按块压成更短的 KV 序列,再在压缩序列上分别做 稀疏 top-$k$(CSA,$m{=}4$)与 dense attend(HCA,$m'{=}128$);二者与 SWAIndexer KVtail buffer 共同构成 百万 token 的算法侧主因。

答疑SWA(滑动窗口精确局部) — 最近窗口内未压缩 K/V,进 State 池,eviction 与 prefix 策略独立于 CSA/HCA 答疑Indexer KV — CSA 路径上对全长历史廉价打分,再 top-$k$ 选 C4 entry 答疑Tail buffer — 未凑满 4/128 块的 token 尾,凑满后才压入 Classical 池


算法线位置

方向文档
本节点(③ CSA / HCA)算法线导读 §1
上游 ② DSADSA 稀疏注意力 · DSA 逻辑详解
上游 ① MLAMLA 低秩注意力(V4 不再单一 per-token latent)
同代 V4 其他组件DeepSeek-V4(两个规格、MoE) · Muon · mHC(残差路径,与 Attention 正交
infra 依赖KV layout · HiSparse · 磁盘 prefix

1. 两个机制对照

维度CSAHCA
全称Compressed Sparse AttentionHeavily Compressed Attention
压缩比$m{=}4$ token → 1 条 KV entry$m'{=}128$ token → 1 条 entry
压缩后序列长$\approx L/4$$\approx L/128$(极短)
注意力模式对压缩 entry 做 DSA 式 top-$k$ 稀疏读序列已足够短 → dense attention
典型角色远距、高选择性 历史(indexer 挑块)全局粗粒度 摘要(全 entry 参与)
Cache 别名C4 压缩层(infra 文档常用)HCA 128:1 entry
1M context 量级~250K 条 C4 entry(再经 top-$k$ 只读子集)~8K 条 HCA entry

读法:CSA 延续 DSA「先选再看」;HCA 把「看」的成本压到足够低,直接 全 attend 仍可行。


2. CSA:块压缩 + 稀疏注意力

2.1 流程

  1. Prefill / decode 过程中,每凑满 4 个 token 的块,经可学习压缩算子合成 1 条 CSA KV entry(不再 per-token 缓存全长 latent)。
  2. 当前 query 经 lightning indexer(思想延续 DSA / Lightning Indexer)在 $\sim L/4$ 条压缩 entry 上打分。
  3. top-$k$ 条 entry 做 attention;复杂度相对全长 MLA 的 $O(L^2)$ 降为 $O(Lk)$ 量级($k$ 为压缩 entry 数,$k \ll L/4$)。

2.2 相对 DSA 的变化

维度DSA(V3.2)CSA(V4)
KV 粒度每 token 一条 MLA latent每 4 token 一条压缩 entry
Indexer 作用对象全长 latent 序列更短的压缩序列
MLA 结构Core MLA 不变V4 新注意力栈,非 V3.2 MLA 直扩

DSA 的「indexer + top-$k$ + 主 attention」范式 延续;V4 在 indexer 之前增加 固定 stride 块压缩,进一步压 cache 体积与 indexer 扫描长度。


3. HCA:重压缩 + 短序列 dense

3.1 流程

  1. 128 token 合成 1 条 HCA KV entry(压缩比远高于 CSA)。
  2. 序列长度 $\approx L/128$:1M context 仅 ~8K entry,对当前 query 做 标准 dense attention(无需 top-$k$)。
  3. 提供 全局、低分辨率 的历史摘要,与 CSA 的 局部高精度稀疏块 互补。

3.2 为何不用稀疏

HCA 的设计前提是:128:1 压缩后 entry 数 足够少,dense matmul 的 FLOPs 与带宽仍低于「对 $L/4$ 条 CSA entry 做 sparse 路径 + indexer」;相当于用 更粗粒度更简单的读模式


4. V4 内如何「混合」

V4 不是「全层 CSA 或全层 HCA」二选一,而是在同一模型中 组合多种 attention 路径

对象与 CSA/HCA 关系
CSA C4 entry远距稀疏主路径;HiSparse offload 的 inactive 块 主要指此层
HCA entry全局 dense 摘要路径
SWA滑动窗口 精确局部 state;与压缩 entry 独立 eviction
Indexer KVCSA 路径的 lightning indexer 向量;维度与主 entry 不同
Tail buffer不足 4(CSA)或 128(HCA)token 的 未压缩尾;凑满后再入 Classical 池
DeepSeek-V4 异构 KV:CSA 4:1、HCA 128:1、SWA、Indexer、Tail buffer 与 HiSparse offload

图示详情 · 演进总览 §3.7

内存布局V4 KV Layout 专文,算法对象与引擎池化的分界见该文 §1。


5. 相对 V3.2 的效率

V4 把 算力KV 体积 同时压下来,CSA/HCA 是算法侧主因;infra 侧另需 HiSparse / 磁盘 prefix 才能「跑得动」1M。

模型单 token FLOPs @ 1M(相对 V3.2)累计 KV cache @ 1M
V4-Pro27%10%
V4-Flash10%7%

详见 DeepSeek-V4 梗概§1M context 效率


6. 训练侧:渐进式上下文

V4 训练采用 渐进拉长上下文DeepSeek-V4 梗概§训练要点):

  • 4K dense 基座 → 16K → 64K 引入稀疏 → 1M
  • CSA/HCA 与稀疏 indexer 在 中长上下文阶段 才全面启用;短上下文阶段可近似 dense 行为,便于稳定收敛。

7. 与 infra 线的关系

infra 专题依赖 CSA/HCA 的方式
KV layoutClassical 池存 CSA/HCA 压缩块;State 池存 tail + SWA
HiSparse针对 C4 inactive entry 的 CPU offload
磁盘 prefix cacheCSA/HCA 压缩 entry 可直接落盘;SWA 三档策略另计
ESS不可直迁 — ESS 面向 V3.2 per-token latent

完整 基础设施线基础设施线导读


8. 演进链小结

MLA → DSA → CSA → HCA + V4 异构 KV 演进链

图示详情

关系
MLA → DSAMLA 结构不变;在 latent 序列上加稀疏选择
DSA → CSA「先选再看」延续;先 块压缩 再 indexer
CSA ⊥ HCA互补档位:4:1 稀疏精细 vs 128:1 dense 粗摘要
CSA/HCA ⊥ mHC前者改 Attention / KV;mHC 改 残差拓扑

9. 上下游

方向文档
版本总览DeepSeek-V4(两个规格、MoE、训练要点) · Muon
上游DeepSeek-V3.2 · DSA 稀疏注意力
并行(V3.2 infra)Index Share 梗概 — 纯 infra,与 V4 路线 互补
同代残差mHC
部署解读Together.ai — Serving DeepSeek-V4

参考

Hyper-Connections

← 中文导读 · ← 仓库首页(EN) · ← mHC 主文档 · ← 算法线导读 · mHC §3 双随机流形 · V4 梗概 · Raschka §8 论文mHC arXiv:2512.24880 §2(HC 为 mHC 前置)· 落地V4 arXiv:2606.19348


一句话

Hyper-Connections(HC) 把 Transformer 每层 单条残差流 扩成 $n$ 条并行残差流,用可学习矩阵 pre / post / comb 在流与子层(Attention / FFN)之间混合;动机是 加宽残差信息高速公路,但无约束时 破坏恒等映射 → 深层信号可 指数放大,需 mHC双随机流形 约束后才可大规模训练。


算法线位置

方向文档
本文(HC 基础)mHC 节点 前置概念;算法线 ④ 的上游
下游(约束版)mHC(含 §3 双随机流形
正交模块CSA/HCA(Attention / KV)· MoE 线(FFN 路由)

1. 标准残差 vs HC

1.1 标准 Transformer 残差

一层子模块(Attention 或 FFN)的典型写法:

$$ x_{l+1} = x_l + F_l(x_l) $$

性质含义
单流隐状态 $x_l \in \mathbb{R}^d$ 只有 一条 载体
恒等路径即使 $F_l \approx 0$,仍有 $x_{l+1} \approx x_l$
深度可训梯度可沿 $+x_l$ 直通 浅层

1.2 HC 改了什么

HC 不替换 Attention / FFN 内部算子,而是改 残差拓扑

  • 把每层隐状态扩成 $n$ 条并行残差流(扩展率 $n$,mHC / V4 常见 $n{=}4$);
  • 子层 输入 由 $n$ 条流 加权汇聚 得到;
  • 子层 输出写回 $n$ 条流(可与原流 组合混合)。

直觉:$n$ 条并行「信息高速公路」,层间连接比单流残差 更丰富

HC 残差拓扑:单流 vs n 路并行流 + H^pre / F_l / H^post+H^comb

图示详情


2. 多路残差流

记第 $l$ 层、第 $t$ 个 token 处 $n$ 条残差流为:

$$ \mathbf{r}l = (r{l,1}, \ldots, r_{l,n}), \quad r_{l,i} \in \mathbb{R}^d $$

符号含义
$n$扩展率(parallel stream count)
$r_{l,i}$第 $i$ 条残差流上的隐状态切片(实现上常为 $d$ 维向量或 $d/n$ 维分片,依实现而定)
初始化通常由 embedding 或上一层输出 复制 / 投影 到 $n$ 路

相对单流 $x_l$,HC 在 宽度 上多了 $n$ 路,参数与激活的 读写模式 从「一条链」变成「$n$ 路网状混合」。


3. 三组混合矩阵

mHC 论文对每层子模块(Attention 或 FFN)使用 三组 可学习混合(裸 HC 为 无约束实矩阵;mHC 再投影到双随机流形):

矩阵形状(直觉)作用
$H^{\mathrm{pre}}$$1 \times n$(或列向量)$n$ 条残差流 → 汇聚成子层输入 $\tilde{x}_l = \sum_i H^{\mathrm{pre}}i , r{l,i}$
$H^{\mathrm{post}}$$n \times 1$子层输出 $F_l(\tilde{x}_l)$ → 写入某条主流 的权重
$H^{\mathrm{comb}}$$n \times n$子层输出与 各路残差组合混合(写回 $n$ 条流)

另有层间或块级 $H_l^{\mathrm{res}}$($n \times n$)在 相邻层 / 子层之间 混合 $n$ 条流;深层复合 $\prod_l H_l^{\mathrm{res}}$ 是 不稳定性的主要来源(见 §5)。


4. 单层数据流

mHC 主文档 §4 及 vLLM MHCPreOp / MHCPostOp 对齐:

Pre(进 Attention / FFN 前)

  1. 对 $n$ 条残差流做 Norm(如 RMSNorm)。
  2. 由归一化后的流(及可选分支特征)算 mix logits → 得 $H^{\mathrm{pre}}$
  3. 子层输入:$\tilde{x}_l = \sum_i H^{\mathrm{pre}}i \cdot r{l,i}$。

子层

$$ y_l = F_l(\tilde{x}_l) \quad (F_l = \text{Attention 或 FFN/MoE}) $$

Post(出子层后)

$$ r_{l+1,j} = H^{\mathrm{post}}j \cdot y_l + \sum_i H^{\mathrm{comb}}{ji} \cdot r_{l,i} $$

即:子层输出与各路残差按 post / comb 权重写回第 $l{+}1$ 层的 $n$ 条流。

阶段单流残差HC
输入$x_l$ 直连 $F_l$$n$ 路 先混合 再进 $F_l$
输出$x_l + F_l(x_l)$$F_l$ 输出 分流写回 $n$ 路
恒等性$F_l{=}0 \Rightarrow x_{l+1}{=}x_l$一般 不成立(混合矩阵任意)

5. 为何裸 HC 不稳定

问题机制
恒等映射被破坏即使 $F_l \approx 0$,$H^{\mathrm{pre/post/comb}}$ 仍可对 $n$ 路特征 重分配、放大
深层复合放大$\prod_l H_l^{\mathrm{res}}$ 若谱半径 $>1$,范数可 指数增长
论文观测无约束 HC 可出现 ~3000× 量级信号放大,训练 万步级崩溃

标准残差把「子层增量」与「恒等捷径」 解耦;HC 把二者都变成 可学习线性混合,表达力↑,但 缺少保范数结构

mHC 的修复:把上述混合矩阵 投影到双随机流形 $\mathcal{B}_n$,使混合变为 凸组合 / 加权平均 → 见 mHC §3


6. HC 与 mHC、V4 的关系

HCmHC
残差拓扑$n$ 路并行 + 可学习混合同 HC 拓扑
混合矩阵无约束(或弱约束)Sinkhorn–Knopp → 双随机
训练大规模易不稳V4 / 论文报告可训可部署
文档本文mHC
版本HC / mHC
V3 / V3.2 HC、mHC
独立论文 2512.24880提出 HC + mHC
V4mHC 作为残差路径标准组件(与 CSA/HCA 等 正交

7. 与 Attention / MoE 的边界

模块HC 是否涉及
MLA / DSA / CSA / HCA — 改 Attention 与 KV,不改残差拓扑
MoE 路由 — HC 在子层 前后 混合残差流;expert 选择在 FFN 内部
ESS / KV layout — infra 管 cache,不管残差宽化

HC 回答:残差路径加宽时如何连,不回答长上下文或稀疏注意力本身。


8. 上下游

方向文档
下游mHC§3 双随机流形
同代 V4DeepSeek-V4 · CSA/HCA
外部解读Raschka §8

参考

  1. Xie et al. mHC: Manifold-Constrained Hyper-Connections. arXiv:2512.24880, 2025(§2 Hyper-Connections).
  2. DeepSeek-AI. DeepSeek-V4. arXiv:2606.19348, 2026.
  3. Raschka. From DeepSeek V3 to V3.2§8 mHC 附录.

mHC

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §3.7 · ← 算法线导读 · ← V4 梗概 · HC 基础 · Raschka §8 mHC 论文mHC arXiv:2512.24880(2025-12-31)· 落地V4 arXiv:2606.19348


一句话

mHCHyper-Connections(HC) 的多路残差流之上,用 Sinkhorn–Knopp 把残差混合矩阵投影到 双随机流形Birkhoff 多面体),使层间信号混合等价于 凸组合 / 加权平均,从而 恢复恒等映射的稳定性DeepSeek-V4 将其作为残差路径的标准组件。

答疑HC(Hyper-Connections)基础 — $n$ 路并行残差流 + pre/post/comb 混合;裸 HC 破坏恒等映射,mHC 用双随机约束修复


1. 残差路径演进

阶段做法特点
标准残差$x_{l+1} = x_l + F_l(x_l)$恒等路径清晰,深层可训
Hyper-Connections (HC)扩宽残差流为 $n$ 条并行流,可学习混合容量↑,但 破坏恒等映射 → 训练易爆(HC 专文
mHCHC + 流形约束(双随机混合矩阵)保留 HC 表达力,抑制信号放大

Raschka 扩展阅读 §8 · 表 8-1 归纳的 Transformer 模块演进链(节选)(要点速读):

模块演进
AttentionGQA → sliding window(SWA)MLADSACSA/HCA
FFNGeLU → SwiGLU → MoE
残差恒等残差(ResNet)→ HCmHC

扩展阅读Raschka 全文 §8 — Transformer 模块演进表 · 要点速读 §7–8


算法线位置

方向文档
本节点(④ mHC)算法线导读 §1 · HC 基础 · §3 双随机流形
同代 AttentionCSA / HCA · DeepSeek-V4
Attention 上游MLA 低秩注意力 · DSA 稀疏注意力

2. Hyper-Connections基础

标准残差 → $n$ 路并行残差流 + pre / post / comb 混合 → 子层 Attention/FFN;裸 HC 破坏恒等映射,深层可出现 ~3000× 信号放大。

专文Hyper-Connections(HC)— 多路残差流 · 混合矩阵 · 不稳定原因

本节摘要

要点说明
扩展率常见 $n{=}4$(V4 / mHC 实验)
混合$H^{\mathrm{pre}}$ 汇聚入子层;$H^{\mathrm{post}}$、$H^{\mathrm{comb}}$ 写回 $n$ 路
动机加宽残差 信息高速公路
问题$\prod_l H_l^{\mathrm{res}}$ 无约束 → 训练易爆 → mHC(§3)

3. mHC 核心:双随机流形约束

mHC 把 HC 的可学习混合矩阵 投影双随机流形(Birkhoff 多面体 $\mathcal{B}_n$):非负、行和列均为 1 → 对 $n$ 条残差流做 凸组合,抑制无约束 HC 的 ~3000× 级信号放大,恢复深层 近似恒等映射 的稳定性。

3.1 双随机矩阵定义

设 $H \in \mathbb{R}^{n \times n}$。若同时满足:

$$ H_{ij} \ge 0 \quad \forall i,j; \qquad \sum_{j=1}^{n} H_{ij} = 1 ;; \forall i; \qquad \sum_{i=1}^{n} H_{ij} = 1 ;; \forall j $$

则称 $H$ 为 双随机矩阵(doubly stochastic matrix)。

双随机矩阵示例 n=3:H_ij 非负,每行每列和为 1

图示详情

性质含义
行随机每一行是 $n$ 个非负数的 概率分布
列随机每一列之和也为 1(比「仅行随机」更严)
凸组合对向量 $x$,$Hx$ 的每个分量都是 $x$ 各分量的 加权平均

极端点置换矩阵 $P_\pi$(每行每列恰有一个 1)是双随机矩阵;其余双随机矩阵可写成置换矩阵的 凸组合(Birkhoff–von Neumann 定理)。

3.2 Birkhoff 多面体 = 「双随机流形」

所有 $n \times n$ 双随机矩阵的集合记为 Birkhoff 多面体 $\mathcal{B}_n$:

$$ \mathcal{B}n = \mathrm{conv},{, P\pi \mid \pi \in S_n ,} $$

即 $n$ 阶 置换矩阵凸包。mHC 论文把 $\mathcal{B}_n$ 称为残差混合权重所在的 特定流形(manifold);工程语境下常口语化为 双随机流形

答疑Birkhoff 多面体(置换矩阵的凸包) — 双随机矩阵全体 = $\mathrm{conv}{P_\pi}$;mHC 把混合矩阵投影到此集合

训练时 HC 产生 无约束 logits $\tilde{H}$;mHC 用 Sinkhorn–Knopp(§3.4)把 $\tilde{H}$ 投影 到 $\mathcal{B}_n$ 的近似点 $H$。参数在 $\mathbb{R}^{n^2}$ 上优化,但 前向使用的混合矩阵 始终落在(或逼近)双随机集合——这就是 Manifold-Constrained 的含义。

3.3 为何 mHC 需要这个约束

HC 把每层残差扩成 $n$ 条并行流,用可学习矩阵 $H_l^{\mathrm{res}}$ 混合。若 不约束 $H_l^{\mathrm{res}}$:

  • 复合映射 $\prod_{l=1}^{L} H_l^{\mathrm{res}}$ 的谱范数可 远大于 1
  • 特征范数在深层 指数放大
  • 训练在万步级 发散

标准残差 $x_{l+1} = x_l + F_l(x_l)$ 有清晰 恒等路径;无约束 HC 破坏了 这条保范数通道。

设 $n$ 条残差流向量堆叠为 $X \in \mathbb{R}^{n \times d}$,混合后第 $i$ 行:

$$ (X')i = \sum{j=1}^{n} H_{ij} X_j, \qquad H_{ij} \ge 0,; \sum_j H_{ij} = 1 $$

即 $(X')_i$ 是 ${X_j}$ 的 凸组合。由 Jensen / 三角不等式:

$$ |(X')i| \le \sum_j H{ij} |X_j| \le \max_j |X_j| $$

单层混合不会把范数放大到超过输入流的最大范数;多层复合时,信号仍被 凸组合 反复「平均」,近似 保范数恒等映射

混合矩阵类型对范数的影响深层复合
无约束 $H$可任意缩放 / 旋转易指数放大
双随机 $H$凸组合,不增最大流范数近似稳定

3.4 Sinkhorn–Knopp 投影

给定非负矩阵 $K$(通常由 logits 经 $\exp$ 得到),交替 行归一化列归一化

$$ K \leftarrow \mathrm{diag}(r)^{-1} K \mathrm{diag}(c)^{-1} $$

迭代若干步(vLLM 中 sinkhorn_repeat;数值稳定项 hc_sinkhorn_eps)后,$K$ 逼近双随机 $H \in \mathcal{B}_n$。

mHC 对 三组 混合矩阵分别投影:

矩阵作用
$H^{\mathrm{pre}}$$n$ 条残差流 → 子层输入(流间汇聚)
$H^{\mathrm{post}}$子层输出写回主流
$H^{\mathrm{comb}}$子层输出与残差流之间的组合混合

单层读写顺序见 §4 单层数据流

3.5 与标准残差、HC 的对照

路径混合结构恒等映射
标准残差单流 $x_{l+1} = x_l + F(x_l)$显式 $+x_l$
HC多流 + 任意 $H_l^{\mathrm{res}}$无保证
mHC多流 + $H_l^{\mathrm{res}} \in \mathcal{B}_n$凸组合 ≈ 加权恒等

mHC 保留 HC 的多流表达力($n$ 条并行高速公路), 把混合权重限制在 Birkhoff 多面体上——这是「Manifold-Constrained」相对裸 HC 的 最小必要约束

符号(直觉)作用
$H^{\mathrm{pre}}$多条残差流 → 子层输入(流间加权汇聚)
$H^{\mathrm{post}}$子层输出 → 写回某条主流
$H^{\mathrm{comb}}$子层输出与残差流之间的 组合混合

4. 单层数据流

与 vLLM MHCPreOp / MHCPostOp 对齐的直觉:

Pre(进子层前)

  1. 对 $n$ 条残差流做 RMSNorm(及可选 scale/bias)。
  2. 由归一化后的流 + 子层分支特征算 mix logits
  3. Sinkhorn 得到 pre_mixlayer_input $= \sum_i \mathrm{pre_mix}_i \cdot \mathrm{residual}_i$。

Post(出子层后)

$$\mathrm{out}_j = \mathrm{post_mix}j \cdot x + \sum_i \mathrm{comb_mix}{ij} \cdot \mathrm{residual}_i$$

即:子层输出与各路残差按 post / comb 双随机权重写回 $n$ 条流。

infra 注:mHC 额外引入 多流读写 与 Sinkhorn 迭代;论文通过 算子融合 控制开销(见 §5)。


5. 训练与系统工程

mHC 论文除算法外强调 大规模可训可部署

手段目的
TileLang / 自定义 kernelSinkhorn 迭代与 pre/post 融合,减少 HBM 往返
选择性重计算不存巨大中间激活,换算力
DualPipe 通信重叠掩盖流水线 stage 延迟
重排 Norm 与混合顺序降低内存带宽

论文报告:扩展率 $n{=}4$ 时,相对标准 Transformer 训练时间开销约 6.7%(基础设施优化后)。


6. 在 DeepSeek-V4 中的应用

维度说明
角色V4 残差路径组件,与 CSA/HCA、Hash MoE、Muon 等 同期引入
相对 V3.2V3.2 无 mHC;mHC 独立论文(2512.24880)先发表,后在 V4(2606.19348) 与百万 token 架构一并落地
AblationV4 多变量同改,难以单独剥离 mHC 贡献;Index Share 类纯 infra 补丁更易做对照
推理Engram 等演示代码将 Attention/MoE/mHC 作为标准块 mock;生产引擎(如 vLLM)提供 mhc_pre / mhc_post 自定义算子

详见 DeepSeek-V4演进总览 §3.7


7. 与 attention / MoE 线的关系

线mHC 是否涉及
MLA / DSA / CSA — 改的是 注意力与 KV,不是残差拓扑
MoE 路由正交 — mHC 在子层 前后 混合残差流,不替代 expert 选择
ESS / Index Share正交 — 后者是 V3.2 KV / indexer infra

mHC 回答的是:把模型做深、做宽残差流时如何不失稳,而非长上下文 cache 或稀疏注意力本身。


8. 上下游

方向文档
前置概念HC 基础 · §3 双随机流形 · Raschka 全文 §8
同代 V4 组件CSA / HCA · Muon · DeepSeek-V4(Hash MoE)
对比(无 mHC 的上一档)DeepSeek-V3.2

参考

  1. Xie et al. mHC: Manifold-Constrained Hyper-Connections. arXiv:2512.24880, 2025.
  2. DeepSeek-AI. DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence. arXiv:2606.19348, 2026.
  3. Raschka. From DeepSeek V3 to V3.2§8 mHC 附录.
  4. Birkhoff (1946) — 双随机矩阵与置换矩阵凸包(Birkhoff–von Neumann 定理)。
  5. Sinkhorn & Knopp (1967) — 行列交替归一化算法。
  6. 实现参考:vLLM model_executor/layers/mhc.pyMHCPreOp / MHCPostOp + TileLang Sinkhorn kernel).

Hash MoE + FP4

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §3.7 · ← MoE 线导读 · V4 梗概 · 上游 DeepSeekMoE · 上游 aux-loss-free · $L_{\mathrm{Bal}}$ · centroid vs gate-weight 答疑 论文DeepSeek-V4 arXiv:2606.19348


一句话

Hash MoE 是 V4 在 MoE 线 ⑤ 对 FFN 的改动:前几层 把稠密 FFN 换成 Hash-routed MoE(token → expert 由 确定性 hash 决定,不再走 V3 的 centroid / sigmoid 亲和度路由);FP4 MoE 则对 routed expert 权重FP4 量化 + QAT,在继承 DeepSeekMoE 256/8 + shared 骨架的前提下压显存与带宽。


MoE 线位置

方向文档
本节点(⑤ Hash MoE + FP4)§1 Hash 路由 · §2 FP4 量化
MoE 线 hubMoE 线导读 §1
上游 ②–④DeepSeekMoE · aux-loss-free MoE 路由 · 序列均衡损失
版本总览DeepSeek-V4(两个规格、Attention、训练)
正交CSA/HCA · mHC — 不改 expert 选择逻辑本身

1. Hash MoE:路由从「学出来」到「算出来」

1.1 V3 及以前:centroid / affinity 路由

DeepSeekMoE(V2→V3)用 可学习 expert 向量 $e_i$ 与 token hidden $u$ 做亲和度 $u^\top e_i$,再 sigmoid + top-$K_r$ + 动态 bias $b_i$(aux-loss-free)。语义上是 「token 匹配 expert 原型」

1.2 V4 Hash 路由

V4 前几层 改为 Hash-routed MoE

V3 gate affinity uTe_i 与 V4 hash 查询对比;id 确定后共用 EP scatter、Routed FFN、Gather+shared

浅层 MoE 只把路由从 gate 亲和($u^\top e_i$ + sigmoid + top-$K_r$)换成 hash 查表($\varphi(x_t,t)\bmod N_r$);expert id 确定后仍走同一套 EP scatter → Routed FFN → Gather+shared。

图示详情

维度V3 aux-loss-freeV4 Hash MoE(前几层)
Expert 选择$u^\top e_i$ + sigmoid + top-$K_r$确定性 hash(token / 位置 → expert id)
可学习路由参数$e_i$、$b_i$ 等 centroid 式语义匹配
负载均衡$b_i$ + $L_{\mathrm{Bal}}$hash 设计 + 仍可有 shared / 池化均衡
动机语义特化 + 均衡省路由算力与参数;浅层更偏通用变换

读法:Hash MoE 不是换掉整个 V4 的 MoE 栈,而是 部分层 离开 centroid 路由;更深层仍可在 DeepSeekMoE 256 routed / 8 active + shared 框架内沿用 V3 族路由 为准)。

答疑为何只改浅层、深层仍用 centroid? — 浅层通用变换 vs 深层语义特化;静态 hash vs 动态 $b_i$ / EP 均衡

1.3 仍继承什么

  • DeepSeekMoE 形态:细粒度 routed pool + shared experts 恒激活(DeepSeekMoE
  • MoE 并行 / EP:routed gather-scatter 推理路径与 V3 同族(答疑:EP 与 gather/scatter
  • 与 Attention 正交:Hash 只改 FFN 专家选择CSA/HCA 改 Attention/KV

答疑Expert Parallel(EP)与 gather/scatter — routed 分片、scatter/gather 与 V3 同族;Hash 只改 expert id,不改 EP 骨架


2. FP4 MoE:routed expert 低比特权重

对象精度说明
Routed expert 权重FP4 + QAT训练时量化感知,部署减 HBM / 带宽
Shared expert通常高于 FP4(与 V3 FP8 训推栈衔接)恒激活路径对误差更敏感
Router(非 Hash 层)与 V3 族一致sigmoid + bias 等仍可能存在于深层

FP4 MoE 与 V3 的 FP8 动态量化 同族目标(压 FFN 内存),但 比特更 aggressive,且 只针对 routed expert 块


3. 在 V4 两个规格中的角色

规格MoE 侧关注点
V4-Pro(1.6T / 49B act)Hash 前几层 + FP4 routed;能力上限
V4-Flash(284B / 13B act)同族机制,激活参数更小

MoE 改动与 CSA/HCA、mHC、Muon 同期打包进 V4,难以单独 ablation Hash vs FP4 vs Attention。


4. 演进链小结

稠密 FFN → DeepSeekMoE → aux-loss-free → Hash MoE + FP4

图示详情

关系
③ → ⑤继承 MoE 池化与 shared;前几层 路由机制换 Hash
Hash ⊥ centroid浅层 不算 $u^\top e_i$;深层可仍用 V3 族路由
FP4 ⊥ Hash量化对象(权重)与 路由函数(选 expert)正交,V4 同时上

5. 推理 infra 关注点

  • EP + FP4 kernel:routed expert 权重 4bit 存取;需与 shared 高精度路径 分 kernelEP 答疑)。
  • Hash 层:路由 无 GEMM 打分,但 expert id 仍走 gather/scatter;负载由 hash 函数 静态近似均衡
  • Checkpoint 兼容:V3 sigmoid-router 权重 不可 直接灌入 Hash 层逻辑。

6. 上下游

方向文档
MoE 线 hubMoE 线导读
版本总览DeepSeek-V4
路由对照MoE 路由:gate-weight 还是 expert centroid? §4.4
FP8 前代V3 FP8 动态量化

参考

Muon 优化器

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §3.7 · V4 梗概 · CSA/HCA · mHC · Hash MoE + FP4 论文DeepSeek-V4 arXiv:2606.19348 · Algorithm 1 · §2.4 Muon Optimizer · §3.4.1 Efficient Implementation of Muon


一句话

Muon(Momentum Orthogonalized by Newton–Schulz)在 V4 中替换大部分矩阵参数的 AdamW:对动量矩阵做 Newton–Schulz 正交化得到更新方向 $UV^\top$(极因子),各奇异方向步长归一,从而更快收敛、训练更稳;嵌入、输出头、RMSNorm、mHC 门控等仍用 AdamW


V4 中的位置

方向文档
本专文§1 一步在做什么 · §2 Hybrid Newton–Schulz · §3 参数分组 · §4 训练 infra
版本总览DeepSeek-V4(CSA/HCA、mHC、MoE、训练要点)
演进总览§3.7 DeepSeek-V4
三轴图架构-train 轴上的 Muon(100% 训练侧)

1. Muon 一步在做什么

V3 全系 AdamW:对每个参数做元素级二阶矩估计。V4 对 二维权重矩阵 $W\in\mathbb{R}^{n\times m}$ 改用 Algorithm 1

$$ G_t=\nabla_W\mathcal{L}t,\quad M_t=\mu M{t-1}+G_t,\quad O'_t=\mathrm{HybridNewtonSchulz}(\mu M_t+G_t),\quad O_t=O't\cdot\sqrt{\max(n,m)}\cdot\gamma,\quad W_t=W{t-1}(1-\eta\lambda)-\eta O_t $$

其中 Nesterov 技巧体现在对 $\mu M_t+G_t$ 做正交化(而非仅 $M_t$);$\gamma=0.18$ 用于 复用 AdamW 学习率超参(与 Kimi Muon 做法一致)。

V4 参数 AdamW/Muon 分组;Algorithm 1 流水线;Hybrid Newton-Schulz 两阶段系数

图示详情

1.1 与 AdamW 的几何差异

设梯度(或动量)矩阵 $M=U\Sigma V^\top$(SVD):

AdamWMuon
更新形状保留 $M$ 的各向异性($\Sigma$ 仍在)近似 $UV^\top$,奇异值全压到 1
步长语义逐元素自适应各方向等幅的矩阵步
适用参数向量、标量、矩阵均可矩阵参数为主

直观上:AdamW 沿「梯度自然拉伸」的方向走;Muon 先 去掉 $\Sigma$ 的缩放,只保留方向结构,再在正交方向上统一步长——论文报告在 万亿级 MoE 上收敛更快、对学习率 schedule 更不敏感。

1.2 V4 为何不用 QK-Clip

Kimi Muon 曾配合 QK-Clip 抑制 attention logit 爆炸。V4 在 query 与 KV entry 上直接做 RMSNorm(配合 CSA/HCA 架构),logit 已受控,故 不再使用 QK-Clip(论文 §2.4)。


2. Hybrid Newton–Schulz 正交化

显式 SVD 每步太贵;Muon 用 Newton–Schulz 迭代近似极因子 $UV^\top$。先将 $M$ 按 Frobenius 范数归一化 $M_0=M/|M|_F$,再重复:

$$ M_k=aM_{k-1}+b(M_{k-1}M_{k-1}^\top)M_{k-1}+c(M_{k-1}M_{k-1}^\top)^2M_{k-1} $$

V4 相对 Kimi Muon 的改动混合两阶段、共 10 步——

阶段步数系数 $(a,b,c)$作用
快速逼近1–8$(3.4445,,-4.7750,,2.0315)$奇异值快速靠近 1
精修稳定9–10$(2,,-1.5,,0.5)$将奇异值稳定在 1

下面代码与论文 Algorithm 1 / 式 (28) 对齐,便于对照 HybridNewtonSchulz 与单步 Muon 更新(教学用 NumPy,非 V4 生产实现):

import numpy as np

# V4 Hybrid Newton-Schulz: 8 fast + 2 stable (paper §2.4)
NS_STAGES = [
    (8, (3.4445, -4.7750, 2.0315)),
    (2, (2.0, -1.5, 0.5)),
]


def newton_schulz_step(m: np.ndarray, abc: tuple[float, float, float]) -> np.ndarray:
    a, b, c = abc
    mm = m @ m.T
    return a * m + b * (mm @ m) + c * (mm @ mm @ m)


def hybrid_newton_schulz(m: np.ndarray) -> np.ndarray:
    """Approximate polar factor UV^T; input M is n×m."""
    m = m.astype(np.float64)
    norm = np.linalg.norm(m, ord="fro")
    if norm == 0:
        return m
    m = m / norm
    for n_steps, coeffs in NS_STAGES:
        for _ in range(n_steps):
            m = newton_schulz_step(m, coeffs)
    return m


def muon_step(
    w: np.ndarray,
    grad: np.ndarray,
    momentum: np.ndarray,
    *,
    lr: float = 2.7e-4,
    mu: float = 0.95,
    weight_decay: float = 0.1,
    gamma: float = 0.18,
) -> tuple[np.ndarray, np.ndarray]:
    """One Muon step for matrix W (Algorithm 1)."""
    momentum = mu * momentum + grad
    nesterov = mu * momentum + grad
    ortho = hybrid_newton_schulz(nesterov)
    scale = np.sqrt(max(w.shape)) * gamma
    update = ortho * scale
    w = w * (1 - lr * weight_decay) - lr * update
    return w, momentum

读法hybrid_newton_schulz 输出近似正交矩阵;sqrt(max(n,m)) * gamma 把更新 RMS 缩放到与 AdamW 超参兼容的量级;最后 decoupled weight decay 与 AdamW 形式相同。


3. 哪些参数用 Muon,哪些仍用 AdamW

优化器模块(论文 Basic Configurations)
AdamWembedding、prediction head、所有 RMSNorm 权重、mHC 静态 bias / 门控因子
Muon其余全部(Attention 投影、FFN、MoE expert 等矩阵权重)

动机:正交化是 矩阵级 操作;embedding / LayerNorm 类 向量或标量 参数不适合 Muon,继续 AdamW 更自然。

V4-Flash / V4-Pro 共用 Muon 超参:momentum 0.95、weight decay 0.1、$\gamma=0.18$;AdamW 侧 $\beta_1=0.9$、$\beta_2=0.95$、$\varepsilon=10^{-20}$、weight decay 0.1(§4 训练设置)。


4. 训练 infra:Muon 与 ZeRO

Muon 需要 完整梯度矩阵 才能做 NS 迭代,与传统 ZeRO 按元素切分 AdamW 状态 冲突。V4 训练框架(§3.4.1)要点:

问题做法
ZeRO vs 整矩阵更新混合 ZeRO bucket 分配:限制 ZeRO 并行度;用 knapsack 把参数矩阵分到各 rank,负载均衡
bucket 对齐各 rank bucket pad 到同大小 以便 reduce-scatter;padding 开销 < 10%
超大 DP超出 ZeRO 上限的 DP 组内 冗余计算 Muon 更新,换更少 bucket 内存
NS 吞吐同 shape 连续参数 合并 batch 跑 NS
精度NS 在 BF16 matmul 下仍稳定;MoE 梯度跨 DP 随机舍入到 BF16 同步,通信量减半
累加reduce-scatter 改为 all-to-all + 本地 FP32 求和,避免低精度树形累加误差

Muon 与 CSA/HCA、mHC、Hash MoE 同期打包进 V4,难以单独 ablation 优化器 vs 架构(见 V4 定位)。


5. 演进链小结

关系
V3 AdamW → V4 Muon训练侧优化器替换;推理权重格式不变(读者侧无「Muon kernel」)
Muon ⊥ CSA/HCA优化器 vs Attention 算子 正交
Muon ⊥ Hash MoE / FP4优化器 vs MoE 路由/量化 正交
Muon ↔ mHCmHC 门控仍 AdamW;主体矩阵 Muon

6. 上下游

方向文档
版本梗概DeepSeek-V4
同代 AttentionCSA / HCA
同代残差mHC
同代 MoEHash MoE + FP4
演进总览§3.7 V4

参考

DeepSeek DSA 与 Index Share 系列

← 中文导读 · ← 仓库首页(EN) · 主题:V3.2 的 DeepSeek Sparse Attention (DSA) 把长上下文注意力从 $O(L^2)$ 降到 $O(Lk)$;Index Share(IndexCache) 在 DSA 之上用跨层 index 复用砍掉冗余 indexer,纯 infra。 系列导读DSA 逻辑详解 · Index Share 逻辑详解 · 算法线导读 · 基础设施线导读 · ← 演进总览 §3.6 V3.2


文档索引

文档内容对应梗概
DeepSeek-V3.1前置:128K、Hybrid 推理、Prefill/Decode MLA 切换;V3.2 续训起点V3.1-Terminus
DSA 稀疏注意力版本表入口:DSA 三阶段、异构 Cache、流程图V3.2 梗概
Lightning Indexer 详解Lightning Indexer 公式、Indexer-Cache、Decode 一步前向DSA 梗概
DSA 逻辑详解DSA 两阶段稀疏注意力、异构 KV Cache、与 MLA/ESS 关系V3.2 梗概
ESS Latent offloadLatent-Cache CPU offload;FlashTrans / 热池V3.2 infra
Index Share 逻辑详解F/S 层划分、FFFS 模式、与 ESS/V4 正交性Index Share 梗概
DeepSeek-V4下游算法:CSA/HCA、1M context(非 V3.2 补丁)V4 梗概

示意图

⓪ Indexer Decode 一步前向

Lightning Indexer Decode 一步:固定 t 遍历 s,输入 h_t 与 Indexer-Cache,输出 I_{t,s} 与 Top-k index 集

Lightning Indexer 详解§2 walkthrough

① DSA 流水线

DSA:Lightning Indexer → Top-k → Core MLA;Indexer-Cache 与 Latent-Cache

Lightning Indexer → Top-$k$ → Core MLA;Indexer/Latent 双 Cache

② MLA Decode 一步分工

MLA Decode 一步: Indexer 选 I vs Latent-Cache 升维 + Core MLA

Indexer 选 $I$ vs Latent-Cache 升维 + Core MLA

③ Index Share FFFS

Index Share FFFS 跨层复用示意

跨层 F/S 划分与 FFFS 复用示意

改图:python3 scripts/svg/gen_dsa_svgs.pypython3 scripts/svg/check_svgs.py(含 Markdown 嵌入 + 布局遮挡校验)


推荐阅读顺序

  1. V3.1-Terminus — 128K、Hybrid 推理、MLA Prefill/Decode 切换(DSA 直接前置
  2. DSA 梗概 — 三阶段总览
  3. Lightning Indexer — indexer 公式与 Indexer-Cache
  4. DSA 逻辑 — 稀疏注意力 + Indexer/Latent 双 Cache
  5. ESS Latent-Cache offload — CPU offload 与 GPU 热池
  6. Index Share — 跨层 index 复用(infra 补丁)
  7. CSA/HCA 混合压缩注意力 — 算法线继续演进

与现有栈

组件关联
V3.1-Terminus 梗概DSA 上游:128K + Hybrid,无稀疏注意力
V3.2 梗概DSA 所在版本
中文导读文章索引、演进图示、许可说明
Engram 条件记忆正交稀疏轴:n-gram 查表 vs DSA top-$k$
版本演进总览算法线 + infra 线全景
算法线导读MLA → DSA → CSA/HCA + mHC 专题 hub
基础设施线导读MLA KV → 异构 Cache → Index Share → ESS → V4 HiSparse
Raschka V3→V3.2 解读DSA / RLVR / GRPO 第三方梳理

论文:DSA arXiv:2512.02556 · IndexCache arXiv:2603.12201 · ESS arXiv:2512.10576

DSA稀疏注意力

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §3.6 · ← 算法线导读 · ← 基础设施线导读 · ← V3.2 梗概 · 上游 MLA · 下游 CSA/HCA · 下游 V4 梗概 · 下游 Index Share · 下游 ESS · Lightning Indexer 详解 · 完整逻辑 · Raschka §4 DSA 论文DeepSeek-V3.2 arXiv:2512.02556 · Exp:DeepSeek-V3.2


一句话

DSAMLA 不变 的前提下,把长上下文注意力从「对全长 $L$ 做稠密 MLA」改成 先 indexer 扫全长选 top-$k$,再只对 $k$ 个 latent entry 做 MLA;主路径复杂度 $O(L^2) \to O(Lk)$($k{=}2048$,$k \ll L$)。DeepSeek-V3.2-Exp(2025-09,DeepSeek 官方实验版)验证稀疏不损精度;DeepSeek-V3.2(2025-12)为正式版。

逻辑详解DSA逻辑详解 · Lightning Indexer · 系列导读


技术归属

组件机构说明
DSADeepSeek稀疏注意力算法;V3.2 唯一架构改动
V3.2-Exp / V3.2DeepSeek官方模型 release(Exp 铺生态,正式版完整后训练)
ESS百度百舸针对 DeepSeek V3.2 的 Latent-Cache offload DSA 发明方
IndexCache清华 + 智谱跨层 index 复用; DSA 发明方

易混点:ESS 论文标题写 for DeepSeek-V3.2-Exp,指的是优化对象是 DeepSeek 模型,不是百度发布了 V3.2-Exp。


流程图

DSA:Lightning Indexer → Top-k → Core MLA;Indexer-Cache 与 Latent-Cache

图示详情 · 系列目录


三阶段

阶段做什么复杂度说明
Lightning Indexer当前 $q_t$ 对全长历史的 indexer key $k_s$ 打分($I_{t,s}$)$O(L^2)$ 量级,常数极小决定「看谁」;walkthrough
② Top-$k$ Selector取分数最高的 $k{=}2048$ 个位置$O(L \log k)$得到 index 集合 $I$
③ Core MLA仅对 $I$ 中 entry 做标准 MLA attention$O(Lk)$精度敏感主算子
DSA 每层三阶段:Query + 全长历史 → Lightning Indexer → Top-k → Core MLA ← Latent-Cache

图示详情

与滑动窗口的区别:DSA 的 $k$ 个位置是 **学到的内容相关** 的不是固定局部窗口

Lightning Indexer 专题Lightning Indexer 详解


异构 KV Cache

DSA 把 cache 拆成两类(为 ESS offload、Index Share 铺路):

Cache作用占比(ESS 论文)GPU 常驻
Indexer-Cacheindexer 打分、选 top-$k$~16.8%(每步全扫)
Latent-Cache核心 MLA 的 latent KV~83.2%可 offload(ESS

主 attention 只读 被选中的 $k$ 个 latent entry → Latent-Cache 适合稀疏访问与 CPU 分层。


基础设施线位置

方向文档
本节点(② Indexer/Latent 异构)基础设施线导读 §1
上游 ① 同质 MLA KVMLA 低秩注意力
下游 ③ Index ShareIndex Share 梗概(indexer 算力,并列
下游 ④ ESSESS Latent offload(Latent offload,并列
下游 ⑤ V4 infraDeepSeek-V4 梗概§推理 infra · KV layout · HiSparse · 磁盘 prefix

算法线位置

方向文档
本节点(② DSA)算法线导读 §1
上游 ① MLAMLA 低秩注意力
下游 ③ CSA/HCACSA / HCA · DeepSeek-V4

在版本线中的位置

版本DSA
V3 / V3.1-T稠密 MLA,无 DSA
V3.2-Exp在 Terminus 上 续训加 DSA;benchmark 平淡,铺推理生态
V3.2架构同 Exp;完整后训练成品
Index Share不改 DSA 算法;跨层复用 top-$k$ index,减 indexer 重复计算(Index Share 梗概
V4CSA/HCA 等 下一代稀疏/压缩注意力

相对 V3.1-Terminus,V3.2 唯一架构改动即为 DSA;MoE、MLA latent 格式、参数量均不变。


与 MLA 的关系

- MLA:K/V 压入 latent 再缓存

  • DSA:在 MLA latent 序列上增加「选哪些位置参与 attention」
  • V3.1 Hybrid(Prefill MHA / Decode MQA)仍是 DSA 的前置(DeepSeek-V3.1

推理 infra

组件作用
DeepGEMMindexer logit kernel
FlashMLAsparse MLA paged kernel
IndexCacheIndex Share 跨层 index 复用
ESSLatent-Cache CPU offload

延伸

资源说明
Lightning Indexer 详解Lightning Indexer 公式、Indexer-Cache、与滑动窗对比
DSA逻辑详解完整机制、与 Hybrid/ESS/Engram 关系
Index Share逻辑详解Index Share FFFS 模式
DeepSeek-V3.2V3.2 版本梗概
Raschka DSA 解读第三方梳理

论文:V3.2 2512.02556 · ESS 2512.10576

DSA逻辑详解

← 中文导读 · ← 仓库首页(EN) · ← 系列目录 · DSA 梗概 · Index Share 逻辑 · V3.2 梗概 · 演进总览 §3.6 · Raschka §4


1. 定位:V3.2 相对 V3.1 的唯一架构改动

DeepSeek-V3.2(2025-12 正式版;2025-09 先有 V3.2-Exp)在 671B MoE + MLA 基座上,相对 V3.1-Terminus 只改了一处:用 DSA 替换稠密长上下文注意力。

维度V3.1-TV3.2
参数量 / 激活671B / 37B同左
上下文128K128K
注意力稠密 MLA(Hybrid Prefill/Decode)稀疏 MLA:indexer 选 top-$k$ 再算
公开 benchmark基线与 V3.1-T 基本持平

V3.2-Exp 与 V3.2 权重架构相同;Exp 验证「稀疏不损精度」,正式版为续训 + 后训练成品。

梗概DeepSeek-V3.2 梗概


2. 问题:稠密注意力的 $O$ 墙

标准多头注意力对长度为 $L$ 的序列,QK 点积与 softmax 归一化的有效复杂度为 $O(L^2)$(相对上下文长度二次增长)。在 128K 长上下文下:

  • Prefill:算量与 KV 写入随 $L$ 急剧上升;
  • Decode:每步虽只增 1 token,但需 attend 全长 cache,$T=L$ 时 attention 项为 $O(L)$ per step,累积仍可观;
  • KV Cache 显存:MLA 已压缩 KV,但全长 latent 仍随 $L$ 线性涨。

DSA 的目标:在几乎不损精度的前提下,把「对谁做 attention」变成稀疏问题,从而把主 attention 降到 $O(Lk)$,$k \ll L$。


3. 机制:两阶段稀疏注意力

DSA 每层(在 MLA 路径上)拆成 索引核心注意力 两阶段:

DSA 两阶段:Lightning Indexer → Top-k → Core MLA;Indexer-Cache 与 Latent-Cache

图示详情

3.1 Lightning Indexer

专题Lightning Indexer 详解

  • 极低 head 维 的点积:当前 indexer query $q_t$ 对 每条历史 token $s$ 的 indexer key $k_s$(Indexer-Cache 第 $s$ 行)打分,得 $I_{t,s}$(walkthrough)。
  • 复杂度仍是 $O(L^2)$ 量级(每层、每 query 要扫全长),但常数极小,远轻于完整 MLA attention。
  • 输出:每个历史位置的重要性分数,用于后续 top-$k$ 选择。

3.2 Top-$k$ Selector

  • 从全长中选出 $k=2048$ 个最重要的 latent entry。
  • 得到稀疏 index 集合 $I$,$|I|=k$。

3.3 Core MLA Attention

  • 仅对 $I$ 中的 entry 做标准 MLA attention($O(Lk)$,$k$ 固定)。
  • 这是精度敏感的主路径;稀疏模式由 indexer 决定「看哪里」。

逻辑链:Indexer 贵但轻 → 主 attention 贵但只算 $k$ 个位置 → 总长 $L$ 很大时总收益显著。


4. 异构 KV Cache:Indexer-Cache 与 Latent-Cache

DSA 不仅改算子,还 显式分裂 KV 存储,为后续 offload 与 Index Share 提供结构基础(见你截图中的「Index Cache / Latent Cache」表述;正式文档称 Indexer-Cache / Latent-Cache)。

Cache 类型存什么典型占比(ESS 论文)访问模式GPU 常驻
Indexer-Cacheindexer 所需 KV,用于打分、选 top-$k$~16.8%每步全量参与 indexer 计算
Latent-Cache核心 MLA attention 的 latent KV~83.2%被选中的 top-$k$ entry 进入主 attention可 offload(ESS

设计含义

  1. Indexer-Cache 必须留在 GPU:每 decode step 都要对全长跑 indexer,offload 会拖垮延迟。
  2. Latent-Cache 可分层:主 attention 只 touch $k$ 个 entry → ESS 等方案可把 低频、未选中 的 latent 放到 CPU,按稀疏访问拉回。
  3. Index Share 的「Index」:后文 infra 补丁复用的是 top-$k$ index 集合(及 F 层算出的 indexer 结果),与 Indexer-Cache 常驻 GPU 并不矛盾——省的是 重复跑 indexer 算子,不是省 Indexer-Cache 本身。

延伸Index Share 逻辑 · ESS 详解


5. 与 V3.1 Hybrid 推理的关系

V3.1 引入 Hybrid:Prefill 用 MHA 形态、Decode 用 MQA 形态,降低 decode KV 带宽(MHA / GQA / MQA 对照见 V3.1 梗概 §MLA 模式切换)。DSA 在 V3.2 上 叠加稀疏选择,不是推翻 MLA:

  • MLA 仍负责 低秩 KV 压缩
  • DSA 在 MLA latent 序列上增加 「选哪些位置参与 attention」
  • 推理栈需 自定义 sparse attention 路径(vLLM day-0、FlashMLA paged kernel 等)。

6. 推理 infra 关注点

组件作用
DeepGEMMindexer logit kernel(含 paged 版)
FlashMLAsparse attention 的 paged kernel
Index Share跨层复用 index,减 indexer 次数
ESSLatent-Cache CPU offload,与 Index Share 正交可叠加

7. 上下游

方向关系
上游V3.1-Terminus:128K + Hybrid,无 DSA
同架构V3.2-Exp → V3.2 正式版
下游 infraIndex ShareESS
下游算法CSA/HCA 混合压缩注意力 · V4 梗概:压缩 + 稀疏的下一代
正交Engram 条件记忆:n-gram 查表稀疏轴

8. 参考

Lightning Indexer 详解

← 中文导读 · ← 仓库首页(EN) · ← DSA 系列导读 · ← 演进总览 §3.6

← DSA 梗概 · DSA 逻辑 · §1 在 DSA 中的角色 · §1 答疑:O(L²) 与常数极小 · 为何不用 softmax · Decode 一步 walkthrough 论文DeepSeek-V3.2 arXiv:2512.02556 · 第三方Raschka §4


1. 在 DSA 中的角色

Lightning IndexerDeepSeek Sparse Attention (DSA)第一阶段:在 Core MLA 做昂贵、精度敏感的主 attention 之前,用极低成本决定「当前 token 该 attend 哪些历史位置」,供 Top-$k$ Selector 选出 $k{=}2048$ 个历史下标。

每层 DSA 流水线:Indexer 选位置 → Top-$k$ 得 index 集 $I$ → Core MLA 只对 $I$ 内 entry 算 attentionIndexer-Cache 与 Latent-Cache 分工 · ess-dual-cache 图

谁对谁打分?

Decode 推当前 token $t$ 时,Indexer 做的是:一个当前 query,对全长历史每一个历史位置 $s$ 各打一个分。

符号从哪来角色
Query 侧(当前)$q_t$(或 $q_{t,j}$,$j$=indexer 头)本步 $h_t$ 现算,不进 cache打分方:「我现在要 attend 谁?」
Key 侧(历史)$k_s$Indexer-Cache 第 $s$ 行(历史 token $s$ 预存)被打分方:「历史第 $s$ 个 token 有多相关?」
输出$I_{t,s}$对每个 $s=1\ldots L$ 一个标量当前 $t$ 认为 历史 $s$ 应进入 Top-$k$ 的分数

一句话:$q_t$ 对每条历史的 $k_s$ 打分 → 得到 $L$ 个 $I_{t,s}$ → Top-$k$ 得 $I$ → Core MLA 只对 $I$ 内 Latent-Cache 做 attention。

方向$q_t \to k_s$(当前 query 选历史 key),不是 $k_s$ 选 $q_t$,也不是每个历史 token 各自做 top-$k$。

对比Lightning IndexerCore MLA
目的决定看谁算 attention 输出
扫过的历史全长 $L$ 个历史 token $I$ 内 $k$ 个历史 token
典型复杂度$O(L^2)$ 量级,常数极小$O(Lk)$,$k$ 固定
是否 softmax为何?(精度主路径)
是否读 512 维 $c^{KV}$(读 indexer 专用 cache)(升维后做 MLA)

答疑:为何 O(L²) 却说「常数极小」?

表里写 Indexer 典型复杂度 $O(L^2)$ 量级、常数极小,容易读成矛盾:既然还是二次,凭什么说「极轻」? 要点:$O(\cdot)$ 只描述随 $L$ 增长的;真正决定耗时的是前面的系数(每对 $(t,s)$ 做多少算、读多少字节、走多少条算子)。Indexer 与稠密 MLA 同阶 $L^2$,但系数通常小 一个数量级以上

1. 「O(L²)」在这里指什么?

模式Indexer 在做什么量级
Prefill序列里每个位置 $t$ 都要对全部可见历史 $s$ 打分$O(L^2)$(主瓶颈常在这里)
Decode 一步一个当前 $q_t$ 对全长 $L$ 个 $k_s$ 打分$O(L)$ per step

因此「$O(L^2)$」主要是 Prefill / 训练口径;Decode 每步是线性的,但每层仍要扫全长 Indexer-Cache。表里与 DSA逻辑详解 沿用同一说法:相对全长历史做 routing,阶与稠密 QK 相同,常数不同

2. 常数小在哪?

论文 (2512.02556 §DSA) 原话:indexer 仍是 $O(L^2)$,但 requires much less computation compared with MLA;且 small number of heads、可 FP8 实现。本地实现与图(§2 walkthrough)可拆成下面几条:

维度Lightning IndexerCore MLA(稠密对照)
每 token 读什么Indexer-Cache 里 低维 $k_s$(§4 约占 KV ~16.8%Latent-Cache 512-d $c^{KV}$ + RoPE,再 升维 到 128 头
头数$H^I$ 很少(远小于 MLA 128 头)128 query 头完整 attention
单步算子$\sum_j w_{t,j},\mathrm{ReLU}(q_{t,j}\cdot k_s)$:点积 + ReLU + 加权求和QK$^\top$ → softmax → 乘 $V$(精度主路径)
是否 softmax / $V$
主 attention 扫多长必须 全长 $L$(为选 Top-$k$)DSA 下 $k{=}2048$ 条($O(Lk)$)

一句话:Indexer 是「廉价、低维、无 softmax 的全长打分」;贵的是后面只对 $k$ 条做的 MLA。 系数小来自 更窄的向量、更少的头、更少的算子,而不是 $L$ 的阶更低。

为何 Indexer 不用 softmax?

分工不同Core MLA 的输出是当前 token 的表示 $u_t$,要对选中的历史做 softmax 权重 × $V$ 加权求和——权重必须在参与求和的条目上 非负且和为 1Lightning Indexer 只做 routing:为每个历史下标 $s$ 打一个 可比大小的标量 $I_{t,s}$,再 Top-$k$ 得到下标集 $I$;不读 $V$、不产出隐状态,因此 不必 把 $L$ 个分数归一化成 attention 概率。

Top-$k$ 只关心排序,不关心「归一化后的概率」。Indexer 只需回答「哪 $k$ 个 $s$ 最该进主 attention」;$\mathrm{ReLU}(q\cdot k)$ 加多头加权求和 足够表达相关性,又比对每个 $t$ 在全长 $L$ 上做 $\exp$ → 求和 → 除 的 softmax 便宜得多(Prefill 下这是 $O(L^2)$ 格点上的额外非线性)。

Lightning IndexerCore MLA
产出下标集 $I$(哪 $k$ 个 $s$)向量 $u_t$
分数怎么用排序 → Top-$k$softmax → 权重 → 乘 $V$
是否在全长 $L$ 上归一化DSA 下在 $k$ 条子集上 softmax

训练 vs 推理:推理时 Indexer 故意省略 softmax;训练阶段仍可用 KL 散度 等目标,让 Indexer 的选中模式 对齐 稠密 MLA 的 attention 分布(见 §7 训练)。学会「看谁」之后,推理用 廉价打分 + hard Top-$k$ 即可;精度主路径的 softmax 留给 Core MLA,且 只对 $k{=}2048$ 条 latent 做,不再扫全长。

小结:Indexer = 全长粗筛(cheap score);Core MLA = 子集精算(softmax + $V$)。ReLU 提供非线性,真正稀疏来自 Top-$k$(见 §4 打分公式),不是 ReLU 把大部分分数截成 0。

3. 粗算对比

记每个 $(t,s)$ 对的 Indexer 代价 $\propto H^I \cdot d_I$($H^I$ 个头、每头 $d_I$ 维点积;V3.2 官方实现里 $H^I$ 小、$d_I$ 低,且可走 FP8)。 稠密 MLA 的 QK 一项 $\propto H^{\mathrm{MLA}} \cdot d_{\mathrm{head}}$,且之后还有 softmax + 对 $V$ 的加权($V$ 维与 latent 升维同量级)。

再乘 cache 带宽:Indexer 只读 Indexer-Cache 行;MLA 读 512-d latent 并展开。ESS 论文给出异构占比 Indexer ~16.8% / Latent ~83.2%,单 token 的 indexer footprint 约为 latent 的 ~1/5,Prefill 全长扫 cache 时 内存流量也差一截。

所以:阶仍是 $L^2$,但「每格」便宜一个数量级以上 —— 这就是「常数极小」的含义。

4. 既然这么轻,为什么 Index Share 还要优化它?

常数小 可忽略:

  • Prefill:层数 $\times$ 全长 $\times$ 每层独立 indexer → 长上下文下 indexer 可占 Prefill 大部分时间(IndexCache 论文引 V3.2 场景约 ~81%§8 推理与 infra)。
  • Decode:每步 $O(L)$ 且 每层都跑;$L{=}128\text{K}$ 时累加仍可观。
  • DSA 总收益:Indexer 贵但 只 routing;Core MLA 从 $O(L^2)$ 收到 $O(Lk)$($k{=}2048$),端到端长上下文仍明显变快。

Index Share 动的是 重复 indexer 算子(层间复用 Top-$k$),不是否认「单算 indexer 很轻」,而是 F 层算一次、S 层跳过

5. 和推荐 ETA 的同一句话

两阶段都是 cheap score over full history → expensive attention on top-$k$(与推荐场景 ETA 同构)。ETA 里 Stage-1 也常常是 低维内积 / 双塔,Stage-2 才是 完整 target attention;DSA 的「常数极小」就是 Stage-1 故意做 极简打分器


2. Decode 一步 walkthrough:$t$、$s$ 怎么完成?

上面是概念层:固定当前 $t$,遍历历史 $s$ 打分,Top-$k$ 选下标。下面用 $L=8$、当前 $t=9$ 的一次 decode 前向(实际 $L$ 可达 128K),把输入 → 前向 → 输出三块与实现对齐。

Decode 一步 Indexer 前向:固定 t=9,遍历 s=1..L 得 I_{t,s},Top-k 得 I;输入 h_t 与 Indexer-Cache,输出分数向量与 index 集

图示详情

2.1 输入是什么?

输入形状 / 含义何时产生
$h_t$(例 $h_9$)[5120] 当前隐状态本步由上一层输出
Indexer-Cache 第 $s$ 行 $k_s$[d_I] indexer key历史:token $s$ 成为当前步时已写入
Latent-Cache $c_s^{KV}$[512] + $k^R$Indexer 不读;Core MLA 升维用

历史 $s=1\ldots 8$ 在各自成为「当前步」时已完成 K 写入(与 MLA 主路径并行、更轻):

$$ k_s = W^{IK},\mathrm{proj}(h_s) \quad \Longrightarrow \quad \text{append Indexer-Cache 第 } s \text{ 行} $$

本步 $t=9$ 不重算 $k_1\ldots k_8$,只读 cache。

2.2 前向怎么完成 $t$、$s$ 操作?

固定当前 $t=9$,对 每个历史 $s \in {1,\ldots,L}$ 各算一个分:

$$ I_{9,s} = \sum_{j=1}^{H^I} w_{9,j},\mathrm{ReLU}(q_{9,j} \cdot k_s) $$

步骤操作$t$ / $s$ 含义
A$q_9 = W^{IQ},\mathrm{slice}(h_9)$$t$ 只出现一次:现算当前 query
B$s=1,2,\ldots,L$(实现为 batched GEMM)$s$ 在循环里扫:同一 $q_9$ 点积 L 个 $k_s$
CTop-$k$($k{=}2048$)取 $I_{9,s}$ 最高的 $k$ 个历史下标 $s$,得 $I$
  • DeepGEMMdot(q_t, Indexer-Cache) 一次产出长度 $L$ 的分数向量
  • Indexer 不算 softmax / $V$ / 512 维 $c^{KV}$(留给 Core MLA)

2.3 输出是什么?

输出形状下游
分数向量 $[I_{t,1},\ldots,I_{t,L}]$$[L]$中间量;Top-$k$ 后立即丢弃大部分
index 集 $I$$|I|=k$ 个 $s$Core MLA 只读 Latent-Cache 中 $s \in I$ 的行
(本步 append)$k_t$、$c_t^{KV}$各 1 行供下一步 $t{+}1$ 当历史 $s$ 使用

$L=8$ 时 Top-$k$ 最多 $\min(2048,L)=8$;$L=32\text{K}$ 时 $k{=}2048$ 才有稀疏收益。

2.4 Prefill 与 Decode

模式当前 $t$可见历史 $s$Indexer
Prefill 第 $t$ 行batch 内位置 $t$$1 \le s < t$对前缀打分 → Top-$k$ → Core MLA
Decode 一步新 token,$t=L{+}1$$1 \le s \le L$对全长 Indexer-Cache 打分 → Top-$k$

每处理完 token $t$,append $k_t$ 到 Indexer-Cache(与写 $c_t^{KV}$ 到 Latent-Cache 同步发生,Indexer 路径更轻)。

MLA Decode 一步: Indexer 选 top-2048 位置 vs Latent-Cache 升维并做 Core MLA

图示详情

左栏:Indexer 路径(与上文 walkthrough 一致);右栏:Latent-Cache 升维 + Core MLA,只吃 $I$ 内 entry。


3. 「位置」、$t$ / $s$ 与 Top-$k$ 方向

「位置」= 序列里第几个 token 的下标

不是空间坐标,也不是 attention head 编号。 已生成序列长度 $L$ 时,每个 token 占序列中的一个槽位;槽位编号就是下标(walkthrough 用 $1\ldots L$,公式里常写 $0 \le s < t$)。

符号指谁在 decode 一步里
$t$当前正在算的 token本步新生成的那个 query(来自 $h_t$)
$s$历史序列里的某个 tokenIndexer-Cache / Latent-Cache 里第 $s$ (过去某 token 存下的向量)
$j$(公式 $q_{t,j}$)Indexer 的第 $j$ 个头与历史下标 $s$ 无关;仅多头打分时出现
位置 t/s 与 Top-k 方向:当前 q_t 对历史 Indexer-Cache 各行 k_s 打分,Top-k 选出 k 个 s;j 为多头编号

图示详情

图中历史下标有时写作 $j$(如 $\mathrm{indexer}j$),与公式里的 $s$ 同义;不要与 $q{t,j}$ 里的头编号 $j$ 混用。

Top-$k$:谁对谁选?

一句话当前 step 的 query,在全部历史 token 里选出 $k$ 个最相关的下标(与 §2 walkthrough 一致)。

Decode 每推一个新 token,$t$ 前进一格,重新对更新后的全长历史做一遍 Top-$k$(Index Share 可在层间复用 $I$,那是 infra 优化,不改变「$q_t$ 选历史 $s$」的方向)。


4. 打分公式

对当前 query 下标 $t$、历史 token 下标 $s$($0 \le s < t$),重要性分数:

$$ I_{t,s} = \sum_{j=1}^{H^I} w_{t,j},\mathrm{ReLU}!\left(q_{t,j} \cdot k_s\right) $$

符号含义
$H^I$Indexer 头数(远小于 MLA 的 128 头;低维、廉价)
$q_{t,j}$当前 token $t$ 上、第 $j$ 个 indexer head 的 query($j$=头编号)
$k_s$历史 token $s$ 的 indexer key(Indexer-Cache 第 $s$ 行;非 MLA 主 KV)
$w_{t,j}$可学习的 per-head 标量权重
$I_{t,s}$当前 $t$ 认为 历史 $s$ 有多重要(分数越高越应进入 Top-$k$)

实现要点

  • Indexer 只对 query 侧多头;keys 已在 cache,按历史下标 $s$ 查第 $s$ 行即可。
  • ReLU 不保证分数为 0;真正稀疏来自 Top-$k$,不是 ReLU 截断。
  • Top-$k$ 的 $k$ 与 GQA/MQA 的 KV 头数无关;V3.2 官方实现 $k{=}2048$

5. Indexer-Cache:存什么、为何不 offload

DSA 把 KV 拆成两类(DSA逻辑详解§4):

Indexer-CacheLatent-Cache
内容每条历史 token 的 indexer 轻量向量(打分用)MLA $c^{KV}$ [512] + $k^R$ [64]
占比(ESS 论文)~16.8%~83.2%
每步访问全长 $L$ 条(indexer 必须全扫) $I$ 内 $k$ 条
GPU 常驻ESS offload

Lightning Indexer 只读 Indexer-Cache,不升维、不读 512 维 latent,因此单步点积带宽远低于「对全长做 MLA」。


6. 与滑动窗口 / 稠密 MLA 的区别

滑动窗口稠密 MLA(V3.1-T)DSA + Lightning Indexer
可见历史固定局部全长学到的 $k$ 个位置
选择规则距离无(全 attend)indexer 分数 + top-$k$
能否非局部(内容相关)
典型 $k$ / 窗宽窗宽 $w$$L$$k{=}2048$

DSA 的 $k$ 个位置是 数据驱动、内容相关 的,不是固定局部窗口(Raschka 表 4-1)。


7. 训练:如何不损精度

V3.2-Exp 在 V3.1-Terminus 上 续训加入 DSA(非从零训练)。Indexer 需学会近似稠密 MLA 的「看谁」模式:

  • 论文叙述:用 KL 散度 等目标,让 indexer 选出的分布对齐稠密 attention 模式(详见 2512.02556 §DSA)。
  • 结果:公开 benchmark 与 V3.1-Terminus 基本持平,长上下文 算力显著下降V3.2 梗概)。

8. 推理与 infra

组件与 Lightning Indexer 的关系
DeepGEMMindexer logit / 点积 kernel(含 paged 版)
Indexer-Cache 常驻 GPU每 decode step 全长扫;不可像 Latent 那样 offload
Index Share跨层 复用 top-$k$ index,减 重复跑 indexer 算子
Prefill 瓶颈长上下文下 indexer 可占 Prefill ~81%(IndexCache 论文引 V3.2 场景)

Indexer 不做softmaxlatent 升维、读 $c^{KV}$offload


9. 上下游

方向文档
前置MLA · V3.1 Hybrid
同流水线Top-$k$ + Core MLA
下游 infraIndex Share · ESS
下游算法CSA/HCA 专文 §2 · V4 梗概(新一代压缩 + 稀疏)

10. 参考

  1. DeepSeek-AI. DeepSeek-V3.2: Pushing the Frontier of Open Large Language Models. arXiv:2512.02556, 2025.
  2. Sebastian Raschka. From DeepSeek V3 to V3.2§4 Sparse Attention · 要点速读
  3. 本地图:§2 walkthrough 图 · ess-dual-cache 图 · dsa-pipeline

Index Share梗概

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §4 · ← 基础设施线导读 · ← 版本目录 · 上游 DSA §异构 KV · 并列 ESS · 逻辑详解


定位

社区昵称 Index Share / 「V3.3」;正式名 IndexCache(清华 + Z.ai,2026-03)。不是新模型,而是面向 DSA 架构的 纯推理 infra 补丁:零额外显存,在 V3.2 / GLM-5 等模型上即插即用。

典型体现「infra 归 infra,算法归算法」——算法仍是 V3.2 的 DSA,系统侧利用跨层冗余砍掉冗余 indexer 计算。

逻辑详解Index Share逻辑详解 · 上游 DSA §异构 KV


基础设施线位置

方向文档
本节点(③ Index Share)基础设施线导读 §1
前置 ② 异构 cacheDSA稀疏注意力§异构 KV
并列 ④ ESSESS Latent offload(Latent offload,可同开)
下游 ⑤ V4CSA / HCA · DeepSeek-V4(V4 自带 CSA indexer,路线互补)

技术归属

结论摘要

#要点
1IndexCache / Index Share(跨层索引复用)不是 DeepSeek 原创,也不是百度百舸原创
2DSA 稀疏注意力(含 Lightning Indexer)为 DeepSeek 自研,是被优化的模型侧基底
3IndexCache清华大学计算机系 + 智谱 AI(Z.ai) 联合提出(arXiv:2603.12201
4百度百舸(Baige AI) 在 IndexCache 上主要是工程集成与云侧落地;其自研的同类 infra 是 ESS(Latent-Cache offload),与 IndexCache 正交

各方分工

机构角色代表工作
DeepSeek造出带 Lightning Indexer 的 DSA 模型被优化对象DSA、arXiv:2512.02556;每层独立 top-$k$,$O(L^2)$ indexer + $O(Lk)$ Core MLA
清华 + 智谱(Z.ai)提出 IndexCache / index-share 跨层索引复用(优化算法本体Full (F) 层算索引并 index-cache;Shared (S) 层 index-share 复用;FFFS 等模式
百度百舸ESS 原创 + IndexCache 训推引擎适配/部署落地方ESS arXiv:2512.10576(Latent-Cache offload);百舸云侧集成 IndexCache、KV 缓存、并行调度等

IndexCache 论文中的两个名词

(勿与 DSA 里的 Indexer-Cache 存储块混淆,见下节。)

论文术语含义
index-cacheF(Full)层算出 top-$k$ 后,把索引集合缓存起来
index-shareS(Shared)层不跑 indexer,直接复用最近 F 层的缓存索引

相邻层索引重叠可达约 70%–100%;典型 FFFS 下约 75% 层可跳过 indexer 计算。

DeepSeek 侧:DSA 为何需要这类补丁

  • DSA 每层独立 lightning indexer,长上下文 Prefill 时 indexer 可占主导耗时;
  • IndexCache 不改 DSA 结构,只在调度上减少「重复跑 indexer」的次数。

百舸侧:两套不同技术

技术归属优化对象
IndexCache清华 + 智谱 发明;百舸 集成部署DSA indexer 计算(跨层复用 top-$k$ 下标)
ESS百舸 原创(Chen et al., 2025)DSA Latent-Cache 显存(CPU offload + 热池)

易混淆:三类「Cache」

名称谁的概念是什么
Indexer-CacheDSA / ESS 文档GPU 常驻的 indexer 向量 KV(~16.8%),每步参与打分
Latent-CacheDSA / ESS 文档MLA latent KV(~83.2%),ESS 可 offload
index-cache(IndexCache 论文)清华 + 智谱F 层产出的 top-$k$ 下标缓存(计算复用,非 KV 存储块)
DeepSeek API 硬盘上下文缓存DeepSeek 业务请求级 前缀 KV 复用,与 IndexCache 无关

逻辑详解Index Share逻辑详解 §1


DSA 每层独立跑 lightning indexer,复杂度 $O(L^2)$。长上下文 prefill 时 indexer 成为显著瓶颈。观察:相邻层选出的 top-$k$ index 高度相似

机制

逻辑详解Index Share逻辑详解 · DSA 前置

层划分为两类:

类型行为
Full (F)保留 indexer,正常计算 top-$k$
Shared (S)不跑 indexer,复用最近 F 层的 cached indices

典型模式 FFFS 重复:每 4 层留 1 个 F 层,去掉 75% indexer 计算

部署模式:

  • Training-free:校准集上贪心选保留哪些层的 indexer
  • Training-aware:多层蒸馏,让 F 层 indexer 拟合覆盖层的平均 attention 分布

效果

指标加速
Prefill(TTFT)1.82×
Decode 吞吐1.48×
精度损失可忽略

推理 infra 关注点

  • 实现:SGLang / vLLM patch,核心为一个 if/else 分支
  • 零额外 GPU 显存
  • 仅适用于 DSA(DeepSeek-V3.2、GLM-5 等)
  • ESS Latent-Cache offload 正交,可叠加

与 V4 对比

属性Index ShareV4
权重不变全量重训
改动量极小架构级
上下文128K 系优化原生 1M
Ablation干净(纯 infra)多变量纠缠

参考

Index Share逻辑详解

← 中文导读 · ← 仓库首页(EN) · ← 系列目录 · ← 基础设施线导读 · DSA 梗概 · DSA 逻辑 · Index Share 梗概 · 演进总览 §3.6


1. 定位:不是新模型,是 DSA 上的纯 infra 补丁

社区昵称 Index Share / 「V3.3」;正式名 IndexCache(清华 + Z.ai,2026-03,arXiv:2603.12201)。

属性Index Share新模型(如 V4)
权重不变全量重训
显存零额外新 layout / 新算子
改动面推理调度(F/S 层 + index 缓存)架构级
前提必须有 DSA(lightning indexer + top-$k$)自带 CSA indexer 等

典型体现:infra 归 infra,算法归算法——算法仍是 V3.2 的 DSA,系统侧利用 跨层冗余 减少 indexer 计算。

1.1 技术归属

机构做什么不做什么
DeepSeekDSA + Lightning Indexer 模型结构(每层独立 top-$k$)不拥有 IndexCache / index-share 发明
清华 + 智谱(Z.ai)IndexCache 论文与开源(THUDM/IndexCache);F 层 index-cache、S 层 index-share不改动 DSA 权重
百度百舸ESS(Latent-Cache offload)原创;IndexCache 引擎集成与云部署非 IndexCache 算法发明方

一句话:DeepSeek 提供 被优化的 DSA 模型;清华 + 智谱 提供 跨层索引复用算法;百舸把 IndexCache 工程化落地,并与自研 ESS 等 infra 组合服务线上 DeepSeek 推理。

勿混淆

  • DSA 的 Indexer-Cache / Latent-Cache = 异构 KV 存储
  • IndexCache 的 index-cache = top-$k$ 下标的跨层复用缓存;
  • ESSLatent 搬移,Index Share 管 indexer 算子次数,二者正交。

梗概Index Share 梗概


2. 前置:DSA 里 indexer 为何成为瓶颈

DSA 逻辑 中,每层独立执行:

  1. Lightning Indexer:对全长 $L$ 打分($O(L^2)$ 量级,常数小);
  2. Top-$k$ 选择;
  3. 仅对 $k$ 个 latent 做 Core MLA Attention。

长上下文 Prefill 时,层数 $\times$ 全长 indexer 累加,indexer 可占显著时间;Decode 阶段每层每步也要跑 indexer。 Index Share 不碰第 3 步主 attention,只优化第 1–2 步的 重复劳动


3. 核心观察:相邻层 top-$k$ index 高度相似

IndexCache 论文与工程实现的出发点:

  • 不同 Transformer 层对「哪些历史 token 重要」的判断 高度相关
  • 若 layer $\ell$ 与 $\ell+1$ 的 top-$k$ index 集合 相近,则 $\ell+1$ 不必再跑一遍 indexer,直接 复用 $\ell$(或最近 Full 层)的 indices 即可进入 Core Attention。

这与 DSA 的 异构 Cache 分工一致:

  • Indexer-Cache 仍常驻 GPU(F 层要算 indexer);
  • 省掉的是 S 层上的 indexer 算子调用,不是取消 Indexer-Cache 存储。

4. 机制:Full 层与 Shared 层

每层标记为两种角色之一:

类型行为
Full (F)正常运行 Lightning Indexer,计算 top-$k$,写出 index 供后续 S 层复用
Shared (S)跳过 indexer;从缓存读取最近 F 层的 top-$k$ indices,直接进入 Core MLA Attention
flowchart TB
 subgraph L1["Layer 1 - F"]
 I1[indexer] --> K1[top-k indices]
 end
 subgraph L2["Layer 2 - F"]
 I2[indexer] --> K2[top-k indices]
 end
 subgraph L3["Layer 3 - F"]
 I3[indexer] --> K3[top-k indices]
 end
 subgraph L4["Layer 4 - S"]
 K3 --> Reuse[复用 L3 indices]
 Reuse --> A4[Core Attention]
 end
 K1 --> Share2[可被下层复用]
 K2 --> Share3[可被下层复用]

4.1 典型模式 FFFS

每 4 层中 3 个 F + 1 个 S,周期重复:

Layer: 1 2 3 4 5 6 7 8 ...
Role: F F F S F F F S ...
  • 去掉 75% 的 indexer 计算(每 4 层只算 3 次 indexer,而非 4 次);
  • S 层复用的是 紧前一个 F 层的 indices。
Index Share FFFS 跨层复用示意

图示详情

4.2 实现形态

  • 推理框架(SGLang / vLLM patch)中多为 分支:若当前层为 S,则 cached_indices = last_F_layer.indices,否则跑 indexer 并更新缓存。
  • 零额外 GPU 显存:复用已有 index 张量,不复制整套 KV。

5. 部署模式:Training-free vs Training-aware

模式做法适用
Training-free在校准集上 贪心搜索 哪些层保留 F、哪些设为 S,约束 LM loss 下降可忽略快速上线、零训练
Training-aware多层蒸馏:让保留的 F 层 indexer 拟合其「覆盖」的 S 层的平均 attention 分布更激进 S 比例、更长上下文

二者都不改 checkpoint 权重;差别在 F/S 划分与可选蒸馏校准


6. 效果与适用边界

200K context 量级:

指标加速
Prefill(TTFT)1.82×
Decode 吞吐1.48×
精度可忽略损失

适用

  • DSA 系模型:DeepSeek-V3.2GLM-5 等带 lightning indexer 的栈;
  • 不适用 无 DSA 的稠密 MLA/V3.1 路径。

正交叠加

补丁优化对象与 Index Share
ESSLatent-Cache CPU offload正交,可同时开
V4 HiSparseV4 异构 KV + 磁盘 prefix不同代际,非 V3.2 补丁;HiSparse · 磁盘 prefix
Engramn-gram 条件记忆查表正交,见 Engram 导读

7. 与 V4 的对比

维度Index ShareV4
权重不变重训
上下文目标优化现有 128K 系原生 1M
Ablation干净(纯 infra)多变量(CSA/HCA、mHC、Muon…)
indexer 来源复用 DSA 层间相似性CSA 自带压缩 indexer

社区将 Index Share 戏称为「V3.3」,指的是 收益大、改动小、无需重训,而非官方版本号。


8. 逻辑闭环:从 DSA 双 Cache 到 Index Share

  1. DSA 分裂 Indexer-Cache(GPU 常驻、每步参与打分)与 Latent-Cache(主 attention、可 ESS offload)。
  2. Indexer 每层独立 → Prefill/Decode 上 indexer 成为可优化热点。
  3. Index Share 利用 层间 index 相似,让 S 层跳过 indexer,只复用 F 层的 top-$k$ 选择结果
  4. 主 attention 仍走 DSA 稀疏 Core MLA;精度由 F 层密度与 F/S 划分保证。

返回 DSADSA逻辑详解§4 异构 KV Cache


9. 参考

ESS:Latent-Cache Offload

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §5.2 · ← 基础设施线导读 · ← DSA · 并列 Index Share · ESS 论文梗概 论文ESS arXiv:2512.10576An Offload-Centric Latent-Cache Management Architecture for DeepSeek-V3.2-Exp(Chen et al., 2025) 论文梗概ESS 论文梗概


一句话

ESS 是面向 V3.2 DSAKV offload 架构Indexer-Cache(~16.8%)常驻 GPULatent-Cache(~83.2%)卸载到 CPU DRAM,按 top-$k$ 稀疏访问 prefetch 热 entry 回 GPU。不改模型权重,依赖 DSA 把主 attention 限制在 $k{=}2048$ 个 latent 上。

归属:ESS 为 百度百舸(Baige AI) 提出(arXiv:2512.10576),优化 Latent-Cache 显存;与 清华 + 智谱Index Share / IndexCache(优化 indexer 计算正交,可同开。


为什么 V3.2 需要 ESS

问题说明
128K latent 线性涨即使用 MLA 压缩,全长 Latent-Cache 仍占 HBM 大头
V3 通用 offload 不好用同质 MLA latent 整条搬移,PCIe 小块传输带宽差
DSA 带来的机会Core MLA 每步只读 $k$ 个 latent entry → offload 粒度可变成 稀疏 entry,而非全长序列

DSA 先把 cache 拆成 Indexer + Latent 两类,ESS 专门管 Latent 那一侧的 CPU/GPU 分层


双 Cache 与 ESS 分工

MLA Decode 一步: Indexer 选 top-2048 位置 vs Latent-Cache 升维并做 Core MLA

图示详情 · 图源 Lightning Indexer · Decode 一步

读图要点(单层、第 $t$ 个 decode token)

组件存什么算什么不算什么
Indexer-Cache全长 $L$ 个 轻量 indexer 向量(~16.8%,GPU 常驻)对 $j{=}1..L$ 打分 → Top-2048 下标 $I$不读 $c_j^{KV}$、不做 MLA softmax
Latent-Cache每位置 $c_j^{KV}$ [512] + $k^R$(~83.2%,ESS 可 offload)仅 $j \in I$:prefetch → $W^{UK}/W^{UV}$ 升维 → Core MLA → $u_t$不对全长 $L$ 做稠密 attention

Indexer 回答「看哪 2048 个位置」;Latent-Cache 回答「这些位置的 MLA K/V 是多少、怎么加权」。详见 MLA 前向流程图

Cache占比ESS 策略原因
Indexer-Cache~16.8%GPU 常驻,不 offload每 decode step 要对全长跑 indexer
Latent-Cache~83.2%CPU offload + GPU LRU 热池主 attention 只 touch top-$k$;相邻 step index 重叠率高

DSA 异构 cache 同时支撑 ESS(搬 latent)Index Share(省 indexer 计算)


ESS 核心机制

组件作用
Latent-Cache → CPU冷 latent entry 放主机 DRAM,释放 GPU HBM
Sparse Memory Pool(GPU)LRU 维护 latent 子集;miss 时从 CPU prefetch
FlashTrans + UVA优化大量 656B 级小块 PCIe 传输 由 ~0.8 GB/s 提升至 ~37 GB/s)
Layer-wise overlap计算与传输 流水线,掩盖 prefetch 延迟

局部性依据:DSA 每步选出的 top-$k$ index 集合在相邻 decode step 间 高度相似 → 多数需要的 latent 已在 GPU 热池,少量 miss 再拉取。


与 Index Share / V4 的关系

ESSIndex ShareV4 HiSparse
改权重是(新模型)
省什么Latent 显存(offload)Indexer 算力(跨层复用 index)异构压缩 cache + inactive entry offload
适用V3.2 DSAV3.2 / GLM-5 DSAV4 CSA/HCA
叠加与 Index Share 正交可同开与 ESS 正交 V3.2 ESS 的简单放大

V4 的 KV-offload 围绕 CSA/HCA/SWA 异构 layout 重做,不是把 ESS 直接扩到 1M · DeepSeek-V4


论文收益

详见 论文梗概 §Table 2

上下文吞吐提升
32K+69.4%(MTP=2,batch 52→160,Ratio 1.0→0.21)
128K最高 +123%(MTP=2,batch 13→54,Ratio 1.0→0.1)

基础设施线位置

方向文档
本节点(④ ESS offload)基础设施线导读 §1
前置 ② 异构 cacheDSA稀疏注意力§异构 KV
并列 ③ Index ShareIndex Share 梗概(indexer 算力,可同开)
下游 ⑤ V4 infraDeepSeek-V4 梗概§推理 infra · KV layout · HiSparse · 磁盘 prefix ESS 简单放大)

在版本线中的位置

KV-offload 演进:V3 同质 MLA → V3.2 双 Cache → ESS / Index Share → V4

图示详情

前置DSA(必须先有双 cache 结构) 并列Index Share


延伸

资源说明
ESS 论文梗概论文梗概:Fig.1–9、Table 1–2 逐图逐表解读
DSA逻辑详解 §4异构 Cache 设计含义
Index Share逻辑详解与 ESS 正交性
DeepSeek-V3.2V3.2 梗概
演进总览 §5.4V3 / V3.2 ESS / V4 三代 offload 对比

论文arXiv:2512.10576

ESS 论文梗概

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §5.2 · ← ESS 概念页 · ← 基础设施线导读 · DSA 全文arXiv:2512.10576 · Chen et al., 2025(百度 Baige AI) 对象模型:DeepSeek-V3.2-Exp · 框架:SGLang · 场景:PD 分离 Decode 阶段


一句话

论文提出 ESSExtended Sparse Server):在 不改模型精度 的前提下,把 Latent-Cache(~83.2%) offload 到 CPU,GPU 上只留 Sparse Memory Pool(LRU 热子集) + 常驻 Indexer-Cache(~16.8%);靠 FlashTrans/UVA 解决 656B 小块 PCIe 传输、LRU-Warmup 降早期 miss、Layer-wise DA/DBA Overlap 掩盖 prefetch 延迟,仿真上 32K 吞吐 +69.4%128K 最高 +123%


论文要解决什么

矛盾说明
DSA 降了算力稀疏 attention 减轻计算,但 Decode 仍是 PD 架构瓶颈
Latent-Cache 线性涨序列越长 cache 越大 → batch size 被 GPU HBM 卡死
小块 PCIe 传输每步 top-2048 个 656B entry 分散 → 原生 cudaMemcpyAsync H2D~0.79 GB/s

核心观察:top-$K$ latent 的 index 在 相邻 decode step 高度相似(层内相似度 $r_t^l$ 高,见 Fig.2)→ offload 可行,前提是 高命中率 + 高有效带宽 + 计算通信重叠

图/表优先 手动截图 放入 screenshots/,运行 python3 scripts/figures/ess/install_screenshot.py --inbox;未手动的图仍可用 python3 scripts/figures/ess/extract_paper_figures.py 从 PDF 裁剪。


系统划分

答疑H2D / D2H 与 PD 时序中的 prefetch、写回

Cache占比ESS 策略
Indexer-Cache~16.8%不 offload;每步全长算 indexer
Latent-Cache~83.2%CPU Total Memory Pool 存全量;GPU Sparse Memory Pool 存热子集
Figure 3. Latent-Cache Offload-Prefetch Timing in the PD disaggregation Setting

Figure 3. Latent-Cache Offload-Prefetch Timing in the PD disaggregation Setting.

直接打开


关键图解读

Figure 1 — 吞吐 vs Batch Size

要点内容
设置32K context,配置见 Table 1
现象理论上调 batch 应持续提吞吐,但 GPU 显存先满
数据batch 最多 52,吞吐封顶 ~9,648 tokens/s
结论显存是 Decode 扩容天花板 → 必须 offload Latent-Cache 才能继续加大 batch
Figure 1. Relationship Between Throughput and Batch Size

直接打开

Figure 2 — 层内访问相似度

要点内容
指标Intra-Layer Similarity $r_t^l = |K_{t-1}^l \cap K_t^l| / |K_t^l|$
含义同一层、相邻 decode step 的 top-$K$ index 集合 重叠比例
数据LongBench V2 上 相似度持续偏高
结论Latent-Cache 访问有 强时间局部性 → CPU 扩展 HBM 有意义
Figure 2. Intra-Layer Similarity Across Different Context Lengths

Figure 2. Intra-Layer Similarity Across Different Context Lengths.

直接打开

Figure 3 — PD 架构下 Offload/Prefetch 时序

系统划分(Fig.3)(仅保留原图与图注,不重复解读)。

Figure 4 — LRU-Warmup 对早期 Cache Miss 的影响

Figure 4. Effect of LRU-Warmup on Early Decode Cache Miss Count

直接打开

对比现象
Warmup 前Decode 开头 大量 Cache Miss,很快衰减
Warmup 后早期 miss 显著下降
做法取 Prefill 最后 32 个窗口 的 top-2K index,预热 GPU LRU 池
设置MTP=1,Sparse Memory Ratio=0.2

Figure 5 — 层内 Cache Miss 分析

Figure 5. Intra-Layer Cache Miss Analysis

直接打开

要点内容
横轴Layer ID
纵轴每 batch 平均 Latent-Cache miss 数
变量不同 Sparse Memory Ratio(GPU 侧占全 cache 比例)
结论不同层 miss 差异极大(Ratio=0.2 时约 16.66~605)→ 需要 按层选 Overlap 策略(见 Fig.7、§3.3)

Figure 6 & 7 — Overlap 策略对比

答疑H2D / D2H 是什么?

Figure 6. Comparison of Overlap Strategies

Fig.6 直接打开

Figure 7. Overhead Comparison of Overlap Strategies

Fig.7 直接打开

无 Overlap(SGLang 默认)

  • H2D 必须等 Indexer 完成;Attention 必须等 H2D 完成 → 全串行,GPU 空等。

DA Overlap(Dual-Attention)

  • forward_prepare:PreAttn 延后;SparseMLA 拆 Attn0(用 GPU 已有 latent)与 Attn1(等 prefetch)→ Attn0 ∥ H2D

DBA Overlap(DualBatch-Attention)

  • 在 DA 基础上 按 batch 维切 Indexer(含 paged_mqa_logits + Top-K)→ 长上下文下仍有足够计算量掩盖传输。
  • Fig.7 时间线:对比 DA vs DBA 的实际重叠程度。

Layer-Wise 选择规则

Miss 水平 / 上下文更优策略
Miss 较低DA(无 Indexer 切分开销)
Miss (如达 512)、长上下文DBA(Indexer 计算随 $L$ 线性增,更能藏传输)

Figure 8 — 不同上下文长度下的 Cache Miss

Figure 8. Cache Miss Count Comparison Across Different Context Lengths

直接打开

  • MTP=2,Ratio=0.2。
  • 层维 miss 分布形态跨长度一致 → 可 离线 profiling 标出「高 miss 层」。
  • 用于 Layer-Wise Overlap 的 静态分层配置

Figure 9 — 可扩展性

Figure 9. Cache Miss Behavior Across Different Context Lengths

直接打开

发现含义
Ratio ≥ 0.2 时,平均 miss 随长度 相对稳定长上下文下 offload 行为可预测
32K + 小 Ratio miss 最严重GPU 热池太小 → 频繁换入换出
同 Ratio 下,更长 context → 更低平均 missESS 在 128K 等超长场景收益更大(与 Table 2 的 +123% 一致)
建议GPU buffer 不小于 6.4K entry

关键表解读

Table 1 — 仿真基线配置

Table 1. Basic Setting

直接打开

读表注意
ModelDeepSeek-V3.2-Exp与 DSA 稀疏 attention 配套
Context32K(主实验)128K 另有一组
Node / EP4 node,EP=32大规模 MoE 部署
MTP2(主);Table 2 含 4与 speculative 接受率联动
MTP-Accept-Ratio1.7影响有效 OTPS
Attention-EngineFlashMLA与 DeepSeek 推理栈一致
Two-Batch Overlapopen系统级重叠优化已开
PCIe5th genFlashTrans 带宽前提

此表是 Fig.1、Table 2 默认行 的复现环境;改 MTP / 接受率 / 长度时只动 Table 2 中的变量。

Table 2 — 吞吐与 OTPS

Table 2. Throughput and OTPS Under Different MTP and Acceptance Settings

直接打开

括号内为 Sparse Memory Ratio(GPU 热池占全 Latent-Cache 比例);Ratio 越小 → GPU 显存越省 → batch 可越大。

MTP=2,Context=32K,Accept=1.7

BatchThroughput (tokens/s)OTPS相对基线 batch=52
52 (1.0)9,647.7123.19基线(全 GPU cache)
64 (0.82)10,693.3120.89
96 (0.48)13,155.9817.13
128 (0.31)15,620.1415.25
160 (0.21)16,347.8812.77+69.4% 吞吐

MTP=4,Context=32K — 接受率越高,绝对吞吐越高;ESS 仍随 Ratio 下降而扩容 batch。

MTP=2,Context=128K,Accept=1.7

BatchThroughputRatio备注
13 (1.0)3,669.19基线极短 batch 上限
40 (0.2)6,925.06
54 (0.1)8,169.60+123% 吞吐

读表要点

  1. Throughput ↑ 往往伴随 OTPS ↓:batch 变大、单 token 延迟结构变化;论文优化目标是 服务吞吐 / 成本,非单请求延迟。
  2. Ratio 从 1.0 → 0.1:用 CPU 换 GPU 显存,batch 可扩 3× 以上
  3. 128K 行说明:越长上下文,ESS 相对收益越大

三大工程模块

PD 分离下每步流程(对应 Fig.3):Prefill 结束 → Indexer 选 top-$K$ → prefetch 缺失 latent(H2D)→ Core MLA → 新 latent 写回 CPU(D2H)。Indexer 路径不搬;仅 Latent 在 CPU↔GPU 间流动。

模块问题方案关键数字
FlashTrans + UVA656B 碎片块,Memcpy 带宽差GPU 直接访 pinned CPU 地址H2D 0.79→37 GB/s;D2H 0.23→43 GB/s
LRU + Warmup早期 / 层间 miss 高Prefill 末 32 窗预热;LRU 保留高复用 entryFig.4、Fig.5
DA / DBA / Layer-wise传输无法被计算掩盖Attn0∥H2D;按层选 DA 或 DBAFig.6–7

与静态/动态 KV 压缩、相关工作的边界

类型代表与 ESS 区别
静态压缩H2O、SnapKV、StreamingLLM永久删 KV;有损风险
动态选择Quest、MagicPig、RetrievalAttention每步只算子集,但 ESS 针对 V3.2-Exp 双 cache + 656B latent
Offload-PrefetchFlexGen、SparseServeESS = DSA + MLA latent + PD + SGLang 的专用流水线

结论与局限

  • 已验证:仿真中高保真;无损精度(只搬存储,不改 attention 数学)。
  • 未做:论文写明 尚未并入生产框架;未来或与 SnapKV 等 有损压缩 组合。
  • 本地对照ESS Latent offload 概念页 · DSA 稀疏注意力 算法前置 · Index Share 正交 infra 补丁。

图表索引速查

图/表一句话
Fig.132K 下显存卡 batch=52 → offload 必要
Fig.2top-$K$ index 逐步相似 → 局部性成立
Fig.3PD 下 H2D/D2H 时序(仅图)
Fig.4LRU-Warmup 降早期 miss
Fig.5各层 miss 不均 → 分层 overlap
Fig.6–7DA / DBA 时间线对比
Fig.8–9跨长度 miss 形态与可扩展性
Table 1仿真环境
Table 2+69.4% / +123% 主结果

论文 PDFarXiv:2512.10576

投机解码自测加速比

全文已并入唯一入口投机解码与 DSpark(DeepSeek 推理加速) §3 外挂 draft 自测§2 MTP§4 范式总览← V3 MTP · ← 演进总览 §3.3

本文件仅保留 重定向,避免与 投机解码与 DSpark 内容重复维护。

投机解码与 DSpark

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §2 时间线 · §3.3 V3 MTP · §3.7 V4 + DSpark · §6 推理栈 · V3 梗概 · V4 梗概 DSpark 开源DeepSpec · DSpark_paper.pdf · DeepSeek-V4-Pro-DSpark 外部材料版本演进总览 · V3 论文 MTP 原文摘录

本文档聚合 DeepSeek 系列 投机解码(speculative decoding)DSpark 全部材料:通用循环、V3/V4 MTP、外挂 draft 自测、生产 MTP-1 基线、DSpark 机制与线上数据。演进总览 / V3 / V4 / 基础设施线 只保留链接,细节以本文为准


1. 投机解码:为何能加速推理

场景:单流(batch=1)、自回归 decode。下文以 gpt2-small draft + gpt2-xl target 为例说明通用机制;DeepSeek 路线见 §2,自测数据见 §3。

1.1 瓶颈:每 token 搬一遍大模型权重

自回归生成严格串行:第 $N$ 个 token 必须等第 $N{-}1$ 个算完。每步都要把 target 全部权重从 HBM 搬进 SM(计算单元)名词:SM;大矩阵 × 单向量,GEMV 算术强度极低)。

在 batch=1 decode 下,时间主要花在搬权重而非 FLOPS。因此:

  • target 生成 1 个 token;
  • target 一次并行验证 $k$ 个候选 token;

在带宽瓶颈下耗时 几乎相同(同样搬一遍权重,多算几位几乎不增时延)。

突破口:把「$k$ 次搬大模型权重」压成「1 次」,用便宜的 draft 换少跑几次 target。

答疑Compute-Bound vs Memory-Bound — DFlash / Eagle 如何对应? — §1.1 的 Memory-Bound 串行读;§4 Eagle(draft 串行、$\tau_q \propto K$)vs DFlash(draft 并行、一次 HBM 流)。

1.2 一轮怎么走:draft → verify → accept

出 4 个 token 时($k{=}4$)
传统xl $\to t_1 \to$ xl $\to t_2 \to$ xl $\to t_3 \to$ xl $\to t_4$ → 4 次 target 前向
投机small 猜 $t_1 t_2 t_3 t_4$ → xl 并行验证 1 次 → 接受最长前缀(最多 4 个)

① Draft(便宜)猜 $k$ 个 token

  • 例:gpt2-small 权重约为 gpt2-xl 的 $\sim 1/12$,搬一次快得多。
  • 小模型自回归猜出 $k$ 个候选,总代价远低于 xl 跑一步。
  • 生产里 draft 也可来自 MTP 头、DSpark 草稿模块等(§2、§5),循环相同。

② Target(贵,但每轮只一次)并行验证这 $k$ 个

  • 把 $k$ 个候选拼成长度 $k$ 的序列,一次前向喂给 xl。
  • Attention 并行处理多个位置 → 1 次前向同时得到这 $k$ 个位置的概率分布
  • 耗时 $\approx$ 原来生成 1 个 token(同样只搬一遍 xl 权重)。

③ Accept / reject(保证 lossless)

用 xl 的真实分布逐位校验 draft(Leviathan et al. / Xia et al. 的 rejection sampling):猜中的连续前缀直接采纳;第一个猜错处用 xl 分布重采 1 个,其后丢弃,进入下一轮。单步「提议 → 校验」的概率含义见 §1.3。

端到端加速取决于

杠杆含义
每轮接受长度平均每次 target 前向收下几个 token(头号因素)
draft 成本猜 $k$ 个要花多少小模型前向;过大或命中率太低会吃掉收益
验证占用(高并发)target 算力是否花在「高存活概率」前缀上(DSpark §6)

1.3 净收益、lossless 与最坏情况

设单次 target 前向耗时 $\approx T$(与 $k$ 弱相关):

传统($k$ 步)投机($k$ 候选,全接受)
target 前向$k$ 次1
产出 token$k$$k$
单次 target 耗时$T$$\approx T$
  • 猜得准:1 次 target 吐出多个 token → 理论 $\approx k\times$,实际约 2–3×(§3 Qwen 自测 2.4–2.9×),需扣除 draft 开销。

lossless:rejection sampling 保证与「逐 token 采样 target」同分布;draft 只改 $q$ 与接受有多快,不改输出分布。

答疑接受路径、拒绝路径与 lossless 证明 — 单步 $X \sim q$、$U \le \alpha(X)$ 校验;$E_{\mathrm{acc}}(x)$ 上 $P=q\alpha$;$\alpha=\min(1,p/q)$ 与 $p_{\mathrm{resample}}\propto\max(0,p-q)$ 合并得 $\pi(x)=p(x)$。

  • 全猜错:target 仍 1 次前向,保底 1 个正确 token(与逐 token 相同);额外多花 $k$ 次 draft 小前向 → 最坏 $\approx$ 原速 $\times (1 + \text{小常数})$,略慢但不翻车。

1.4 PoC 参照

  • gpt2-small(124M)+ gpt2-xl(1.5B):同 GPT-2 BPE、同词表,draft 权重约 target 的 $1/12$,无需训练即可验证约 延迟收益;机理见 §1.1–§1.2。
  • Qwen3-4B + 0.6B draft:本仓库 vLLM 自测见 §3。

2. DeepSeek 路线:MTP

V3 技术报告 引入 Multi-Token Prediction(MTP):在 主 next-token 目标 之外,用 $D$ 个串联 MTP 模块 预测 $t{+}2, t{+}3, \ldots$ 额外 token。训练时共享 Embedding / Output Head;每层 MTP 通过 Integration Layer上一层 hidden中间 token 的 Emb 融合后再过 1 个 Transformer Block。

中间 token 融合读图MTP 融合 scheme · MTP 融合 scheme 图

训练目标

$$ \mathcal{L} = \mathcal{L}{\mathrm{main}} + \lambda \sum{k=1}^{D} \mathcal{L}_{\mathrm{MTP}}^{(k)} $$

  • 主目标:提升主模型性能、数据效率。
  • 推理:可 丢弃 MTP 模块、主模型独立 decode;也可 复用 MTP 模块做 speculative decoding 进一步降延迟。

V4 保留 MTP 模块与训练目标(与 V3 同族实现)。

V3 MTP 训练结构;MTP 原生投机 vs 外挂 draft vs DSpark 对照

图示详情 · V3 §三 MTP

2.1 MTP 原生 vs 外挂 draft

维度MTP 原生(V3/V4)外挂 draft 小模型
Draft 来源同 checkpoint 的 MTP 辅助头独立小模型(如 0.6B)
额外显存无第二套权重需同时加载 target + draft
接受率MTP 与主模型 联合训练 对齐依赖 draft 与 target 分布匹配
训练目标$\mathcal{L}{\mathrm{main}} + \lambda \mathcal{L}{\mathrm{MTP}}$draft 常单独 SFT / 蒸馏

推理侧循环相同;差异只在 draft 从哪来

答疑酱紫君解读:MTP 一次前向与中间 token 融合 · 融合 scheme 专文

2.2 生产基线 MTP-1

V4 Flash / Pro 预览引擎在 DSpark 上线前,生产环境采用 MTP-1:基于 MTP 的 单 token 推测解码基线(每轮 propose/verify 粒度为 1)。DSpark 相对 MTP-1 报告线上增益(§8),不是相对「无投机纯自回归」。


3. 外挂 draft 自测

性质:本仓库 2026-06 自测(vLLM 0.8.5,1000 条样本,单卡 L20)。 DeepSeek MTP 官方数据, DSpark。

基线Qwen3-4B-Instruct nospec
投机4B target + 0.6B draft
基线 RT459 ms / 条
方法mean RT加速比
4B nospec(基线)459 ms1.00×
vLLM ngram / PLD(无 draft)369 ms1.99×
Prefix cache + nospec454 ms1.61×
Draft 投机(4B + 0.6B)303 ms2.41×
Prefix cache + draft298 ms2.46×
Draft + target FP8256 ms2.86×
Draft + target INT8 离线272 ms2.69×
手写 vanilla draft PoC1432 ms0.51×

读法

  • 接受率与引擎成熟时,speculative decoding 相对单路 decode 可达 约 2.4–2.9× 延迟收益 → 可作为 MTP 原生投机 的工程量级参照,不替代官方 MTP 吞吐数据。
  • draft 质量差时(PoC 0.51×),同属 speculative decoding 也会 慢于基线;MTP 的价值之一是把 draft 与主模型 绑在同一训练目标

接受率参照ESS 论文梗概MTP-Accept-Ratio(如 1.7)描述 MTP 投机链路上 每轮平均接受长度 的量级,可与下文各草稿范式的块长、接受率对照阅读。

4. 草稿范式总览

每轮投机:草稿模型 $M_q$ 一次提出 $K$ 个候选,目标模型 $M_p$ 用时间 $\tau_p$ 做 1 次验证;草稿侧总耗时约为 $K \times \tau_q$($\tau_q$ 为与块长相关的单步 draft 代价,自回归路线下 $\tau_q$ 随 $K$ 线性累积)。设本轮 平均接受长度为 $\mathbb{E}[N_{\mathrm{acc}}]$($0 \le \mathbb{E}[N_{\mathrm{acc}}] \le K$),相对「每 token 各跑 1 次 $\tau_p$」的粗算加速比为:

$$ S_{\uparrow} = \frac{\bigl(\mathbb{E}[N_{\mathrm{acc}}] + 1\bigr),\tau_p}{K,\tau_q + \tau_p} $$

设计目标:要把 $S_{\uparrow}$ 做大,需 同时抬高 $\mathbb{E}[N_{\mathrm{acc}}]$(draft 猜得准、接受得长)并 压低 $K\tau_q$(draft 生成别太慢)。两项目标往往拉扯——下文各范式正是在这对矛盾上的不同取舍。

DSpark(及同期工业界的半自回归路线)成熟之前,外挂草稿 $M_q$ 长期分两派:Eagle 系(最新 Eagle3,自回归、高接受率)与 DFlash 系(并行整块、低 draft 延迟)。DeepSeek 另备 MTP 原生头(§2);DSpark 则在两派之间取 半自回归折中。

自回归 vs 半自回归自回归(Eagle3)按 token 串行猜 draft,$\mathbb{E}[N_{\mathrm{acc}}]$ 高但 $K\tau_q$ 随块长 线性涨半自回归(DSpark)先 并行出整块(压低 $\tau_q$ 侧),再用轻量 顺序头逐位补依赖(抬 $\mathbb{E}[N_{\mathrm{acc}}]$ 后缀)——并行拿速度,顺序补准确率。

路径代表Draft 生成对 $S_{\uparrow}$ 的侧重
MTP 原生V3/V4 MTP 头同模型辅助头,可 MTP-1 单步$\mathbb{E}[N_{\mathrm{acc}}]$ 与 target 对齐;无第二套 $M_q$
自回归外挂Eagle3逐 token 串行抬 $\mathbb{E}[N_{\mathrm{acc}}]$;$K\tau_q$ 大
并行外挂DFlash一次前向整块压 $K\tau_q$;后缀 $\mathbb{E}[N_{\mathrm{acc}}]$ 易掉
半自回归外挂DSpark并行主干 + 顺序头两者折中;V4 线上相对 MTP-1
独立小模型Qwen 0.6B draft另一套权重§3 自测量级参照
范式优势瓶颈
Eagle3块内依赖强、接受率稳draft 延迟 $\propto K$(Memory-Bound 串行,见 答疑
DFlashdraft 延迟几乎与 $K$ 弱相关(Compute-Bound 并行,见 答疑第 2 位起 $\mathbb{E}[N_{\mathrm{acc}}]$ 骤降
DSpark一次并行出整块 + 后缀顺序补依赖并行主干仍须生成完整 $K$ 块(§9)

5. DSpark 概述

DSpark:面向 V4-Flash / V4-Pro 预览引擎 高并发 decode。用 半自回归草稿 + 置信度调度验证,相对生产基线 MTP-1,在 同等吞吐量 下单用户生成速度 +57%–85%(报道区间 60%–85%)。论文、训练代码、检查点:DeepSpec

DSpark:半自回归 draft + 置信度调度验证;与 Eagle3、DFlash、MTP-1 对照

图示详情


6. DSpark 机制

6.1 半自回归候选生成

阶段做什么
并行主干(DFlash 改进)一次前向 → 整块 hidden + 基础 logits
轻量顺序模块逐 token 注入前缀依赖:马尔可夫头(仅 $t{-}1$)或 RNN 头(完整前缀状态)

2 层 Transformer 深度的 DSpark 在测试领域 平均每轮接受长度 超过 5 层 DFlash

位置DFlashEagle3DSpark
第 1 位高(深并行网)受浅网限制第 1 位 接近深并行网
第 2 位起快速衰减稳定/上升顺序模块 缓解衰减

为何 draft 上能「堆叠多层」来抬接受率

投机解码的瓶颈在 块内逐位条件分布 是否与 target 对齐:第 $i$ 位 token 能否被接受,取决于 draft 提议分布 $q_i(\cdot)$ 能否逼近 target 在 同一条前缀 下的 $p_i(\cdot)=p(\cdot\mid\text{context}, x_{<i})$(校验时由 target 整段前向 得到,是 ground truth)。对齐的对象是分布 $q_i \approx p_i$,不是单说 hidden 相等。

外挂 draft(Eagle / DFlash / DSpark)的常见做法是:target 先给出(或缓存)某层 hidden $h$,再由投机模块 $f_{\mathrm{spec}}$ 叠若干层,必要时注入块内已猜 $x_{<i}$,输出 draft logits $\ell_i=f_{\mathrm{spec}}(h, x_{<i})$ → $q_i=\mathrm{softmax}(\ell_i)$。多一层 Transformer(或等价模块)就多一轮 $h \to \ell$ 的非线性修正,让 $q_i$ 更贴近校验时的 $p_i$,单点接受概率 $\uparrow$ → 前缀连乘后存活更长 → §4 的 $\mathbb{E}[N_{\mathrm{acc}}]$ $\uparrow$。

易混MTP 原生 draft 不走「外挂 $f_{\mathrm{spec}}$」,而在 同一 checkpoint 内用 MTP 块接主模型 hidden 链出 logits(§2)。独立小模型 draft 甚至不读 target hidden,靠蒸馏/SFT 让整网 $q$ 逼近 $p$(§3)。

关键不在「层数越多越好」,而在 堆的是什么依赖

堆法补齐的依赖对 $\mathbb{E}[N_{\mathrm{acc}}]$ 的典型效果
加深并行 Transformer(DFlash)各位 共享 target 前缀,互不见 块内已猜 $x_{<i}$第 1 位随深度变强;第 2 位起缺 块内因果 → 接受率 快速衰减;加到 5 层也难救后缀
串行再算(Eagle3)每步 draft 显式看见 上一位已猜 token后缀稳定/上升;代价是 $K\tau_q$ 随块长 线性涨(§4)
并行主干 + 顺序模块(DSpark)单轮 draft 一次前向并行猜 $K$ 位(尤其保第 1 位);马尔可夫/RNN 头 逐位注入 $x_{i-1}$2 层 总深度即可超过 5 层 纯并行 DFlash(上表实证句)
DSpark 半自回归候选生成:并行主干一次猜 K 位,顺序头逐位补因果,q 对齐 target 校验 p

图示详情

因此 DSpark 的「堆叠」是 两阶段叠在同一轮 draft:先用并行主干 一次前向出整块 $K$ 位(低 $\tau_q$、第 1 位接近 DFlash),再用极轻的顺序头做 因果方向的层叠(等价于在后缀位上补 Eagle 式依赖,而不付满额 $K$ 次串行大前向)。V3 MTP 因果链(Main → MTP-1 → MTP-2)则是 target 权重内的另一种「按步数堆模块」:每多一块 MTP 模块,多预测更远 $t{+}k$,推理可作原生 draft(§2)。

答疑酱紫君解读:并行主干 vs 顺序头为何 $\tau_q$ 主次分明

文献与对照DSpark_paper.pdf(Semi-Autoregressive Draft;深度 vs 接受长度消融)· §2 MTP 因果链 · MTP 投机解码总览图 · 加速比读法 §4 · 酱紫君解读:半自回归 draft

6.2 置信度调度验证

  1. 每候选位置输出 置信度(此前缀全接受条件下该 token 存活概率);
  2. 验证集 温度缩放 校准置信度 $\approx$ 经验接受率;
  3. 硬件感知前缀调度器:结合并发请求置信度 + 实测吞吐量曲线,为每请求动态选验证长度,最大化全局吞吐

负载自适应:低并发验证 4–6 token;高并发 平滑缩短,避免争用。

答疑酱紫君解读:验证截断对效率与准确率的影响

DSpark 置信度调度验证:逐位置信度、温度缩放校准、硬件感知前缀调度与负载自适应

图示详情


7. DSpark 离线基准

Target:Qwen3(4B/8B/14B)、Gemma4-12B · 对比:Eagle3、DFlash 任务:数学 / 代码 / 对话(GSM8K、MATH500、AIME25、MBPP、HumanEval、LiveCodeBench、MT-Bench 等)

指标结果
平均每轮接受长度DSpark 全面优于 两基线
Qwen3-4Bvs Eagle3 +30.9%,vs DFlash +16.3%

8. V4 生产部署

配置
绑定模型V4-Flash / V4-Pro 预览引擎
并行主干3 MoE 层 + 滑动窗口注意力
最大候选块5(DSpark-5)
顺序模块马尔可夫头
对比基线MTP-1

9. 训练与在线引擎

范畴DSpark 线上推理(§8、§10)不改 V4 基座权重,是纯 decode 加速栈。**本节「训练」DeepSpec外挂 draft 模块(DSpark / DFlash / Eagle3)的 训练与蒸馏管线「在线引擎」**指该 draft 接入 V4 预览引擎后的调度与 kernel 集成。二者都不是 V3/V4 主模型预训练

答疑酱紫君解读:draft 训练 vs 主模型 fine-tune

9.1 训练优化

优化说明
隐状态通信只传 target hidden state,不传词表 logits:$O(V) \to O(d)$
锚点定长打包多预测块压成密集 batch,减 padding 浪费

9.2 引擎集成

约束对策
CUDA Graph 需提前定 batch 大小异步调度:截断长度用 两轮前 历史置信度预测
动态变长验证 → kernel padding 浪费token 展平 + 稀疏 attention 标记张量 传依赖;改索引 attention / 压缩 kernel

10. 在线生产实测

真实用户流量(2026-06 报道口径):

V4-Flash

SLA(单用户 $\ge$ … token/s)聚合吞吐量 vs MTP-1
80+51%
120(MTP-1 近边界)+661%

V4-Pro

SLA聚合吞吐量
35 token/s+52%
50 token/s+406%

同等吞吐量下单用户速度 +57%–85%


11. 局限与边界

局限:调度器截断后缀后,并行主干仍生成完整候选块;低接受率复杂查询的草稿算力 不可回收

说明
不是新基座V4 同 checkpoint;DeepSeek-V4-*-DSpark = target + 投机模块
不是 KV / offloadESSIndex Share 正交
不是 V3 MTP 论文本身MTP 是训练结构;DSpark 是 V4 线上 独立 draft/verify 栈,基线 MTP-1

12. 开源与外部材料

DeepSpec

内容说明
DSparkconfig/dspark/、评测、检查点
DFlash / Eagle3对照草稿训练评测
推理inference/ 最小 demo
论文DSpark_paper.pdf
HFDeepSeek-V4-Pro-DSpark

第三方解读

材料说明
酱紫君(GalAster):DSpark 与投机解码投机背景、半自回归 draft、验证截断、MTP 融合、draft 训练 vs fine-tune;知乎原文
批量验证机制笔记目标模型单次前向并行验 K 个 draft token

13. 在全景中的位置

层级投机解码 / DSpark
模型结构MTP 属 架构-train
Decode infraDSpark、MTP 投机调度 → 100% 架构-infer
KV / 长上下文否 → 基础设施线

14. 参考

  1. DeepSeek-AI & Peking University. DSparkDeepSpec
  2. DeepSeek-AI. DeepSeek-V3 Technical Report. arXiv:2412.19437 — MTP 训练与推理复用
  3. DeepSeek-AI. DeepSeek-V4. arXiv:2606.19348
  4. Leviathan, Y., Kalman, M., & Matias, Y. Fast inference from transformers via speculative decoding. 2022.
  5. IT之家. DeepSeek 联合北大发布 DSpark. 2026-06-27

V4 KV Layout:Classical + State 双池

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §5.3 KV layout · ← 基础设施线导读 · CSA/HCA 算法专文 · V4 梗概 §推理 infra · 并列 HiSparse · 并列 磁盘 Prefix Cache · 上游 ESS 论文arXiv:2606.19348 §3.5.1 — DeepSeek-V4 演进总览 §5.3 只保留梗概;layout 细节以本文为准


一句话

V4 推理引擎不再用「每层每 token 一条同质 latent」,而是把 CSA/HCA 压缩 entry 放进按 $\mathrm{lcm}(m,m')$ 对齐的 Classical KV cache,把 SWASliding Window Attention,滑动窗口注意力)+ 未凑满压缩块的 tail buffer 放进每请求固定大小的 State cache——两类池子尺寸、生命周期、读写模式不同,是后续 HiSparse offload 与磁盘 prefix 的内存布局前提

答疑SWA(Sliding Window Attention) — 最近约 128 token 的精确未压缩 K/V,与 CSA/HCA 分池,eviction 与 prefix 策略独立


为什么 V3/V3.2 的单一 layout 不够

代际Cache 形态问题
V3 / V3.1同质 MLA latent,每层每 token 同 shape1M token 下 HBM 与带宽双瓶颈
V3.2 ESSIndexer-Cache + Latent-Cache 两类,但仍是 每 token 一条ESS 只 offload Latent;layout 仍是 DSA 的 per-token 流
V4CSA 4:1、HCA 128:1、SWA、Indexer、tail 五类对象压缩比 $m{=}4$、$m'{=}128$ 不同 → 块对齐、尾缓冲、SWA 窗口必须 分池管理(见下)

答疑为何要分池?块对齐与尾缓冲 — Classical 只存满块不可变 entry;State 存 tail + SWA;$\mathrm{lcm}(4,128){=}128$ 统一两种压缩边界

算法侧五类 entry 见 CSA/HCA 专文 §4 · V4 梗概演进总览 §5.3 表格;本文只讲引擎如何把它们落进内存

V4 异构 KV:Classical KV cache + per-request state blocks (paper sec 3.5.1)

图示详情


Classical KV cache

服务对象:已凑满压缩块的 CSA entry(stride $m{=}4$)与 HCA entry(stride $m'{=}128$)。

说明
对齐粒度按 $\mathrm{lcm}(m,m') = \mathrm{lcm}(4,128) = 128$ token 对齐的压缩块
为何 lcmCSA 每 4 token 一条、HCA 每 128 token 一条;同一物理块需同时满足两种压缩器的块边界,避免跨层/跨类型碎片
生命周期随 prefix 增长 append;压缩完成后 entry 不可变,适合 prefix 共享与落盘
读模式CSA:top-$k$ 稀疏读;HCA:对 ~$L/128$ 条 entry dense attend(1M context ≈ 8K entry)

Together.ai 部署解读强调:V4 的难点不在 attention kernel 本身,而在 多种 cache 对象的 batching、eviction 与 prefix 复用Serving DeepSeek-V4 §「multiple KV-cache layouts」)。


State cache

服务对象

组件含义
SWASliding Window Attention 的 精确局部 K/V;窗口约 128 token,独立 eviction
Tail buffer不足 $m$(CSA)或 $m'$(HCA)个 token 的 未压缩尾;等待凑满后再写入 Classical 池
Indexer KV(若与 state 同池实现)CSA lightning indexer 的轻量向量;与主 attention entry 维度不同
说明
分配方式每请求固定大小块(per-request state block),便于 batch 内不同序列长度对齐
生命周期SWA 随 decode 滑动更新;tail 在凑满前 可变
与 Classical 的分工Classical 存「已定型」压缩历史;State 存「仍在形成中」的局部与尾

论文 §3.5.1 的 State cache 是 SWA + tail 的归宿;部署上 SWA 往往占 per-token 体积大头(Together 早期 bring-up:全量 SWA 时 per-token KV 甚至略高于 V3 路径),因此 cache 策略(存多少、何时 evict)比压缩算法本身更决定并发容量——见 HiSparse 专文


与 ESS / HiSparse 的关系

ESS(V3.2)V4 KV layout(本文)HiSparse
层级算法已分裂 Indexer/Latent;ESS 管 offload 策略定义 Classical vs State 物理布局在 layout 之上把 inactive C4 搬出 GPU
可否叠加layout 是 HiSparse / 磁盘 prefix 的 前置依赖 CSA 4:1 entry 的 稀疏激活

V4 不是把 ESS 的 Latent-Cache 直接放大到 1M;而是 换一套异构压缩 layout 后再做分层内存(ESS §与 V4)。


基础设施线位置

方向文档
本专题(layout 基础)演进总览 §5.3
infra 线 ⑤ 子项基础设施线导读 §1
并列 offloadHiSparse · 磁盘 Prefix Cache
上游 ④ ESSESS Latent offload
算法依赖CSA / HCA · V4 梗概 · 算法线 §③

延伸

资源说明
演进总览 §5.4V3 / V3.2 ESS / V4 三代 offload 对照
Together.ai — Serving V4多 layout 并存的 serving 含义
V4 异构 KV 总览图Classical + HiSparse 分层示意图

论文arXiv:2606.19348 §3.5.1

V4 HiSparse:inactive C4 entry CPU offload

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §5.3 HiSparse · ← 基础设施线导读 · CSA/HCA 算法专文 · V4 梗概 §推理 infra · 前置 KV layout · 并列 磁盘 Prefix Cache · 上游 ESS · 正交 DSpark 部署参考Together.ai — Serving DeepSeek-V4(2026-05,HGX B200 bring-up) 演进总览 §5.3 只保留梗概;HiSparse 机制与数据以本文为准


一句话

HiSparse 是面向 V4 CSA 4:1 压缩层(C4)GPU/CPU 分层 cache 策略:decode 每步仅 top-$k$ 稀疏激活 少量压缩 entry,其余 inactive entry offload 到 CPU pinned memory;GPU 只保留 active 热工作集,从而在单节点上把可服务 token 容量从约 1.2M 提升到 ~3.7M(约 ,B200 部署实测口径)。


为何需要 HiSparse

维度ESS(V3.2)HiSparse(V4)
Cache 结构同质 Latent-Cache([per-token MLA)CSA/HCA/SWA/Indexer/tail 异构](05-V4-KV-Layout.md)
Offload 粒度latent entry;依赖 DSA top-$k$ 时间局部性C4 压缩 entry;依赖 CSA 空间稀疏激活
IndexerGPU 常驻V4 indexer 仍参与 CSA 路径;layout 见 DeepSeek-V4
可否直接迁移 — 须先实现 §3.5.1 双池 layout

V3.2 上 Index Share + ESS 可同开;V4 则需要 HiSparse + 定制 layout + prefix 策略演进总览 §5.4)。


核心机制

组件作用
C4 压缩 entryCSA stride-4:每 4 token 一条 KV;1M context 约 250K 条(再经 top-$k$ 只读子集)
Active 集当前 decode step indexer 选中的 ~128 条 CSA entry + 必要 HCA/SWA 局部
Inactive 集全长 prefix 中 本步未参与 attention 的 C4 entry
CPU pinned poolInactive entry 驻留 主机 pinned memory;GPU miss 时 prefetch 回 HBM
GPU 热池LRU(或类似策略)维护 active 工作集;与 ESS Sparse Memory Pool 思想类似,但 entry 形态为压缩块
HiSparse:inactive C4 entries offload 到 CPU pinned memory

图示详情 · 图下半区标注 HiSparse offload

局部性依据:CSA 每步 top-$k$ 选中的压缩块在相邻 decode step 间 重叠率高(类比 ESS 的 index 时间相似度);多数所需 entry 已在 GPU,少量 cold entry 从 CPU 拉回。


部署数据

指标数值说明
平台NVIDIA HGX B200 单节点Together 早期 V4 bring-up
优化前容量~1.2M tokens默认 cache 策略下总 KV 预算
HiSparse + cache 策略后~3.7M tokens;主要释放来自 inactive C4 offload + SWA 复用策略
SWA 注意全量 SWA 时 per-token KV 可 高于 V3 路径Together 称早期瓶颈常在 SWA state 而非 CSA/HCA 压缩体本身

Together 文中同时提到:通过 只保留最可能被复用的 SWA state,在不改权重的情况下提升总容量——这与 C4 CPU offload 互补,共同构成 V4 serving 的 cache policy 层(非单一 knob)。


与磁盘 Prefix Cache / DSpark 的关系

技术关系
KV layout前置:须先分 Classical / State 池,HiSparse 主要动 Classical 中 C4 部分
磁盘 Prefix Cache互补:压缩 entry 可 跨请求落盘;HiSparse 管 单请求内 GPU↔CPU 热冷分层
DSpark正交:DSpark 优化 decode 步吞吐;HiSparse 优化 KV 驻留容量

与 ESS 对照

维度V3.2 (ESS)V4 (HiSparse)
Offload 对象Latent-CacheInactive C4 压缩 entry
局部性top-$k$ index 时间相似CSA 稀疏激活 + SWA 复用
传输优化FlashTrans / UVA分层内存池 +(引擎)PD 分离
与算法耦合中(依赖 DSA top-$k$)(依赖压缩比 $m{=}4$、$m'{=}128$)

完整表:演进总览 §5.4


基础设施线位置

方向文档
本节点(⑤ HiSparse)基础设施线导读 §1
前置 layoutV4 KV Layout
并列 prefixV4 磁盘 Prefix Cache
上游 ④ ESSESS Latent offload简单放大)
V4 总览DeepSeek-V4 梗概§推理 infra

延伸

资源说明
Together.ai — Serving V41.2M→3.7M、SWA 瓶颈、多 layout serving
ESS 概念V3.2 offload 基线对照
演进总览 §5.3总览反向链入口

论文背景arXiv:2606.19348(算法侧 CSA/HCA;HiSparse 为 社区/部署层命名,与 Together cache policy 实践一致)

V4 磁盘 Prefix Cache

← 中文导读 · ← 仓库首页(EN) · ← 演进总览 §5.3 磁盘 Prefix Cache · ← 基础设施线导读 · CSA/HCA 算法专文 · V4 梗概 §推理 infra · 前置 KV layout · 并列 HiSparse · 上游 ESS 论文arXiv:2606.19348 §3.5.2 部署参考Together.ai — Prefix caching becomes a storage policy 演进总览 §5.3 只保留梗概;prefix 三档策略以本文为准


一句话

V4 的 prefix 不再等于「整条同质 KV 共享一次 prefill」:引擎须按 cache 类型 决定存什么——CSA/HCA 压缩 entry 可直接落盘(紧凑、immutable),SWA 精确局部 state 体积约为压缩 entry 的 ~8×,论文给出 Full / Periodic Checkpointing / Zero 三档 SWA 策略,在 存储带宽 vs 命中重算 之间取舍。


从「共享 prefix」到「共享哪几类 cache」

传统 prefix cache:相同 token 前缀 → 复用同一份 KV,跳过 prefill。

V4 一条共享 prefix 实际包含

Cache 类型是否适合落盘原因
CSA 压缩 entry✅ 优先4:1 紧凑;块对齐后 不可变
HCA 压缩 entry✅ 优先128:1 极紧凑;1M prefix ≈ 8K entry
Tail buffer⚠️ 随 prefix 推进变化未凑满块;通常随请求走 State 池
Indexer KV视引擎实现可与 CSA 路径一并序列化
SWA state⚠️ 体积大精确局部 K/V;长约 压缩 entry 的 8×

Together 总结:Prefix caching becomes a storage policy — 存 CSA/HCA、如何存 SWA、各类型 独立 eviction


CSA / HCA:压缩 entry 落盘

说明
收益多请求共享 repo / system prompt / tool trace 等 长公共前缀 时,免重复 prefill 压缩路径
格式Classical KV cache 中已对齐的 immutable 压缩块($\mathrm{lcm}(4,128)$ 对齐,见 V4 KV Layout
与 HiSparse磁盘层 = 跨请求 / 跨会话 持久;HiSparse = 单请求内 GPU↔CPU 热冷(V4 HiSparse
命中路径加载 CSA/HCA 块 → 仅需补全 tail + SWA(策略见下)

SWA 三档策略

SWA 保存最近 $n_{\text{win}}$(约 128)token 的 精确 attention state。对 长 prefix,全量 SWA 的 存储与写带宽 迅速成为瓶颈。

策略行为优点代价
Full落盘 / 驻留 完整 SWA cache命中后 零重算,复用最简单footprint 最大;Together 早期 bring-up 采用此策略以降低工程复杂度
Periodic Checkpointing每 $K$ token 存一份 SWA 检查点;命中时在相邻检查点间 重算 gap存储介于 Full 与 Zero 之间命中需 部分 prefill 重放
Zero(Recompute on hit)只存 CSA/HCA(+ tail 元数据);命中 prefix 时 按窗口重算 SWA磁盘最省;适合 极长 prefix、高复用、SWA 窗口相对短重算上界 ≈ $n_{\text{win}} \times L_{\text layers}}$ token 量级

Zero 策略数量级:$n_{\text{win}}{=}128$、$L_{\text layers}}{=}61$ → 约 8K tokens 重算,相对 1M prefix 往往可接受。

命中 1M 公共前缀(Zero SWA):
 磁盘/共享池:CSA + HCA 压缩块(~L/4 + L/128 条)
 重算:最后 128×61 ≈ 8K token 的 SWA 路径
 vs 全量 prefill 1M:大幅省算力,略增命中延迟

策略选型

workload倾向策略理由
Agent / coding(长共享 repo)优先 CSA/HCA 落盘 + SWA Periodic 或 Zero前缀极长、重复率高;SWA Full 占满 KV 预算
短 chat、低 prefix 复用SWA Full 或不做磁盘 prefix重算省下的存储不值 setup 成本
高并发、磁盘/PCIe 带宽紧Zero + HiSparse GPU 热池磁盘只存压缩体;SWA 命中时再算

Together 当前(2026-05):Full SWA + 激进 cache eviction → 1.2M→3.7M tokens;说明 策略与 HiSparse 强耦合,无单一默认最优。


与 ESS / V3 prefix cache

V3 / V3.2V4 磁盘 Prefix
共享对象同质 MLA latent 条分类型:CSA/HCA vs SWA
ESS 角色Latent CPU offload,磁盘 prefix 专论V4 需 tiering(GPU / CPU pinned / 磁盘
Index Share与 prefix 正交(省 indexer 算力)V4 仍可能有 indexer 复用,但 不在 §3.5.2 核心

基础设施线位置

方向文档
本专题(§3.5.2)演进总览 §5.3
infra 线 ⑤ 子项基础设施线导读 §1
前置 layoutV4 KV Layout
并列 HiSparseV4 HiSparse
V4 总览DeepSeek-V4 梗概§推理 infra

延伸

资源说明
Together.ai — Prefix caching三档 SWA 工程解读与 Full 策略取舍
演进总览 §5.4磁盘 prefix 在三代 offload 表中的位置
V4 异构 KV 总览图异构 cache 总览图

论文arXiv:2606.19348 §3.5.2

DeepSeek-V3

← 中文导读 · ← 仓库首页(EN) · ← Engram 系列导读

← 演进总览 §7 · 与本仓库其他专题的关系 · Engram 系列导读 · 书中 Engram 卷

1. Introduction

This repository contains the official implementation for the paper: Conditional Memory via Scalable Lookup: A New Axis of Sparsity for Large Language Models.

Abstract: While Mixture-of-Experts (MoE) scales capacity via conditional computation, Transformers lack a native primitive for knowledge lookup. To address this, we explore conditional memory as a complementary sparsity axis, instantiated via Engram, a module that modernizes classic $N$-gram embeddings for $\mathcal{O}(1)$ lookup.

Key Contributions:

  • Sparsity Allocation: We formulate the trade-off between neural computation (MoE) and static memory (Engram), identifying a U-shaped scaling law that guides optimal capacity allocation.
  • Empirical Verification: Under strict iso-parameter and iso-FLOPs constraints, the Engram-27B model demonstrates consistent improvements over MoE baselines across knowledge, reasoning, code and math domains.
  • Mechanistic Analysis: Our analysis suggests that Engram relieves early layers from static pattern reconstruction, potentially preserving effective depth for complex reasoning.
  • System Efficiency: The module employs deterministic addressing, enabling the offloading of massive embedding tables to host memory with minimal inference overhead.

2. Architecture

The Engram module augments the backbone by retrieving static $N$-gram memory and fusing it with dynamic hidden states. The architecture is shown below (drawio provided):

Engram Architecture

3. Evaluation

Scaling Law

Scaling Law


Large Scale Pre-training

Pre-training Results


Long-context Training

Long Context Results

4. Case Study of Engram

Long Context Results

5. Quick Start

We recommend using Python 3.8+ and PyTorch.

pip install torch numpy transformers sympy

We provide a standalone implementation to demonstrate the core logic of the Engram module:

python engram_demo_v1.py

⚠️ Note: The provided code is a demonstration version intended to illustrate the data flow. It mocks standard components (like Attention/MoE/mHC) to focus on the Engram module.

6. License

The use of Engram models is subject to the Model License.

7. Contact

If you have any questions, please raise an issue or contact us at service@deepseek.com.

8. 延伸阅读

← 版本演进总览 · 《ds-技术报告》 · Engram 系列导读

DeepSeek Engram 系列导读

← 中文导读 · ← Engram 官方 README · ← 演进总览 §7 Engram · 《ds-技术报告》 更新:2026-06-24 PDF 目录:src/


系列在解决什么问题?

Transformer + MoE 用条件计算扩容量,但缺少原生的知识查表原语——模型被迫用多层 FFN/Attention 模拟静态模式检索(固定搭配、事实、局部 n-gram 依赖),浪费算力与有效深度。

Engram 提出 条件记忆(Conditional Memory)

稀疏轴机制激活依据
条件计算(MoE)动态路由专家当前 hidden state
条件记忆(Engram)O(1) n-gram embedding 查表输入 token 序列(确定性)

论文标题Conditional Memory via Scalable Lookup: A New Axis of Sparsity for Large Language Models

Abstract

While Mixture-of-Experts (MoE) scales capacity via conditional computation, Transformers lack a native primitive for knowledge lookup. To address this, we explore conditional memory as a complementary sparsity axis, instantiated via Engram, a module that modernizes classic N-gram embeddings for O(1) lookup.

第二根轴的关键性质:寻址在推理前可知 → 可 prefetch、可 offload 到 Host DRAM / CXL,GPU 只算动态推理。


系列演进关系

Engram 四篇论文系列演进:奠基与 CXL / Nine / Tiny 三条线

图示详情


① Engram 奠基

标题Conditional Memory via Scalable Lookup: A New Axis of Sparsity for Large Language Models 作者:DeepSeek-AI + 北大等 · 代码开源 · 梁文锋合著

Engram 双稀疏轴与 U 形分配律

架构详图Engram 工作原理(Figure 1 + 逐步推导)

核心设计

  1. N-gram 查表现代化:tokenizer 压缩 + 多头哈希 + 上下文门控 + 多分支注入 Transformer
  2. O(1) lookup:局部 context → hash → 从大表取 embedding → 与 backbone hidden 融合
  3. 稀疏分配问题(Sparsity Allocation):MoE 算力 vs Engram 记忆容量如何切?

Engram 架构总览

下图与论文 Figure 1 同构(量子位 整理版;论文原图见 PDF 第 3 页)。左侧是 Engram 在 backbone 中的位置,右侧是模块内部数据流。

Engram 架构:n-gram 查表 + 上下文门控 + 残差注入

在整网中的位置

Engram 在 backbone 中的插入位置

图示详情

Engram 不替换 标准 embedding / un-embedding,也 不是每层都有;只在系统延迟允许的少数层插入,与 Attention、MoE 串行,各自带残差。


Engram 工作原理

给定序列 $X=(x_1,\ldots,x_T)$,在第 $\ell$ 层 hidden $h_t^{(\ell)}$ 处,Engram 对每个位置 $t$ 做 检索(Retrieval)融合(Fusion) 两阶段。

Step名称记忆过滤
1Tokenizer 压缩不过滤 — 只规范化 token ID
2构造 n-gram不过滤 — 只组后缀
3多头哈希寻址不过滤 — 算索引、查表
4拼接 $e_t$不过滤 — 产出静态记忆(上下文无关)
5$W_K$ / $W_V$ 投影备过滤 — 记忆变 $k_t,v_t$,尚未用 $h_t$
6上下文门控★ 过滤记忆 — $\alpha_t$ 门控,$\tilde{v}_t=\alpha_t v_t$(为何记忆依赖?
7短卷积已过滤 — 只在 $\tilde{v}_t$ 上运算
8残差写回已过滤 — $Y$ 注入 backbone,之后接 Attn/MoE
Engram 逐步前向与记忆过滤标注

图示详情

阶段 A:确定性检索

Step 1 — Tokenizer 压缩(Vocabulary Projection) · 记忆过滤:不过滤

  • 子词 tokenizer 常把语义相同的词切成不同 ID(如 Apple vs ␣apple)。
  • 预计算映射 $P: V \to V'$:NFKC 规范化、小写化等,把 raw ID 压成 canonical ID $x^{\prime}_t = P(x_t)$。
  • 论文在 128k 词表上有效词表约 缩小 23%,提高 n-gram 槽位利用率。

Step 2 — 构造后缀 n-gram · 记忆过滤:不过滤

  • 对每个位置 $t$、每个阶数 $n$(如 2-gram、3-gram),取压缩后的后缀:

$$ g_{t,n} = (x^{\prime}_{t-n+1}, \ldots, x^{\prime}_t) $$

  • 例(图中句子):Alexander the Great → 2-gram the Great、3-gram Alexander the Great

Step 3 — 多头哈希寻址 · 记忆过滤:不过滤

  • 全空间 n-gram 无法显式建表,用 $K$ 个独立 hash 头(每阶 $n$ 各 $K$ 头)映射到素数大小的表 $E_{n,k}$:

$$ z_{t,n,k} = \varphi_{n,k}(g_{t,n}), \quad e_{t,n,k} = E_{n,k}[z_{t,n,k}] $$

  • $\varphi_{n,k}$ 为确定性 乘性-XOR hash;多头降低碰撞。
  • 关键:索引只依赖 输入 token 序列,推理前即可算出 → 可 prefetch / offload。
Step 3 多头哈希寻址:K 个 hash 头映射到素数表并查 embedding

图示详情

Step 4 — 拼接记忆向量 · 记忆过滤:不过滤 → 静态记忆 e_t

$$ e_t = \mathop{\Big\Vert}\limits_{n=2}^{N} \mathop{\Big\Vert}\limits_{k=1}^{K} e_{t,n,k} \in \mathbb{R}^{d_{\mathrm{mem}}} $$

  • $e_t$ 是 上下文无关 的静态先验:「这个 n-gram 在历史上常伴随什么表示」。

阶段 B:上下文门控与融合

静态查表有碰撞、多义性;必须用当前 hidden 做 动态过滤(对应图右侧 Scaled Dot Product / Linear / Conv)。

Step 5 — Key / Value 投影 · 记忆过滤:备过滤(尚未用 h_t)

$$ k_t = W_K e_t, \quad v_t = W_V e_t $$

  • 检索向量 $e_t$ 提供 Key、Value;当前 hidden $h_t$(已看过前文 Attention)作 Query 来源。

Step 6 — 上下文门控(Context-aware Gating) · 记忆过滤:★ 在此过滤

$$ \alpha_t = \sigma\left(\frac{\mathrm{RMSNorm}(h_t)^{\top} \mathrm{RMSNorm}(k_t)}{\sqrt{d}}\right), \quad \tilde{v}_t = \alpha_t \cdot v_t $$

  • $\alpha_t \in (0,1)$:$e_t$ 与当前语境 一致 则门开大,矛盾(碰撞/歧义)则趋近 0,抑制噪声。
  • 本质:用 Attention 式对齐,但 记忆来自查表而非算出来

答疑门控依据与记忆依赖过滤

Step 7 — 短卷积扩感受野 · 记忆过滤:已过滤(仅 ṽ_t)

$$ Y = \mathrm{SiLU}\left(\mathrm{Conv1D}(\mathrm{RMSNorm}(\tilde{V}))\right) + \tilde{V} $$

  • Depthwise 因果 Conv1D:kernel $w=4$,dilation = 最大 n-gram 阶数 $N$;再 SiLU。
  • 在门控后的 $\tilde{V}$ 序列上扩局部感受野、增加非线性。
  • 感受野常数(demo 默认 $w=4,N=3$):门控流沿序列从 1 扩到 $1+(w-1)N=10$,不是扩到 4。详见 感受野常数训练/推理差异RF 1→10 影响
Step 7-8:ShortConv 残差路径与 backbone 写回

图示详情

Step 8 — 残差写回 backbone · 记忆过滤:已过滤 → 注入 H

$$ H^{(\ell)} \leftarrow H^{(\ell)} + Y $$

  • 然后接标准 Attention(处理全局依赖)→ MoE(条件计算)。
  • 分工:Engram 接管 局部静态搭配;Attention/MoE 专注 动态推理

多分支 backbone 上的变体

若 backbone 是 多分支 Hyper-Connection($M=4$ 路并行残差流):

组件是否共享
稀疏 embedding 表 $E_{n,k}$共享
Value 投影 $W_V$共享
Key 投影 $W_K^{(m)}$每分支独立 $m=1,\ldots,M$
  • 每分支用自己的 gate:

$$ \alpha_t^{(m)} = \sigma\left(\frac{\mathrm{RMSNorm}(h_t^{(m)})^{\top} \mathrm{RMSNorm}(W_K^{(m)} e_t)}{\sqrt{d}}\right) $$

  • 输出:$u_t^{(m)} = \alpha_t^{(m)} \cdot (W_V e_t)$
  • 工程上可把 $W_V$ 与 $M$ 个 $W_K^{(m)}$ 融合成一次 FP8 稠密 GEMM,提高 GPU 利用率。

一步前向的数据流小结

见上文 Step 1–8 总表逐步前向 SVG(每步顶部标注记忆过滤状态)。

与 MoE 的本质区别

导读所称「第二稀疏轴」即论文摘要中的 complementary sparsity axis(第一轴为 MoE 的 conditional computation);原文见上文 系列在解决什么问题? 引用块。

Engram(条件记忆)MoE(条件计算)
激活依据输入 token / n-gram(确定性)当前 hidden(数据依赖)
操作O(1) 查表 + 轻量门控/卷积路由 + 专家 FFN 矩阵乘
擅长固定搭配、实体、局部事实组合推理、复杂逻辑
系统可 offload、异步 prefetch专家权重通常在 HBM

机制解释

  • Engram 接管早期层的静态模式重建 → backbone 等效加深,复杂推理更好
  • 局部依赖交给 lookup → Attention 腾给全局上下文

U 形缩放律

等参、等 FLOPs 下扫描分配比 ρ(inactive 参数预算中 MoE 专家占比;ρ=1 为纯 MoE),纵轴为 Validation Loss

  • 纯 MoE(ρ=1)不是最优(10B 档 loss 1.7248)
  • 经验最优 ρ ≈ 75–80% MoE(Engram 约 20–25%;该档 loss 约 1.7109)
  • ρ 过低(Engram 过多):记忆挤占、推理容量不足
  • ρ=1(纯 MoE):浅层仍在「重建」静态模式,挤占有效深度

实验亮点

类型代表提升
知识MMLU +3.4,CMMLU +4.0
推理BBH +5.0,ARC-Challenge +3.7
代码/数学HumanEval +3.0,MATH +2.4
长上下文Multi-Query NIAH 84.2 → 97.0

系统特性

  • 100B 参数 embedding 表 offload 到 Host DRAM,吞吐损失 <3%
  • 前几层 GPU 计算时,异步 PCIe prefetch Engram embedding

② CXL 内存池化

标题Pooling Engram Conditional Memory in Large Language Models using CXL 作者:北大、阿里云计算、人大、港大等

CXL 多机 Engram 内存池部署

动机

Engram 表可达百亿参数级,若每机本地 DRAM 各存一份成本极高;传统 RDMA 内存池(Mooncake 等)面向 KV cache 的 大块 MB–GB 传输,对 Engram 每次仅 ~5 KB/ token/层、16 段离散小 embedding 的访问模式不友好(64B 小包 RDMA 吞吐可跌至峰值带宽 25% 以下)。

体系结构:三级存储分层

论文原型 + 工程解读可抽象为三层(对应 Figure 4 拓扑):

层级物理介质典型容量存放内容访问特征
L1(计算层)GPU HBM数十 GBTransformer/MoE 权重、当前 batch hidden、Engram gate/conv 小参数、prefetch staging buffer算力主战场;带宽最高
L2(节点本地)Host Local DRAMTiB 级/节点可选 热 embedding 缓存(Zipf 高频 n-gram)、CPU bounce buffer、CXL 映射的 虚拟地址窗口延迟 ≈ 本地 DRAM;可作 CXL 读路径中转
L3(机架共享)CXL Memory Pool论文原型 256 GB/卡,交换机方案可达 4 TB / 8 机完整 Engram embedding 大表(只读、多机共享一份)容量最大、单 bit 成本最低;经 CXL Switch 细粒度 load/store

答疑HBM / DRAM / CXL.mem 区别与 L1–L3 分工

硬件拓扑:每服务器 CPU/GPU → PCIe 5.0 ×16 CXL AdapterXConn XC50256 CXL Switch → 多块 CXL.mem;交换机总带宽 512 GB/s,最多 8 机共享 4 TB 池。Engram 表以 DAX 设备 mmap 进用户态,多机只读、无需跨节点 cache coherence

CXL Engram 三级存储硬件拓扑

图示详情


缓存访问逻辑

CXL Engram 缓存访问与 prefetch 时序

图示详情

答疑prefetch window 与 CPU/GPU 分工 · CXL vs RDMA pattern

Engram 访问有三大性质,决定上述分层如何工作:

  1. 只读、极小激活:每 token 每层只取 5 KB(N=2,3 × 8 hash heads × 320B),相对百亿参数表几乎为零。
  2. 稀疏离散:hash 索引分散在巨大表中,成千上万次 数百字节级 随机读。
  3. 延迟可隐藏:索引仅依赖 输入 token,decode 步开始即可发起读,与 Engram 之前各层 GPU 计算重叠

Step 0 — 索引预计算

  • ForwardBatch 到达(SGLang)→ 由 input token IDs 计算各层 Engram 的 hash 索引 offsets[]
  • 不依赖 hidden,与 GPU 前向可并行启动

Step 1 — 异步 Prefetch 触发

  • 解析 prefill / decode batch 的 token IDs → 异步启动 Engram embedding 拉取(目标:本步 Layer $k$ 所需行)
  • 数据终点:GPU VRAM staging buffer(或先落 CPU 再拷 GPU)

时间窗约束:Engram 插在 layer $k$(如 $k=2,15$),必须在 layer $1..k-1$ 的计算时间内完成取数:

$$ L_{\mathrm{pool}}(N_{\mathrm{token}}, S_{\mathrm{layer}}) < \sum_{i=1}^{k-1} t_{\mathrm{exec}}(i) $$

以 Qwen3-32B 为例:$t_{\mathrm{step}}\approx 3.6,\mathrm{ms}$ / 64 层 → 每层约 56 μsLayer 2 的 prefetch 窗口仅 ~56 μs,这是选 CXL 而非 RDMA 的核心原因。

答疑为何选 CXL 而非 RDMA

Step 2 — L3 → L2/L1 数据通路

通路 A:CXL → CPU(OpenMP 并行 memcpy

  • CXL DAX 已 mmap 到用户态 cxl_base
  • 64 线程按 offsets[i] 并行 memcpycpu_dst(Listing 1)
  • 延迟:≈ 本地 DRAM

通路 B:CXL → GPU(推荐,绕过 CPU 搬运)

  • cudaHostRegister 注册 CXL 区域为 CUDA pinned host memory
  • 单 kernel cxl2vram_copy:每个 block 处理一段离散 embedding,GPU DMA 经 PCIe P2P 直读 CXL(Listing 2)
  • 避免数千次 cudaMemcpy 启动开销;宽 grid 并发打满 PCIe
  • 延迟略高于 CXL→CPU,但仍 可满足 prefetch 窗口

(通路示意见上图 Step 2:L3 cxl_base + offset[i] 经 PCIe P2P 至 L1 gpu_staging[i],CPU 并行计算 offsets。)

Step 3 — L1 计算融合

  • staging 中的 $e_t$ 已在 HBM → $W_K, W_V$ 投影 → 门控 $\alpha_t$ → Conv → $Y$ → $H \leftarrow H + Y$ → Attention → MoE

Step 4 — 热数据短路

① 中 n-gram 服从 Zipf 分布:少数模式占绝大多数命中。工程上可在 L2 Local DRAM / L1 HBM 维护高频 embedding 缓存——命中则跳过 CXL 往返;未命中则从 L3 读取并可选回填 L2(见上图 Step 4)。

CXL 论文原型将 整表放 L3 单卡 256 GB;更大规模用 4 TB 池 + 热缓存 是自然的扩展路径。


与 RDMA 池的访问逻辑对比

环节RDMA Pool(Figure 2a)CXL Pool(Figure 2b)
语义get/put 消息式load/store,cache-line 粒度
数据路径GPU → host bounce → NIC RDMA → 远端 DRAMGPU/CPU 直连 CXL 地址空间
Engram 5KB×离散小包效率差,延迟 数量级高于 DRAM延迟 接近本地 DRAM(Figure 3)
多机共享支持CXL Switch 硬件地址映射,8 机并发读同一表

答疑CXL vs RDMA 通信 pattern(02c 图标注)


SGLang 集成:Init → Prefetch → Compute

论文 §4.3 三处改动:

  1. Initialization:全局 tp_rank=0, pp_rank=0 的 ModelRunner 将 Engram 权重 加载进 CXL 共享池(其余 rank 复用映射地址)。
  2. Prefetching:每个 ForwardBatch 到达 → 解析 token IDs → 异步 CXL→GPU 传输,与非 Engram 层 overlap。
  3. Computation:各 rank 按 DP/TP/PP 分工,到 Engram 层时从 pool(或 staging)取 embedding,与本地 hidden 计算;Engram 带宽占用小,每 rank 可直接读池

带宽与延迟预算

符号含义Qwen3-32B 例
$T$系统吞吐 (tok/s)≈ 70,000
$S_{\mathrm{layer}}$每 token 每层 Engram 载荷5 KB
$N_{\mathrm{eng}}$含 Engram 的层数2(layer 2, 15)

带宽:$B_{\mathrm{pool}} > T \times S_{\mathrm{layer}} \times N_{\mathrm{eng}} \approx 0.7,\mathrm{GB/s}$ — PCIe Gen5 / 百 G 网卡均够,瓶颈不在带宽

延迟:Layer 2 的 prefetch 窗 ≈ 56 μs —— 必须选 CXL 近 DRAM 延迟,RDMA 不满足。


实验结论

指标结果
CXL 读延迟CXL→CPU ≈ DRAM;CXL→GPU 略高但可接受(Figure 5/6)
端到端吞吐Qwen3-4B:DRAM 5683.7 vs CXL 5614.4 tok/s(≈ 1.2% 损失);8B 类似
多机扩展DP=2, 2 节点吞吐几乎不变(Table 3)
成本大表 + 多节点时 共享 CXL 池 优于每机配满 DRAM(Table 4/5)

与①的关系

① 在单机 Host DRAM 上证明 offload + prefetch <3% 损失;② 把同一套 确定性索引 → 异步预取 → 计算重叠 逻辑推到 多机 CXL 共享池,并量化 RDMA 不适合、CXL 适合 的访问路径差异。


③ 无冲突热层实验 Engram-Nine

标题A Collision-Free Hot-Tier Extension for Engram-Style Conditional Memory: A Controlled Study of Training Dynamics

热/冷双层路由、loss flip、碰撞正则(导读摘要图)

图示详情

要验证的直觉

Engram 用多头哈希会有碰撞:不同 n-gram 共享 embedding 行。直觉上「高频键碰撞」可能是瓶颈 → 用 MPHF(最小完美哈希) 给 Top-N 高频 n-gram 建无碰撞热层,长尾仍走原冷层哈希。

论文 Figure 1 — 双层检索:MPHF + fingerprint 命中走 Hot(单表 $K\times d$),未命中走 Cold($K$ 头哈希拼接)。

Engram-Nine 双层检索架构

论文原图 PDF · 裁剪图源目录

核心发现

严格等参对照下:

1. 去碰撞并不稳定降低 val loss — 证伪「碰撞是主要瓶颈」

论文 Table 3Nine-100/400K(无碰撞热层)val loss 4.4799,与 Hash-500K 4.4809 几乎相同;高碰撞 Hash-300K 4.4825 亦相当。差异小于测量标准差(0.008–0.012)。

各配置 val loss 与 hot_cold_delta 汇总

2. Hot-to-Cold Advantage Flip:训练早期 hot位置 loss 更低;后期 cold 位置反超

定义 $\texttt{hot_cold_delta} = \texttt{val_loss_cold} - \texttt{val_loss_hot}$:正值 = hot 更优,负值 = cold 更优。所有配置都经历从 hot 占优到 cold 占优的 crossover。

论文 Figure 2 — 训练全程 flip 曲线;Table 4 — 各配置 flip 时刻与幅度。

Hot/Cold flip 训练动力学 Flip 时刻与前后最大优势

3. 无碰撞配置更早 flip → 碰撞像隐式正则

Nine(无碰撞)在 iter 2000–2750 flip;Hash(有碰撞)多在 iter 3000 才 flip。更小 $N_{\mathrm{hot}}$ 的 Nine 配置 flip 更早(Table 5),与「稀疏样本学得慢」的直觉相反 → 碰撞延迟 flip、像正则。

N_hot 消融:flip 时刻与稀疏度假设证伪

4. 门控错配:gate 早期学会偏 hot,flip 后仍给 hot 更高权重,但 hot 已不再更优

Figure 3:$\alpha_{\mathrm{hot}} > \alpha_{\mathrm{cold}}$ 从早期固化;Divergence 后 cold loss 已更低,但 $\Delta\alpha$ 仍为正。

Figure 4 / Table 6:高 $\alpha$ bucket 对应 更高 loss(0.8–1.0 桶 avg loss 5.28 vs 0.2–0.4 桶 3.90),且 hot 占比 76% — 与门控设计意图相反。

门控权重 α 随训练演化 按 α 分桶的 loss 与 hot 占比 门控错配:高 α 对应高 loss

补充 — Figure 5:深层(Layer 6)$\Delta\alpha$ 可出现反转,Nine 配置更明显。

各层门控偏好 Δα

启示

  • 改进查表精度 ≠ 必然更好训练
  • 瓶颈可能在 gating 的 credit assignment,而非 index 准确度
  • 工程上不要盲目消灭哈希碰撞

与①的关系

① 把多头哈希当工程手段;③ 用控制实验说明碰撞可能是特性而非 bug


④ 视觉 Tiny-Engram

标题Tiny-Engram: Trigger-Indexed Concept Tables for Generative Vision 机构AutoArk-AI(开源跟进,非 DeepSeek 官方)

触发词查表注入视觉概念

动机

视觉个性化常用 LoRA / adapter 全路径改权重,难以控制「何时、是否」检索某个概念。

方案

  • Trigger-indexed concept table:注册稀有 n-gram 触发词 → 查小表 memory residual
  • 仅在 prompt 匹配触发区域注入,冻结 SD / DiT backbone
  • 调制 text encoder hidden,不改 UNet/DiT 权重

结果

  • 图像生成:绑定身份 + 保持 prompt 组合性,参数极少
  • 视频:能改主体,跨 prompt 身份持续性仍弱(需视觉侧记忆注入)
  • 开源声称:视觉场景下 参数效率与抗灾难性遗忘 优于 LoRA

与①的关系

把 Engram 的「显式地址 + O(1) 查表 + 条件激活」从 LLM 搬到 生成式视觉;证明条件记忆不限于语言 backbone。


四篇对照总表

维度① Engram② CXL③ Engram-Nine④ Tiny-Engram
层级模型架构推理系统训练动力学跨模态应用
核心问题记忆 vs 计算怎么分表放哪、怎么连哈希碰撞要不要消视觉概念怎么注入
关键结论U 形律 ~25% 记忆CXL ≈ DRAM 性能碰撞有正则作用触发词查表可个性化
官方性DeepSeek系统论文跟进研究AutoArk 开源

概念速查

术语含义
Conditional Memory按输入稀疏查表,非全参数前向
Sparsity AllocationMoE FLOPs 与 Engram 表大小的最优配比
Multi-head hashing多 hash 头降碰撞,拼接 embedding
MPHF 热层高频 n-gram 完美哈希、无碰撞
CXL pool跨机共享内存池,细粒度访问
Trigger-indexed仅当 prompt 出现注册 n-gram 才激活记忆

若做跟进创新

方向可切入点
与推理框架结合Engram prefetch 与 CUDA Graph / 分层 KV 的调度共存
与 LoRA 对比语言侧 Tiny-Engram 式「触发词记忆」vs LoRA(④ 已在视觉做)
分配律不同任务(代码 vs 知识)是否需不同 MoE/Engram 比
门控③ 指出 gating credit assignment;可改 gate 结构或训练目标
多模态④ 视频身份持久 → 视觉 token 侧 Engram 而非仅 text encoder

参考文献

  1. Cheng et al. Engram. arXiv:2601.07372. https://github.com/deepseek-ai/Engram
  2. Pooling Engram using CXL. arXiv:2603.10087
  3. Collision-Free Hot-Tier Extension. arXiv:2601.16531
  4. Cai et al. Tiny-Engram. arXiv:2605.20309. https://github.com/AutoArk/TinyEngram

相关文档

Raschka 解读梗概:DeepSeek V3 → V3.2

← 报告目录 · 全文解析(含表格) · 原文 作者:Sebastian Raschka · 2025-12-03(更新 2026-01-01) 本地对照:V3 梗概 · V3.1 梗概 · V3.2 梗概 · MLA · DSA 梗概 · DSA 逻辑 · RLVR


一句话

V3.2 = V3.1-Terminus 权重架构 + DSA 稀疏注意力;训练侧在 R1 的 RLVR+GRPO 上叠加 DeepSeekMath V2 的自验证 与一组 更保守的 GRPO 稳定性补丁;V3.2-Exp 的首要角色是 给 V3.2 铺推理 infra


发布时间线

时间模型要点
2024-12V3R1同架构;R1 靠 RLVR 出圈
2025R1-0528架构不变,后训练小升级
2025V3.1V3.1-TerminusHybrid 单模型双模式;Terminus = 小改进 + 128K,V3.2 续训起点
2025-09V3.2-Exp在 Terminus 上 续训加 DSA;benchmark 不惊艳,但 铺生态/推理栈
2025-11-27DeepSeekMath V2自验证 + 自 refine;V3.2 数学奖励的数据与方法来源
2025-12-01V3.2架构同 Exp;完整后训练成品
2025-12-31mHC 论文残差路径研究(Hyper-Connections 约束流形),非 V3.2 权重变更

架构演进

版本架构相对 V3训练侧重
V3MoE + MLA 基座预训练 base
R1同 V3RLVR + GRPO(可验证奖励)
V3.1 / Terminus同 V3Hybrid chat + reasoning(prompt 切换)
V3.2-Exp / V3.2+ DSA(lightning indexer + top-$k$=2048)Exp 验稀疏;V3.2 全任务 + 工具/agent

DSA 复杂度:注意力主路径 $O(L^2) \to O(Lk)$,$k \ll L$。目标 不是刷过 Terminus benchmark,而是 少掉点、大幅省算


模型类型:专用推理 vs Hybrid

路线代表Raschka 观察
专用推理R1、部分 Qwen3 拆分版单场景更强,但要维护两套模型
HybridQwen3 初版、gpt-oss、V3.1/V3.2一套权重,模板/系统提示切换模式
DeepSeek 方向R1(专用)→ V3.1+ HybridR1 像推理方法试验床;V3.2 面向通用旗舰

MLA 要点

  • K/V 压进 latent 再进 KV cache;推理时 up-project 回注意力空间(类比 LoRA 升降维)。
  • Q 在训练时也压缩,推理时不压缩(文章 side note)。
  • MLA 自 V2 引入,V3/R1 沿用。

RLVR / GRPO 要点

R1 奖励

奖励作用
format答案格式
language consistency避免中英混杂
verifier数学/代码对错(符号验证)

V3.2 奖励

任务类型奖励组成
reasoning / agentrule-based outcome + length penalty + language consistency
general生成式 RM(每 prompt 自带 rubric)
math并入 DeepSeekMath V2 数据与奖励

→ 从「纯 RLVR」变为 RLVR + LLM-as-judge 混合管线

V3.2 GRPO 相对 DAPO / Dr. GRPO

改动摘要
保留 原 GRPO advantage 归一化不像 Dr. GRPO / DAPO 那样大改目标
分域 KL 权重数学可近零 KL,但不全局删除
无偏 KL 估计KL 项用与主 loss 相同的 importance ratio 重加权
off-policy sequence masking负 advantage 且偏离 rollout 太远的序列丢弃
MoE routing 固定rollout 专家路径训练时复现
top-p/k mask 保留训练 action space 与采样一致

DeepSeekMath V2 → V3.2 数学能力

组件角色
LLM1 证明生成器主模型
LLM2 证明验证器训练时作 reward model;rubric 0 / 0.5 / 1
LLM3 meta-verifier训练时监督 LLM2;推理不用
自 refine最多 8 轮;训练用独立 verifier,推理用单一 2-in-1 模型

动机:RLVR 只验最终答案 → 推理过程可错;定理证明需要 过程分 而非数值答案。


V3.2 变体

模型特点
V3.2通用 + agent + 工具;DSA + 混合奖励
V3.2-SpecialeRL 阶段 仅 reasoning 数据;减弱 length penalty → 更长链、更高精度(推理 scaling)

结论表

#takeaway
1V3.2 架构与 V3 系一脉;主要结构改动 = V3.2-Exp 的 DSA
2数学靠 DeepSeekMath V2 自验证 迁入训练
3GRPO 稳定性补丁 多于算法替换
4文章未展开:蒸馏、长上下文训练、工具集成(类 gpt-oss)
5附录 mHC:在 Hyper-Connections 上做流形约束,改 残差路径 稳定性(2025-12-31 论文)

与本地文档映射

文章章节本地延伸
§3.1 MLA / V3MLA 低秩注意力 · DeepSeek-V3
§3.2 RLVR / GRPORLVR · DeepSeek-R1
§3.4 V3.1 Hybrid / MLA 切换DeepSeek-V3.1 梗概§MLA 模式切换
§4 DSALightning Indexer 详解 · DSA 稀疏注意力 · DSA 逻辑详解
§6 V3.2 infraDeepSeek-V3.2 · 演进总览 §3.6
§8 mHCmHC · DeepSeek-V4

Raschka 全文解析:From DeepSeek V3 to V3.2

← 梗概 · ← 报告目录 第三方原文From DeepSeek V3 to V3.2: Architecture, Sparse Attention, and RL Updates(Sebastian Raschka · Ahead of AI · 2025-12-03) 本地对照:V3.1 · V3.2 · DSA 梗概 · DSA 逻辑 · RLVR


1. The DeepSeek Release Timeline

要点:V3(2024-12)起初不火爆;R1 使同架构模型成为开源旗舰。2025 年无「隔年大招」,但有 V3.1 / V3.2-Exp 等铺垫 release;V3.2-Exp 意在预热推理 infra,正式 V3.2 随后发布。V3.2 使用 非标准稀疏注意力,需自定义推理代码。

表 1-1:主要 release 时间线

时间模型 / 事件角色(Raschka 归纳)
2024-12DeepSeek V3Base:MoE + MLA
2024-12 ~ 2025-01DeepSeek R1同架构 + RLVR;带火 V3 系
2025R1-0528后训练小升级,对标 o3 / Gemini 2.5 Pro 时期
2025V3.1V3.1-TerminusHybrid;Terminus = V3.1 收尾 checkpoint
2025-09V3.2-ExpTerminus + DSA 续训;benchmark 平淡,铺生态
2025-11-27DeepSeekMath V2数学 PoC;自验证管线
2025-12-01V3.2旗舰正式版;架构同 Exp
2025-12-31mHC 论文残差 Hyper-Connection 研究(附录 §8)

原文 Figure 3:release 时间轴(主模型标红)。团队曾传训练芯片从 NVIDIA 换 Huawei,文章称 已回到 NVIDIA(基于公开信息)。


2. Hybrid Versus Dedicated Reasoning Models

要点:V3 = base;R1 = 专用推理(额外 post-training)。行业出现 Hybrid(同一 checkpoint 切换 thinking/chat)与 拆分 instruct/reasoning 两条路线。

表 2-1:推理模型形态对比

形态机制代表
Dedicated reasoning独立 checkpoint / 管线DeepSeek R1
Hybrid模板或系统提示切换模式初版 Qwen3gpt-ossV3.1 / V3.2
Hybrid → 拆分分开发布 instruct / reasoning 版Qwen 后续路线

表 2-2:DeepSeek 在「专用 vs Hybrid」上的移动

阶段方向Raschka 解读
V3 + R1Base + 专用 R1R1 验证 RLVR 与推理能力
V3.1 / V3.2Hybrid单模型覆盖 chat + reasoning;R1 像 试验床,V3.2 面向 通用旗舰
未来(推测)可能仍有 R2 专用版文章未证实

原文 Figure 4–5:R1 训练管线、2025 年 reasoning/hybrid 模型时间线。


3. From DeepSeek V3 to V3.1

3.1 DeepSeek V3 Overview and MLA

要点:V3 两大架构亮点 = MoE + MLA。MLA 将 K/V 投影到低维 latent 再写入 KV cache;推理时 up-project 使用。Q 仅在 训练 时压缩,推理 不压缩。

表 3-1:V3 核心架构组件

组件作用备注
DeepSeekMoE条件计算扩容文章略去 MoE 入门
MLAKV latent 压缩V2 引入;V3/R1 沿用;利于 KV cache
MTP推测解码相关本地 DeepSeek-V3

原文 Figure 6:MLA 降维 → cache → up-project 示意图。

3.2 DeepSeek R1 and RLVR

要点:R1 架构同 V3;差异在 RLVR(Reinforcement Learning with Verifiable Rewards):从可符号/程序验证的任务(数学、代码等)学习。GRPO = 无 critic 的 PPO 简化版;RLVR+GRPO 再省掉 reward model,直接用计算器/编译器等 可验证奖励

表 3-2:LLM 强化学习管线对比

RLHF + PPOGRPORLVR + GRPO
Reward model人类偏好训练
Critic(value model)
奖励来源RM 打分组内相对优势符号工具(计算器、编译器等)
典型用途对齐简化 RLHF推理(数学/代码可验证)

3.3 DeepSeek R1-0528

说明
定位官方称 minor version upgrade
架构同 V3/R1
提升来源后训练管线优化(细节未公开);托管版或更长推理

3.4 DeepSeek V3.1 Hybrid Reasoning

说明
能力Instruct + reasoning 合一
切换Chat prompt 模板(类初版 Qwen3)
权重链V3.1 ← V3.1-Base ← V3架构相同
TerminusV3.1 收尾版;128K;V3.2 续训基座 → 见 DeepSeek-V3.1 梗概§MLA 模式切换

4. DeepSeek V3.2-Exp and Sparse Attention

要点:V3.2-Exp 在 V3.1-Terminus续训加入 DSA。DSA = (1) lightning indexer + (2) token selector;从「看全长」变为「看学到的 top-$k$ 子集」。

表 4-1:滑动窗口注意力 vs DSA

滑动窗口(Gemma 3、Olmo 3 等)DSA
可见历史固定宽度 局部窗学习选择 的 $k$ 个位置
选择方式规则(距离)indexer 打分 + top-$k$
稀疏模式带状局部非局部、数据驱动
典型 $k$窗口宽 $w$$k=2048$(官方代码)

表 4-2:Lightning indexer 打分公式符号

公式:

$$ I_{t,s} = \sum_{j=1}^{H^I} w_{t,j},\mathrm{ReLU}!\left(q_{t,j}\cdot k_{s}\right) $$

符号含义
$t$当前 query token 位置
$s$历史 token 位置($0 \le s < t$)
$j$indexer head 索引($1 \ldots H^I$)
$q_{t,j}$位置 $t$、head $j$ 的 query 向量
$k_s$位置 $s$ 的 key(已压缩在 MLA KV cache
$w_{t,j}$可学习的 per-head 权重
top-$k$ 的 $k$与 key 的 $k$ 无关;selector 超参,= 2048

实现注

  • indexer 只对 query 多头;keys 已在 cache,无需再按 head 打分。
  • ReLU 本身难让分数为 0;真正稀疏来自 top-$k$ selector
  • 复杂度:$O(L^2) \to O(Lk)$。

原文 Figure 9–11:滑动窗 vs DSA 注意力图、DSA 流程图。 本地延伸Lightning Indexer 详解 · DSA 逻辑详解

DSA 两阶段:Lightning Indexer → Top-k → Core MLA;Indexer-Cache 与 Latent-Cache

5. DeepSeekMath V2

时间:2025-11-27(美国感恩节),V3.2 发布前 4 天。基座:V3.2-Exp-Base。角色:V3.2 的 数学能力 PoC

表 5-1:常规 RLVR 的局限

局限含义
答案对 ≠ 推理对错误逻辑也可能碰对答案
定理证明需要 逐步推导最终数值奖励不适用

5.1 Self-Verification

结构:训练 证明生成器 LLM1 + 证明验证器 LLM2;可选 meta-verifier LLM3 监督 LLM2。

表 5-2:证明验证 rubric

分数标准
1完整严谨,逻辑步骤清晰
0.5整体逻辑正确,有小错或省略
0根本性逻辑错误 or 关键缺口

表 5-3:三模型分工与训练

模型基座 / 训练推理时
LLM1 生成器用 LLM2 作 reward 训练最终 2-in-1(生成+自评)
LLM2 验证器V3.2-Exp-SFT + RL(format + 与人类标注分数对齐)训练后 不单独部署
LLM3 meta-verifierRL,评估 LLM2 的分析质量仅训练;meta 分 0.85→0.96(文引数据)

5.2 Self-Refinement

模式说明
经典 self-refinement同一 LLM 生成 → 自评 → 修订
DeepSeek 观察单模型自评易 盲目宣称正确
训练时独立 LLM2(+LLM3)提供严格反馈
推理时单一最终生成器 兼做验证(省算力)
迭代论文最多 8 轮;精度随轮次升,未饱和

原文 Figure 12–16:generator/verifier/meta-verifier、自 refine 流程、迭代精度曲线。


6. DeepSeek V3.2

要点:对标 GPT-5 / Gemini 3 Pro 级开源旗舰;架构与 V3.2-Exp 完全相同(MoE + MLA + DSA);差异在 训练与后训练。数学采用 Math V2 管线;强调 工具 / agent;训练芯片叙述为 回归 NVIDIA

6.1 Architecture

内容
架构声明V3.2-Exp 完全一致
效率动机MLA(V2/V3)+ DSA 降长上下文成本
原文 Figure 19DSA 带来的 推理成本节省(截图自 V3.2 报告)

6.2 Reinforcement Learning Updates

表 6-1:R1 vs V3.2 奖励设计

DeepSeek R1DeepSeek V3.2
Format reward❌ 移除
Language consistency
Verifier / outcome✅(数学/代码)✅ rule-based outcome(reasoning/agent)
Length penalty✅(agent 任务)
Generative RM + rubric✅(general 无符号验证任务)
Math V2 管线✅ 并入数据集与奖励

归纳:V3.2 = RLVR(可验证域)+ 生成式 RM(开放域) 混合,而非 R1 式纯 verifier RLVR。

6.3 GRPO Updates

文章先列 Olmo 3 采用的激进 GRPO 改动(DAPO / Dr. GRPO 系),再对比 V3.2 更保守 的补丁。

表 6-2:Olmo 3 的 GRPO 改动

改动来源
Zero gradient signal filteringDAPO
Active sampling(动态采样)DAPO
Token-level lossDAPO
No KL lossDAPO / Dr. GRPO
Clip higherDAPO
Truncated importance samplingYao et al.
No std normalization in advantageDr. GRPO

表 6-3:DeepSeek V3.2 的 GRPO 改动

改动说明
分域 KL 强度保留 KL;数学可 近零 KL,作超参而非全局删除
无偏 KL 估计KL 项用与主 loss 相同的 importance ratio 重加权
Off-policy sequence masking复用 rollout 时,丢弃 负 advantage 且过于 off-policy 的整条序列
MoE routing 固定rollout 记录专家路由,训练时 强制同路由
保留 top-p/k 采样 mask训练时 action space 与采样一致
保留原 GRPO advantage 归一化采用 Dr. GRPO / DAPO 的大改归一化

定位:比 Olmo 3 / DAPO 更接近原始 GRPO,靠 工程稳定性补丁 而非重写目标。

6.4 V3.2-Speciale

V3.2V3.2-Speciale
RL 数据多域仅 reasoning
Length penalty常规定减弱 → 更长输出
行为通用旗舰extended thinking;更高精度、更多 token(推理 scaling)

原文 Figure 17–18、20:benchmark、架构、Speciale 长度-精度权衡。


7. Conclusion

#Takeaway
1V3.2 架构与 V3 以来一脉相承
2主要结构变化 = V3.2-Exp 的 稀疏注意力 DSA
3数学提升 = 吸收 DeepSeekMath V2 自验证
4训练管线含 GRPO 稳定性 等多项更新
5文章 未展开:蒸馏、长上下文训练、工具集成(类 gpt-oss)等

8. Appendix: mHC

时间:2025-12-31 论文。焦点从 attention/FFN 转向 残差路径

表 8-1:Transformer 模块演进

模块演进链
NormalizationLayerNorm → RMSNorm → Dynamic TanH
AttentionGQA → sliding window(SWA)MLAsparse (DSA)
FFNGeLU → SiLU → SwiGLU → MoE
残差恒等残差(ResNet)→ Hyper-Connections (HC)mHC(流形约束、保范数)

mHC:在 HC(多路并行残差流 + 可学习混合)上,将混合矩阵约束在 结构化保范数流形,提升 训练稳定性;有少量开销。

V3.2 部署权重无直接对应;在 V4 与独立论文 mHC arXiv:2512.24880 中落地(本地 mHC 详解 · DeepSeek-V4)。


参考与本地映射

资源链接
原文https://magazine.sebastianraschka.com/p/technical-deepseek
梗概Raschka 要点速读
V3.1DeepSeek-V3.1 梗概
V3.2DeepSeek-V3.2 梗概
DSA 梗概DSA稀疏注意力
DSA 逻辑DSA逻辑详解
RLVRRLVR
演进总览版本演进总览

如何评价 DeepSeek 发布 DSpark?哪些亮点值得关注?

← 返回 V3 §三 MTP · 投机解码专文 · 报告目录

作者酱紫君(GalAster) 原文知乎回答 对照DeepSpec · DSpark 论文 PDF · 投机解码专文


这个说的是草稿模型,和 ds4f 最近更新 Flash 草稿模式不是一回事。

和之前 1000T/s 的 Mimo UltraSpeed 一起讲一下吧,都是基于 DFlash 的优化。

DSpark 成本低,加速普适性高,可以套用到任何模型;而 UltraSpeed 一对一成本极高,但是效果更好。


Speculative Decoding

大模型训练完成的推理部分有很多的工程优化,其中加速比最大的就是投机解码,说白了就是用时间换空间,用 Compute-Bound 的并行验证去替代 Memory-Bound 的串行读取。

Compute / Memory 两层读法 · DFlash vs Eagle答疑:draft 侧 DFlash≈并行 Compute-Bound、Eagle≈串行 Memory-Bound — 开篇整句指 target 并行 verify;draft 范式上 DFlash / Eagle 分别对应两侧。

投机解码需要两个模型,一个是分布为 $P(x)$ 的大模型为 $M_p$,另一个是轻量级分布为 $Q(x)$ 草稿模型为 $M_q$。

接下来会将一次推理分解为草稿阶段(Drafting)和验证阶段(Verification)。

令草稿模型 $M_q$ 串行自回归生成 $K$ 个候选 token $\hat{x}{t+1}, \hat{x}{t+2}, \dots, \hat{x}_{t+K}$。

然后大模型 $M_p$ 一次前向并行校验这 $K$ 个位置,按 rejection sampling 从左到右接受与 $P$ 一致的 prefix;未通过处截断并自 $M_p$ 重采样。输出分布与不用投机时 完全一致(lossless)。

在外置方案中,草稿模型和主模型是两套完全独立的表征空间,经常出现鸡同鸭讲导致的拒绝。这也是为什么 MiMo UltraSpeed 可以打出 1000+ 单 token 射速,而其他架构在缺卡的情况下很难做到。

加速比粗式

$$ S_{\uparrow} = \frac{\bigl(\mathbb{E}[N_{\mathrm{acc}}] + 1\bigr),\tau_p}{K,\tau_q + \tau_p} $$

要把 $S_{\uparrow}$ 做大,需同时抬高 $\mathbb{E}[N_{\mathrm{acc}}]$(draft 猜得准)并压低 $K\tau_q$(draft 别太慢)。DSpark 正是在这两项目标之间的半自回归折中。


DSpark 半自回归草稿:并行主干 vs 顺序头

DSpark 用改进版 DFlash 作 并行主干(约 2–3 层轻量 MoE),一次前向出 $K$ 个位置特征;再用极轻 顺序头 $g_\theta$ 逐位注入块内因果。

$$ E = {e_{t+1}, \ldots, e_{t+K}} = \mathrm{DFlashBackbone}(h_t^p) $$

$$ \tilde{e}{t+i} = g\theta\bigl(e_{t+i},, \mathrm{Embed}(\hat{x}{t+i-1})\bigr), \quad \hat{q}i = \mathrm{softmax}(W{\mathrm{lm}}\tilde{e}{t+i}) $$

为何「2–3 层 MoE 很大」,而「串行 $K$ 次」却很 trivial?

比的不是 并行 vs 串行,而是 每步有多重

第一步:并行主干第二步:顺序头 $\times K$
算什么2–3 层 MoE,一次前向出 $K$ 位 $E$每步:embed 上一位 + 极小 $g_\theta$ + lm 投影 → 采 1 token
参数量级小 Transformer/MoE 整块权重论文口径 $<0.1%$ 主模型
访存HBM 拉 MoE 专家,$K$ 位并行 matmul主张在 寄存器 / on-chip,几乎不碰大块权重
在 $\tau_q$ 里draft 侧 主体算量加性小尾巴

Eagle3 式串行:第 $i$ 步 = 再跑 一整段 draft Transformer → $K$ 次「小模型完整前向」,$\tau_q \propto K$。

DSpark 式串行:第 $i$ 步只在 已算好的 $e_{t+i}$ 上用 $g_\theta$ 注入 $\hat{x}_{t+i-1}$ → $K$ 次 寄存器级微算,不是 $K$ 次 MoE 前向。

一句话:重的只并行 一次(买整块语义 + 第 1 位高接受率);串行只串 轻头(补 DFlash 缺的块内因果)。若第二步也每层跑 MoE,就退化成 Eagle,配不上「半自回归」。

DSpark 半自回归:并行主干一次猜 K 位,顺序头逐位补因果

图示详情


置信度调度与验证截断

DSpark 为 batch 内每个请求选验证长度 $L_j$($1 \le L_j \le K$),在 SLA 下最大化期望接受收益:

$$ \max_{L_1,\ldots,L_B} \sum_{j=1}^{B}\sum_{i=1}^{L_j} \tilde{c}_{t+i}^{(j)} \quad \text{s.t.}\quad \mathrm{Latency}\bigl(\mathrm{BatchConfig}(L_1,\ldots,L_B)\bigr) \le \mathrm{SLA} $$

$\tilde{c}_{t+i}^{(j)}$ 为第 $j$ 条请求、草稿第 $i$ 位的 存活置信度(校准后 $\approx$ 经验接受率)。

截断 / 减少验证长度:对效率与「准确率」的影响

维度影响
输出准确率 / 分布不变。target 仍按 rejection sampling 校验;lossless,不会多接受主模型本不认可的 token。
单请求加速比$L_j$ 缩短 → 本轮少验后缀 → 单用户 加速红利下降;$L_j \to 1$ 时 体感接近 MTP-1(仍走 draft+verify,不是关投机)。
系统吞吐 / 效率高负载或低置信时缩短 $L_j$,少把 target batch 浪费在 大概率被拒的尾巴 上 → 全局吞吐 $\uparrow$,SLA 下更多算力给高 $\tilde{c}$ 前缀。
draft 侧算力几乎不减。并行主干往往仍生成完整 $K$ 块草稿;截断只省 verify 侧
模式drafttarget verify含义
纯原生 decode每步 1 token不走 spec-decode
弱投机(MTP-1)有(常 1 位)每轮 verify 1 位$L_j=1$,仍算投机
DSpark 截断可仍生成 $K$ 位草稿只 verify 前缀 $L_j$ 位沿 $L$ 连续变浅,非关投机

负载自适应:低并发可验 4–6 位;高并发 平滑缩短 $L_j$。

置信度调度:校准、前缀调度、负载自适应截断

图示详情


MTP:一次前向如何融合中间 token

V3/V4 MTP 在位置 $t$ 上:主网预测 $x_{t+1}$;MTP 链再预测 $x_{t+2}, x_{t+3}, \ldots$。每一位都通过 「上一层 hidden + 一个中间 token 的 embed」 融合,不是无依赖并行吐出 K 个 token。

读图MTP 融合 scheme 专文 · 融合 SVG · 串行链深度计算图

融合公式

对 MTP 深度 $k$($k=1$ 时 $h_t^{(0)}$ 来自主网):

$$ h_t^{\prime(k)} = M_k\bigl[,\mathrm{RMSNorm}(h_t^{(k-1)})\ ;\ \mathrm{RMSNorm}(\mathrm{Emb}(x_{t+k})),\bigr], \quad h_t^{(k)} = \mathrm{TRM}k(h_t^{\prime(k)}), \quad P(x{t+k+1}) = \mathrm{softmax}\bigl(\mathrm{OutHead}(h_t^{(k)})\bigr) $$

  • 融的是单个 $x_{t+k}$,不是一次性 $\mathrm{Emb}(x_{t+1:t+k})$ 全塞进去。
  • $\mathrm{TRM}_k$ = 1 层浅 Block;不是重跑主网 L 层。

训练目标:

$$ \mathcal{L}{\mathrm{total}} = \mathcal{L}{\mathrm{main}} + \sum_{k=1}^{M} \lambda_k \mathcal{L}_{\mathrm{MTP}}^{(k)} $$

「一次前向」指什么?

阶段主 TransformerMTPBlock中间 token 从哪来
训练1 次前向 → 全体 $h_t^{(0)}$各 $t$ 上批量跑浅 MTP;不重跑主网teacher forcing 真值 $x_{t+1}, x_{t+2}, \ldots$
推理(MTP 当 draft)每 decode 轮 1 次 verifyMTP 链式 $K$ 小步:融 $\mathrm{Emb}(\hat{x}_{t+k})$ + MTPBlock上一步刚 propose 的 $\hat{x}$

三个不是

  1. 不是 一个 softmax 无依赖同时吐出 $t{+}1,\ldots,t{+}K$(因果链仍在)。
  2. 不是 为 MTP 把 671B 主网跑 $K$ 遍(多的是 K 个 MTP Block)。
  3. 不是 推理时中间 token 永远用真值(draft 时用 已猜 embed)。

与 DSpark 对照:MTP = 主网 1 次 verify + MTPBlock 串 $K$ 步(融 embed);DSpark = 并行 MoE 主干 1 次 + 更轻的 $g_\theta$ 串 $K$ 步。

MTP 中间 token 融合:主网 h + Emb(x_{t+k}) -> MTPBlock_k -> 预测 x_{t+k+1}

图示详情 · 投机对照总览(旧图)

MTP draft 串行链:共享 OutHead,链深度 0/1/2 逐步 Emb 注入

图示详情 · 专文 §1.1 理解对照


DeepSpec draft 训练 vs 主模型 fine-tune

范畴DSpark 线上推理不改 V4 基座权重。**「训练」指 DeepSpec 里 外挂 draft 的蒸馏/SFT;「在线引擎」**指 draft 接入后的调度与 kernel。二者都不是 V3/V4 主模型预训练或 fine-tune

动谁的权重?

说法动谁改变什么
主模型 SFT / RLTarget $M_p$输出分布 $p$,能力边界
DeepSpec 训外挂 draft只动 $M_q$ / DSpark提议分布 $q \to p$,冻结 target
V3 MTP 联合训练骨干 + MTP 头既改 $p$ 也改原生 draft(同 checkpoint)

用新样本「下游特化」算 fine-tune 吗?

  • 只训 draft、target 冻结:应叫 draft 域适配 / 蒸馏,不是主模型 fine-tune。lossless 校验保证最终输出仍服从 固定 $p$——不会让主模型变聪明,只可能让 $q_i \approx p_i$ 在新场景上更准 → $\mathbb{E}[N_{\mathrm{acc}}]$ $\uparrow$ → 更快
  • 要改答案质量 / 领域能力:必须 SFT 或 RL 动 target(或预训练期 MTP 联合更新)。可与「为 frozen target 训 domain draft」并行两条线,但 不能互相替代
离线 SFT target 与 draft 蒸馏并行;在线 draft+verify 加速

图示详情

一句话:外挂 draft 用新数据训 = 给 draft 做微调不更新主模型;在 lossless 前提下 只提速、不升智。加速来自 推理投机栈,不来自 draft 训练本身。


与专文对照

主题专文章节
Compute / Memory;DFlash vs Eagle答疑 §1–§7
投机循环、lossless§1
MTP vs 外挂 draft§2
MTP 中间 token 融合MTP 融合 scheme · SVG
Eagle / DFlash / DSpark 范式§4
机制细节§5–§6
线上 MTP-1 基线§8、§10

Thinking with Visual Primitives — 论文要点

← 演进总览 §3.8 · ← 中文导读 · ← V4 梗概 PDFVisual Primitives 原文 PDF · DeepSeek-AI + 北大 + 清华 · 2026


一句话

DeepSeek-V4-Flash 语言骨干上,把 点 / 框 等视觉原语当作 CoT 的「最小思维单元」交错写入推理链,配合 DeepSeek-ViT → 3×3 patch 压缩 → CSA 4× KV 压缩,800×800 输入在 KV cache 中仅保留约 90 条 视觉 entry,却在多项空间推理 benchmark 上对标 GPT-5.4 / Gemini-3-Flash 等前沿 MLLM。


1. 问题:Reference Gap

瓶颈说明
Perception Gap「Thinking with Images」靠高分辨率裁剪补感知
Reference Gap自然语言难以精确指向复杂空间布局 → 多步空间推理易逻辑崩溃
本文visual primitives(bbox / point)作无歧义空间指针,与文本 CoT 交错

2. 架构:V4-Flash + ViT 双模块

LLaVA 式:DeepSeek-ViT 编码图像 → 与文本 token 交错 → V4-Flash(284B / 13B act MoE)生成带 visual primitives 的回复。

Figure 2 — 架构与训练管线

Figure 2 — V4-Flash + ViT 架构与 Pretrain → SFT → RL → RFT → 蒸馏 训练管线

Figure 2 | Model architecture and training pipeline(论文原图截取)。

模块要点
DeepSeek-ViT自研 ViT;14×14 patch;任意分辨率
3×3 spatial compressionViT 输出每 9 个 patch token 通道维合并为 1
V4-Flash LLM继承 CSA:视觉 token 在 KV cache 再 4× 压缩
训练阶段Pretrain(输出 primitives)→ 分域 SFT/RL → Unified RFT → On-Policy Distillation

数值示例

阶段Token / entry 数
ViT patch tokens2,916
3×3 压缩后进 LLM324
CSA 后进 KV cache81
总压缩比7,056×(像素 → KV entry)

与纯文本 V4 线的衔接:同一 CSA 稀疏压缩 机制,此处用于 视觉 KV 而非仅长文本 context。

直接打开 Figure 2


3. Visual Primitives 定义

原语用途
Bounding box物体位置与尺度;标注相对确定
Point轨迹、拓扑推理等抽象引用

Pretrain 目标:模型能在 CoT 中 生成 上述原语(De-Tokenizer 解码为可视化 marker)。

Figure 3 — Cold-start 计数数据示例

Figure 3 — 粗粒度与细粒度计数 cold-start 数据

Figure 3 | Illustrative cold-start data for coarse-grained and fine-grained counting.

要点说明
数据形态图像 + 语言指令 + 框/点 标注作为监督
粗 vs 细粗粒度全图计数;细粒度带属性/空间约束 + hard negative
动机公开 COCO / Pixmo 规模与多样性不足 → 大规模 web box grounding(97k+ 源)

直接打开 Figure 3


4. Token 效率

Figure 1 — 800×800 输入下各模型 token 消耗与 benchmark 均分

Figure 1 | (a) Token consumption for 800×800 image. (b) Average score on selected benchmarks.

子图解读
(a) Token 数800×800 输入:本文约 361 tokens(KV 约 90 entries);Gemini-3-Flash ~1100;Claude-Sonnet-4.6 ~870
(b) 均分7 项 benchmark 子集均分 77.2%,高于 GPT-5.4(69.7%)、Gemini-3-Flash(65.3%)等
结论极低视觉 KV 占用 下仍保持 competitive 空间推理——压缩链(ViT + CSA)是核心 infra 叙事

直接打开 Figure 1


5. Table 1 — 与前沿模型对比

Table 1 — 与 Gemini / GPT / Claude / Gemma / Qwen3-VL 对比

Table 1 | Comparison with frontier models(API 统一 prompt 评测;bold=最佳,underline=次佳)。

类别代表 benchmark本文亮点
CountingCountQA、Pixmo-Count、DS_Finegrained_Counting细粒度计数 88.7 EM(DS_Finegrained)
Spatial VQAMIHBench、SpatialMQA、CV-BenchSpatialMQA 69.4;MIHBench 85.3
TopologicalDS_Maze_Navigation、DS_Path_Tracing迷宫 66.9、路径追踪 56.7,大幅领先 Qwen3-VL 等

论文强调:表内分数仅覆盖与 visual primitives 研究相关的评测维度,不代表模型全能。

直接打开 Table 1


6. 与 DeepSeek 主线关系

维度衔接
基座V4-Flash(284B/13B)— 见 演进总览 §3.7
Attention / KV复用 CSA 4:1 压缩 → 视觉 KV 81 entries 量级
MoE与 V4 Hash MoE / FP4 同代推理栈
定位V4 主线之后的 多模态支线:不改 LLM 稀疏注意力叙事,增加 ViT + 原语 CoT

7. 图/表索引

重新截取:python3 scripts/figures/papers/extract_visual_primitives.py

开发索引

← 中文导读 · ← 演进总览

读者请从 版本演进总览 进入;本页仅供维护源路径与构建。


源稿与成书

书中章节
版本演进总览01-总览/01-版本演进总览.md
docs/ 下其余 versions/reports/build_book.pyCHAPTER_MAP
python3 scripts/svg/check_svgs.py # 改 SVG 后须 exit 0
python3 《ds-技术报告》/build_book.py
全量路径表(编辑时查阅)

子项目

项目路径
EngramEngram 系列
RL 笔记RL / 后训练笔记
DSA / Index ShareDeepSeek DSA 与 Index Share 系列

报告与版本

文档路径
版本梗概版本梗概索引
报告目录技术报告索引
算法 / infra / MoE 三线算法线导读 · 基础设施线导读 · MoE 线导读
补充材料material 镜像

DeepSeek 文档系列结构审查

← 演进总览 · ← 开发索引 · 《ds-技术报告》 · 书中总览

本报告对 deepseek-tech-notes 仓库文档系列做结构、双向引用、章节导航、概念去重、SVG 复用审查,并记录已落地修复与后续维护命令。


1. 审查范围


2. 入口与阅读顺序

唯一主入口:演进总览 → 按 §3 版本节 / §7 专题表 / 三线导读分叉。

全书线性顺序build_book.pyREADING_ORDER 定义;append_chapter_nav() 在每章文末追加「上一章 / 下一章」表。2026-06-27 已确认 FP8 专文在链中:

… → 04-序列均衡损失 → 06-V3-FP8动态量化 → 03-后训练 RLVR → …

维护:改 READING_ORDER 后须重跑 python3 《ds-技术报告》/build_book.py,否则书中导航会跳过新章(本次已手工校正 04-序列均衡损失 / 06-V3-FP8 / 01-RLVR 三处页脚)。


3. 双向引用

约定:每篇正文首段 blockquote← 演进总览 §x.x← 系列目录,并链到书中对应章。

3.1 已修复 / 已对齐

文档状态
../rl/README.mdblockquote → 演进总览 §3.4
../rl/optimize.md补标题 + blockquote → RLVR / §3.4 / 书中 GRPO 章
../dsa/README.mdblockquote 增 §3.6 V3.2
../dsa/dsa-logic.md · Index Share 逻辑详解顶栏改为 blockquote + §3.6 锚点
投机解码自测加速比顶栏合并为 blockquote
Engram 系列导读hr 下 blockquote → §7 专题关系
答疑索引blockquote → 梗概索引 / 演进总览
v1-technical-report.zh.md · deepseek-llm-v1-highlights.mdstub 页补 §3.1 回链

3.2 反向引用

演进总览 §3 各版本节已链到对应梗概 / 专文(含 FP8 动态量化 §3.3)。§7 专题表链 Engram / R1 管线等。

建议:§7 可增补 DSA 系列、ESS 概念Index Share 一行,与三线导读 §5 反向表完全对称。


4. 概念与文档去重

概念唯一主文档摘要嵌入答疑
FP8 训练量化V3 FP8 动态量化v3.md §附 FP8 同图同链fp8-partial-sum-drift.mdfp8-mma-term.md
GRPO vs PPOrlvr.md#grpo演进总览 §3.4 同图
MTP / 投机v3.md §三spec-decode 报告 复用 mtp-speculative.svg
DSA 管线DSA 逻辑详解梗概 / Raschka 链同一 dsa-pipeline.svg
ESS 双 CacheESS Latent offloadDSA 系列 / Lightning Indexer 同一路径h2d-d2h-pcie-transfer.md
V1 译文已并入 DeepSeek-LLM V1stub 页仅重定向

未发现:同一概念两篇并列「概览」;deepseek-v1-to-v3-lineage.md 与演进总览分工明确(前者 V1→V3 纵切,后者全系列)。


5. SVG 规范与 canonical 路径

生成器:scripts/svg/gen_*.pydsa/scripts/svg/gen_dsa_svgs.py;校验:scripts/svg/check_svgs.py(含 Markdown <img> 嵌入与布局启发式)。

5.1 复用表

SVGcanonical 源复用位置
dsa-pipeline.svg../dsa/diagrams/dsa-pipeline.svgdsa 系列、梗概、Raschka
ess-dual-cache.svg../dsa/diagrams/ess-dual-cache.svgESS 概念、Lightning Indexer、dsa/README(勿再用 docs/figures/ess/ess-dual-cache.svg
index-share-fffs.svg../dsa/diagrams/index-share-fffs.svgIndex Share 逻辑
v3-moe-vs-v2.svgdocs/figures/v3/(与 diagrams/ 同步)v3 梗概、演进总览 §3.3
grpo-vs-ppo.svgdocs/figures/rl/rlvr、演进总览 §3.4
mla-mode-switch.svgdocs/figures/v3/v3-1、演进总览 §3.5
mtp-speculative.svgdocs/figures/v3/v3、spec-decode 报告
v3-fp8-dynamic-quant.svgdocs/figures/v3/FP8 专文、v3 摘要
deepseek-version-lineage.svgdiagrams/演进总览
mla-forward-flow.svgdocs/figures/mla/(生成器 gen_mla_forward_flow_svg.pyMLA 专文、演进总览 §3.2

build_book.pyASSET_MULTI_DESTess-dual-cache.svg单一源复制到书中 DSA 卷与 ESS 卷。

5.2 校验状态

说明
mla-forward-flow.svg已重绘;自 gen_mla_forward_flow_svg.py 生成;LEGACY_SKIP_LAYOUT 已清空
Engram README官方 badge 图为外链 SVG,不计入本地 check

5.3 维护命令

cd <deepseek-tech-notes 仓库根>
python3 scripts/svg/gen_deepseek_svgs.py # 或单独 gen_*.py
python3 dsa/scripts/svg/gen_dsa_svgs.py
python3 scripts/svg/check_svgs.py # 须 exit 0
python3 《ds-技术报告》/build_book.py

6. 答疑结构

  • 6 篇正文均有 文首回父节 blockquote。
  • qa/README.md 索引表链到演进总览对应 § 与父文档锚点。
  • FP8:partial-sum = 机制;mma-term = 名词,索引表已标注避免误读为重复专文。

7. 遗留 / 低优先级

建议
00-V1-技术报告译文.md书中 stub,与源 v1-technical-report.zh.md 一致;可保留或从 CHAPTER_MAP 移除
演进总览 §7补 DSA / ESS / Index Share 反向一行
docs/figures/ess/ess-dual-cache.svg生成器仍同步副本;Markdown 已统一引用 ../dsa/diagrams/,副本仅作 build 冗余,可日后从 gen 脚本去掉

8. 结论

  • 入口:演进总览 + 成书 READING_ORDER 已形成层层递进;FP8 章已入链。
  • 双向引用:系列主文档顶栏 blockquote 已对齐;stub 页已补回链。
  • 概念:一概念一主文档;摘要 vs 专文 vs 答疑层级清晰;SVG 按上表 canonical 复用。
  • SVGmla-forward-flow 已接生成器;改图后须跑 check_svgs.py + build_book.py;CI 门禁见 scripts/doc_series_gate.sh

版本 / MoE 答疑

← 版本梗概索引 · ← 演进总览 · 书中答疑

主题来源文件
V1:$C=M\cdot D$ vs $C=6ND$演进总览 §3.1 V1 · V1 §3为何 DeepSeek 用 $C=M\cdot D$ 而非 $C=6ND$?
MoE centroid vs gate-weightDeepSeekMoE §前向公式MoE 路由:gate-weight 还是 expert centroid?
Fine-grained vs GShard 粗专家DeepSeekMoE §优化逻辑 (b)Fine-grained Expert Segmentation:为何优于 GShard 式粗专家?
Expert Parallel(EP)与 gather/scatterHash MoE §1.3 · DeepSeekMoE §推理 infraMoE 推理:Expert Parallel与 gather/scatter
Hash MoE 为何只改浅层Hash MoE §1.2 · EP 答疑 §4Hash MoE 为何只改浅层、深层仍用 centroid 路由?
V4 SWA(滑动窗口)CSA/HCA 一句话 · KV Layout §StateV4 里的 SWA是什么?
V4 Indexer KVCSA/HCA §4 · Lightning IndexerV4 里的 Indexer KV 是什么?
V4 Tail bufferCSA/HCA §4 · KV Layout §StateV4 里的 Tail buffer 是什么?
V4 分池 / 块对齐 / 尾缓冲KV Layout §为何不够V4 为何要分池?块对齐与尾缓冲怎么配合?
H2D / D2H、PCIe prefetchESS 论文梗概 §Fig.6&7H2D / D2H 是什么?
FP8 partial sum 漂移FP8 专文 §为何需要动态量化FP8 动态量化里的 partial sum 漂移
投机解码 lossless / 接受路径投机解码专文 §1.3投机解码:为何接受率是 $\min$、修正分布是 $\max$
Compute-Bound vs Memory-Bound;DFlash / Eagle专文 §1.1 · §4 · 酱紫君 §Speculative Decoding投机解码:Compute-Bound vs Memory-Bound — DFlash / Eagle 如何对应?
SM(Streaming Multiprocessor)专文 §1.1 · Compute vs Memory §2名词解释:SM
MTP 中间 token 融合专文 §2 · §1.1 链深度MTP 融合 scheme · MTP draft 链深度图
Birkhoff 多面体mHC §3.2 · §3 双随机流形名词解释:Birkhoff 多面体
MMA / WGMMA 名词FP8 专文 一句话 · partial sum 答疑名词解释:MMA

H2D / D2H 是什么?

← 返回 ESS 论文梗概 §Figure 6&7 · ← ESS 梗概 §Fig.3 / PD 时序 · 答疑目录


1. 定义

缩写英文方向典型含义
H2DHost-to-DeviceCPU 主机内存 → GPU 显存把数据 搬到 GPU 上算
D2HDevice-to-HostGPU 显存 → CPU 主机内存把结果或 cache 写回 CPU

在 CUDA 语境里,二者常通过 PCIe(ESS 论文为 PCIe 5.0)或 NVLink 完成;API 层常见 cudaMemcpyAsync(..., cudaMemcpyHostToDevice)(H2D)与 cudaMemcpyDeviceToHost(D2H)。


2. 在 ESS / V3.2 里指什么

ESS 把 Latent-Cache 大头放在 CPU DRAM,GPU 只留 Sparse Memory Pool(LRU 热子集)。每个 decode step:

  1. Indexer(GPU)选出本步需要的 top-$K$ latent index
  2. H2D(prefetch):Cache miss 的 latent entry(约 656B/条)从 CPU 拉进 GPU 热池;
  3. Core MLA Attention 在 GPU 上算;
  4. D2H(写回):本步新生成的 latent 写回 CPU 侧 Total Memory Pool。

因此 Fig.3 时间线上的 H2D prefetchD2H 写回 都是 Latent-Cache 在 CPU↔GPU 间的搬运Indexer-Cache 不 offload,也不走这条搬运链。


3. 为何 ESS 论文反复强调 H2D

问题说明
小块、分散每步多达 $K{=}2048$ 次、每次仅 656B → 原生 cudaMemcpyAsync H2D 有效带宽极低
与算力串行SGLang 默认:Indexer → H2D → Attention 全串行 → GPU 在等传输时空转
优化手段FlashTrans + UVA 拉高 H2D/D2H 带宽;DA/DBA OverlapAttention 与 H2D 并行(如 Attn0 $\parallel$ H2D)

论文报告优化后 H2D 约 0.79 → 37 GB/s,D2H 约 0.23 → 43 GB/s(Table/§3 工程数据,见 梗概 §三大工程模块)。


4. 和「Overlap」的关系

无 Overlap(默认)

Indexer 完成 → H2D 完成 → Attention 开始(全串行)

图示详情

DA Overlap

  • 把 Attention 拆成 Attn0(只用 GPU 里已有的 latent)和 Attn1(等 prefetch 完成);
  • Attn0 与 H2D 同时进行 → 用计算掩盖一部分传输延迟。

DBA 再在 batch 维切 Indexer,长上下文下算力更足,进一步掩盖 H2D。


5. 相关概念

概念与 H2D/D2H 关系
Prefetch在需要算 Attention 之前 提前发起 H2D,把 miss 的 latent 拉上来
UVA(Unified Virtual Addressing)GPU 内核直接访问 pinned 的 CPU 地址,减少小块 Memcpy 开销
PCIe 带宽H2D/D2H 的物理上限;ESS 针对「大量小传输」做软件栈优化

6. 延伸阅读

论文arXiv:2512.10576

为何 DeepSeek 用 $C=M\cdot D$ 而非 $C=6ND$?

← 返回演进总览 §3.1 V1 · ← V1 §3 Scaling Laws · 答疑目录

来源:DeepSeek-LLM arXiv:2401.02954 §3.2 · Table 3 / Formula 2–4


1. 一句话

不是把 Chinchilla 的 $6$ 随便改掉,而是:$6N$ 只是「每 token 算力」的粗近似;DeepSeek 改用实测的 $M$(non-embedding FLOPs/token),于是总算力按定义写成 $C=M\cdot D$——IsoFLOP 拟合(Figure 4a)才准。


2. 传统写法:$C \approx 6ND$

Kaplan / Chinchilla 系 scaling law 里,训练总算力常写成:

$$ C \approx 6ND $$

符号含义
$N$模型规模(参数量,有两种取法,见下)
$D$训练 token 数
6一次 forward + backward 相对 forward 的 FLOPs 倍数($\approx 1+2=3$ 再乘 matmul 计数约定)

$N$ 的两种常见定义

符号定义文献
$N_1$non-embedding 参数量Kaplan et al.
$N_2$含 embedding / lm_head 的全参Hoffmann et al.(Chinchilla)

于是「每 token 算力」可粗写为 $6N_1$$6N_2$,再乘 $D$ 得 $C$。


3. $6N$ 哪里不准?

V1 论文指出:$6N_1$ 与 $6N_2$ 都不是真实的 per-token FLOPs,误差在小模型上尤其大:

近似问题
$6N_1$只数 FFN/线性层 matmul,不含 attention 的 $O(L^2)$ 项 → 低估算力
$6N_2$在 $6N_1$ 基础上 加上 $6,n_{\mathrm{vocab}},d$(vocab 投影)→ 对能力贡献小却 高估算力;仍 不含 attention

DeepSeek 给出三者闭式(Formula 2,$l_{\mathrm{seq}}$ = 序列长度):

$$ \begin{aligned} 6N_1 &= 72 \cdot n_{\mathrm{layer}} \cdot d_{\mathrm{model}}^2 \ 6N_2 &= 72 \cdot n_{\mathrm{layer}} \cdot d_{\mathrm{model}}^2 + 6 \cdot n_{\mathrm{vocab}} \cdot d_{\mathrm{model}} \ M &= 72 \cdot n_{\mathrm{layer}} \cdot d_{\mathrm{model}}^2 + 12 \cdot n_{\mathrm{layer}} \cdot d_{\mathrm{model}} \cdot l_{\mathrm{seq}} \end{aligned} $$

$M$ = non-embedding FLOPs/token:计 attention不计 vocab 投影——作为「模型有多重、每 token 算多狠」的度量。


4. Table 3:小模型上误差可达 50%

Table 3 — 6N1、6N2 相对 M 的偏差

直接打开 Table 3

$n_{\mathrm{layer}}$$d_{\mathrm{model}}$$6N_1/M$$6N_2/M$
127680.431.32
2410240.691.14
3240960.971.01
  • $6N_1/M < 1$(12 层仅 0.43):缺 attention → 严重低估 $M$
  • $6N_2/M > 1$(12 层 1.32):多计 vocab → 高估 $M$
  • 模型变大后趋近 1,但 IsoFLOP 扫小模型时若仍用 $6N$,会把「同一 $C$ 下的不同 $(M,D)$ 分配」搞错 → U 形曲线(Figure 4a)拟合被污染

因此 Formula 4 / IsoFLOP 统一用 $M$,不用 $6N_1$/$6N_2$。


5. 改成 $C = M \cdot D$ 在算什么?

这是 定义,不是新物理定律:

$$ \boxed{C = M \cdot D} $$

含义
$M$每个训练 token 的 non-embedding forward FLOPs(含 attention,不含 embedding 矩阵乘)
$D$训练 token 总数
$C$总训练算力(FLOPs)

与 $6ND$ 的关系:若你坚持用参数量 $N$,只能选 $N_1$ 或 $N_2$,再乘 6近似 $M$;DeepSeek 选择 直接测 $M$,避免 $N_1$/$N_2$ 双轨与 attention 缺失。

训练时仍用 3× forward 做 backward——变的只是 用什么标度刻画「模型规模」:从 参数个数 $N$ 换成 每 token 实际 FLOPs $M$


6. 和 Figure 4a / IsoFLOP 的关系

IsoFLOP 实验:固定总算力 $C$,扫约 10 种 $(M,D)$ 满足 $M\cdot D=C$,找 validation loss 谷底

  • 横轴必须是 真实的 $M$(FLOPs/token),不能是 $6N_1$ 或 $6N_2$
  • 若用 $6N$ 当横轴,小模型点会 系统性偏移,谷底位置错 → $M_{\mathrm{opt}}(C)$、$D_{\mathrm{opt}}(C)$(Formula 4)不可信

Figure 4a 的 U 形曲线因此建立在 $C=M\cdot D$ 之上;演进总览 §3.1 所贴即此图。


7. 和数据质量结论的关系

论文在 Formula 4 成立(即用 $M$) 之后还发现:不同语料拟合的 $M_{\mathrm{opt}}\propto C^a$、$D_{\mathrm{opt}}\propto C^b$ 指数 $a,b$ 不同——数据质量越高,$a$ 越大 → 更该扩模型而非堆数据

这是 第二层结论,依赖第一层「用 $M$ 而不是 $6N$ 把 $C$ 算准」。


8. 常见误解

误解正解
DeepSeek 否定了 Chinchilla仍做 IsoFLOP;改的是 模型规模的度量($M$ vs $6N$)
$C=MD$ 意味着 7B/67B 必须同 $D$$C=M\cdot D$ 是乘法 定义;产品统一 2T 是 工程选择,见 Scaling-Law 选择性应用
6 这个常数错了6 来自 fwd+bwd 计数;问题在于 $N$ 不能代表 per-token FLOPs(缺 attention / 多 vocab)

9. 延伸阅读

文档内容
V1 §3.2 最优 model/data ScalingFormula 2–4 原文与 Figure 4
Scaling 答疑$M$ 推导、Formula 1/4 数值、4B 实战
Scaling-Law 选择性应用Figure 3/4/5 分工;2T 产品 vs IsoFLOP 谷底
产品训练与 Scaling Law7B/67B 同训 2T 与 compute-optimal 的区别

版本 / MoE 答疑

← 版本梗概索引 · ← 演进总览 · 书中答疑

主题来源文件
V1:$C=M\cdot D$ vs $C=6ND$演进总览 §3.1 V1 · V1 §3为何 DeepSeek 用 $C=M\cdot D$ 而非 $C=6ND$?
MoE centroid vs gate-weightDeepSeekMoE §前向公式MoE 路由:gate-weight 还是 expert centroid?
Fine-grained vs GShard 粗专家DeepSeekMoE §优化逻辑 (b)Fine-grained Expert Segmentation:为何优于 GShard 式粗专家?
Expert Parallel(EP)与 gather/scatterHash MoE §1.3 · DeepSeekMoE §推理 infraMoE 推理:Expert Parallel与 gather/scatter
Hash MoE 为何只改浅层Hash MoE §1.2 · EP 答疑 §4Hash MoE 为何只改浅层、深层仍用 centroid 路由?
V4 SWA(滑动窗口)CSA/HCA 一句话 · KV Layout §StateV4 里的 SWA是什么?
V4 Indexer KVCSA/HCA §4 · Lightning IndexerV4 里的 Indexer KV 是什么?
V4 Tail bufferCSA/HCA §4 · KV Layout §StateV4 里的 Tail buffer 是什么?
V4 分池 / 块对齐 / 尾缓冲KV Layout §为何不够V4 为何要分池?块对齐与尾缓冲怎么配合?
H2D / D2H、PCIe prefetchESS 论文梗概 §Fig.6&7H2D / D2H 是什么?
FP8 partial sum 漂移FP8 专文 §为何需要动态量化FP8 动态量化里的 partial sum 漂移
投机解码 lossless / 接受路径投机解码专文 §1.3投机解码:为何接受率是 $\min$、修正分布是 $\max$
Compute-Bound vs Memory-Bound;DFlash / Eagle专文 §1.1 · §4 · 酱紫君 §Speculative Decoding投机解码:Compute-Bound vs Memory-Bound — DFlash / Eagle 如何对应?
SM(Streaming Multiprocessor)专文 §1.1 · Compute vs Memory §2名词解释:SM
MTP 中间 token 融合专文 §2 · §1.1 链深度MTP 融合 scheme · MTP draft 链深度图
Birkhoff 多面体mHC §3.2 · §3 双随机流形名词解释:Birkhoff 多面体
MMA / WGMMA 名词FP8 专文 一句话 · partial sum 答疑名词解释:MMA

名词解释:MMA

← 返回 FP8 专文 · partial sum 漂移 · 答疑目录


MMA 是什么

MMA = Matrix Multiply-Accumulate(矩阵乘加)。

一次 MMA 在硬件上做:

$$ D \leftarrow A \times B + D $$

即:取两块小矩阵(或向量块)相乘,结果 加进 累加器 $D$(不是每次写新内存)。大矩阵乘 GEMM 在 GPU 上就是 成千上万次 MMA 拼出来 的。


在 DeepSeek-V3 FP8 语境里指什么

含义
MMATensor Core 上的 单次/单步 低精度乘加(V3 训练用 FP8
GEMM整层线性层 $Y=XW$ 的 完整矩阵乘(内部 = 多轮 MMA)
WGMMAWarp-Group MMA;Hopper(H100 等)上 一组 warp 协作 的一条 MMA 指令流,V3 论文 Figure 7(b) 标成 WGMMA 1–4
[partial sum某一输出元素在 整条 MMA 链还没加完 时的中间累加和](fp8-partial-sum-drift.md)

V3 文档里「每 $N_c{=}128$ 次 MMA」= 每做满 128 个 MMA 粒度的乘加贡献,就把 Tensor Core 里低精度 partial sum 提到 CUDA Core FP32 再累,防止漂移。


和 MHA / MQA 不要混

缩写领域含义
MMAGPU 算子 / FP8 训练Matrix Multiply-Accumulate
MHA注意力Multi-Head Attention
MQA注意力Multi-Query Attention

V3.1 Prefill MHA / Decode MQA 是 MLA 模式切换,与 FP8 的 MMA 指令 无关。


硬件落点

硬件MMA 相关职责
Tensor Core执行 FP8 MMA / WGMMA;块内低精度乘加、短链 partial sum
CUDA CoreMMA 结果 反量化(乘 $s_x s_w$);partial sum FP32 续累加

一句话

MMA = GPU Tensor Core 的 矩阵乘加原语;V3 FP8 训练里的「MMA 漂移 / 每 128 MMA 提升 FP32」都是在说 这条乘加累加链 的数值行为,不是注意力里的 MHA/MQA。

FP8 动态量化里的 partial sum 漂移

← 返回 FP8 专文 §为何需要动态量化 · 答疑目录


1. partial sum 是什么

矩阵乘 $Y = X W$ 里,每一个输出标量都是一条内积:

$$ Y_{i,j} = \sum_{k=1}^{K} X_{i,k}, W_{k,j} $$

硬件做 GEMM 时不会一次性算完整个 $K$,而是按 MMA(Matrix Multiply-Accumulate) 分块:每来一小块 $(X_{i,k}, W_{k,j})$ 就 乘加进同一个累加寄存器。这个 尚未算完的中间和,就是 partial sum(部分和)。

DeepSeek-V3 在 FP8 Tensor Core 上跑这些 MMA;Figure 7(b) 的 WGMMA 1–4 就是在同一条输出维度上 连续收 partial sum


2. 「漂移」指什么

漂移(drift) = partial sum 相对 理想 FP32/BF16 内积 的偏差,随着 MMA 次数变多 单调变大,最后写回的 $Y_{i,j}$ 系统性偏离真值。

根因不是「FP8 乘一次就不准」这么简单,而是 低精度累加链太长

环节发生了什么
每次 MMAFP8(或 TC 内更低精 acc)乘加 → 舍入一次
重复 $K$ 次误差 累积,不是随机抵消
$K$ 很大V3 的 hidden / expert 宽度 $\gg 128$,一条内积要 成千上万次 MMA

直觉:像用 短尺子 一段段量长跑,每段都有四舍五入,段数越多,终点离真实长度越远。


3. 和 细粒度 scale 的分工

专文 Figure 7 两路逻辑 解决不同环节的问题

机制作用阶段针对误差V3 实现要点
(a) Fine-grained scale乘之前 量化激活离群导致 FP8 表示失真激活/权重按 $N_c{=}128$ 切块;每块算 dynamic scale $s_x, s_w$(由块内 absmax 定标);块内 round 到 FP8 后送 Tensor Core MMACUDA Core 对 MMA 输出乘 $s_x \cdot s_w$ 反量化
(b) FP32 promotion乘之后 累加MMA 链上 partial sum 漂移WGMMA 在 TC 内用 低精度 acc 沿 $K$ 维收 partial sum;每 128 个 MMA 元素 flush 到 CUDA Core FP32 寄存器 续加;TC acc 清零 再收下一段;整条内积 = 多段 FP32 部分和之和

(a) 保证送进 MMA 的 FP8 块「尽量满量程」;(b) 保证 加起来的过程 不会因为 TC 低精度 acc 太长而漂。

实现上两路在同一次 GEMM 内核里串联:先 (a) 按块量化并发起 MMA,MMA 流水里嵌入 (b) 的 128 步 promotion反量化与 FP32 累加都在 CUDA Core 完成Tensor Core 只负责 FP8 乘加吞吐

二者 都要;只做 (a) 仍可能在宽矩阵上累加崩,只做 (b) 仍可能被 outlier 块量化拖垮。


4. 数学上误差怎么叠

设第 $t$ 步 MMA 的真实贡献为 $p_t$,低精度累加器得到 $\hat{s}_t$:

$$ \hat{s}t = \mathrm{round}\bigl(\hat{s}{t-1} + \mathrm{round}(p_t)\bigr) $$

理想 FP32 累加 $s_t = s_{t-1} + p_t$。每步引入 $\epsilon_t = \hat{s}_t - s_t$,一般 有偏、可累积。当 $t$ 从 1 到 $K$:

$$ \hat{s}K - s_K \approx \sum{t=1}^{K} \epsilon_t $$

$K$ 越大(MoE FFN、宽 MLA 投影),$|\hat{s}_K - s_K|$ 越容易 肉眼影响 loss。这就是表格里「大量 FP8 MMA 后 partial sum 漂移」的含义。


5. V3 对策:每 $N_c = 128$ 提升到 FP32

Figure 7(b) Increasing accumulation precision

  1. Tensor Core 内用 低精度 acc 收 partial sum(快);
  2. 每累计 $N_c = 128$ 个 MMA 元素,把当前 partial flush 到 CUDA Core 的 FP32 寄存器,以 FP32 续加;
  3. TC 侧 acc 清零,再收下一段 128 个 MMA。

效果:低精度链最长只有 128 步,误差被 周期性「归零到 FP32」;总内积仍由多段 FP32 和组成,漂移上界 与「全程 TC 低精度累加 $K$ 步」相比大幅缩小。

对应专文一句:算在 TC、稳在 CUDA FP32


6. 和推理 FP8 的区别

训练(本文 / V3 Figure 7)推理 FP8(如 draft benchmark)
目标671B 可收敛 预训练延迟 / 吞吐
partial sum显式 FP32 promotion 内核依引擎实现,未必同策略
块 scale训练侧 dynamic $s_x, s_w$部署 calibrate / 静态 scale 常见

推理里「FP8 更快」不自动等于训练里同一套 anti-drift;读 partial sum 漂移应 锚定 V3 训练 GEMM


7. 一句话

Partial sum 漂移 = FP8 MMA 在 Tensor Core 里 太长链低精度累加 导致的系统性数值偏差;V3 用 每 128 MMA 提升到 FP32 截断累加链,与块级 dynamic scale 互补,共同把 FP8 训练做稳。

Hash MoE 为何只改浅层、深层仍用 centroid 路由?

← 返回 Hash MoE §1.2 · EP 答疑 §4 · centroid vs gate-weight §4.4 · 答疑目录


一句话

Hash 路由用确定性函数换 零 router GEMM + 静态负载;适合 浅层偏通用、对语义特化要求低 的 FFN。深层仍要 按 token 语义选 expert($u^\top e_i$ + aux-loss-free),才能保留 V3 系 细粒度 specialization动态均衡——全栈 Hash 省算力更多,但 表达能力与 EP 负载风险 都不划算,所以 V4 选 浅 Hash + 深 centroid 的混合栈。


1. 两种路由各自擅长什么

维度Hash(浅层)Centroid / aux-loss-free(深层)
Expert idtoken / 位置 hash → 近似均匀$u^\top e_i$ 语义亲和度 + top-$K_r$
Router 算力 对 256 expert 的打分 GEMM每层每 token 一次 routed 打分
负载均衡hash 设计 静态近似均匀动态 bias $b_i$ + $L_{\mathrm{Bal}}$
特化能力 — id 与「内容类型」解耦 — expert 向量 $e_i$ 学「原型 / 簇」
典型层位前几层 MoE / 原 dense FFN中深层 主力 MoE 层

2. 为何浅层可以 Hash

2.1 浅层 FFN 更偏「通用变换」

靠近 embedding 的 FFN 多在 升维 / 非线性 / 局部混合,尚未形成强 任务 / 领域 分化。此时用 hash 把 token 伪随机但均匀 摊到 expert 上,等价于 加宽 FFN 容量,对 语义匹配 依赖较小。

2.2 省下来的主要是 router 与参数

V3 每层 MoE 要对 全体 routed expert 算亲和度(256 维量级),再 top-8。浅层 层数少但 token 吞吐相同,若前几层原是 dense FFN 或 MoE,改成 Hash MoE 可以:

  • 去掉 $e_i$、router GEMM 与部分 aux 路径;
  • 仍走 EP + sharedid 确定后引擎与 V3 同族

动机表里写的 「省路由算力与参数;浅层更偏通用变换」 即此。

2.3 静态 hash 够用的前提

Hash 层 不随 batch 调 $b_i$。浅层 expert 负载若天然较匀、且 不承担精细语义分工,静态 hash 的 近似均匀 通常够用;这也是只放浅层的 前提条件


3. 为何深层不动

3.1 深层需要「按内容选 expert」

越靠后,hidden 越 抽象、任务相关。DeepSeekMoE 的 centroid 叙事是:token 与 expert 原型 $e_i$ 匹配(centroid 答疑)。数学 / 代码 / 多语言等 分化 主要在 中深层 MoE 体现;改成 hash 等于 强行去掉内容条件路由,特化能力损失大。

3.2 动态均衡在深层更关键

深层 MoE 激活参数占比高,EP 下 热点 expert 代价更大(EP 答疑 §3)。V3 的 $b_i$ + $L_{\mathrm{Bal}}$ 针对 batch / 序列内 动态调节;hash 无法 在「某 expert 突然过热」时微调路由,全深层 hash 会让 EP 空转风险 上升。

3.3 训练与迁移:深层沿用 V3 族更稳

V4 继承 DeepSeekMoE 256/8 + sharedsigmoid + bias 路由(aux-loss-free)。深层不动 → 大部分 MoE 层 权重形态、训推 kernel、EP 路径与 V3 同族,只在前几层插入 Hash 块;若 全栈 Hash,router 权重与 checkpoint 语义 全面重写,风险与验证成本都高。

3.4 收益递减

Hash 省的是 router 侧 FLOPs 与参数;深层 FFN expert 本体 仍是算力大头。把 Hash 推到全层,额外省的 router 占比变小,但 质量与均衡风险 单调变差 → 混合栈 是 Pareto 折中。


4. 混合栈长什么样

Gate affinity 换 Hash query;Phase C 仍为 EP + shared 引擎

Hash 仅替换浅层 Phase A→B 的路由函数;Phase C(EP scatter → Routed FFN → Gather+shared)与 V3 推理栈不变。

图示详情

路由后面引擎
浅层Hash MoE — 确定性 id,无 centroid GEMMhidden 初步混合后进入深层
深层V3 族 MoE — $u^\top e_i$ + top-$K_r$ + shared + $b_i$ 均衡仍走 EP scatter → expert FFN → gather + shared
  • 改的是「浅层选 expert 的函数」id 一旦确定,后面仍是 EP scatter → expert FFN → gather + shared
  • FP4 作用在 routed expert 权重 上,与 Hash vs centroid 正交(Hash MoE 专文 §2),深层 routed 也可 FP4,router 逻辑仍 centroid

5. 常见误解

误解澄清
「V4 全部 MoE 都 Hash」 — 仅 前几层
「深层不用 MoE」 — 主力层仍是 256/8 DeepSeekMoE + centroid
「Hash 层不做 EP」 — 仍 gather/scatter,只改 id 怎么来
「浅层 Hash = 质量一定差」设计假设是浅层 特化需求低;深层保留 learned routing 兜底能力

6. 与论文口径

V4 2606.19348Hash MoEFP4 MoE 作为 MoE 线改动与 CSA/HCA 等 同期打包;公开材料对 具体层号 着墨有限,本地文档以 「前几层 / 浅层 vs 深层 centroid」 表述,细节以论文与权重 config 为准。


参考

MoE 路由:gate-weight 还是 expert centroid?

← 返回 DeepSeekMoE §前向公式 · 答疑目录


问题从哪来

多数 MoE 文献(Switch、GShard、Mixtral 等)把 Router 写成 gate network:一个线性层或 MLP 输出 $N$ 维 logits,再 softmax / top-$k$ 得到 gate weights

DeepSeek-V2 / DeepSeekMoE 论文(Eq. 20–22)却写:

$$ s_{i,t} = \mathrm{Softmax}_i(u_t^\top e_i), \quad e_i = \text{「第 } i \text{ 个 routed expert 的 centroid」} $$

并把 $s_{i,t}$ 叫 token-to-expert affinity(亲和度),$g_{i,t}$ 才叫 gate value——且 $g_{i,t}$ 只在 Top-$K$ 非零。

DeepSeekMoE 路由公式:输出、门控、亲和度与 centroid

直接打开公式截图


1. 算子上:常常等价,语义上:两套叙事

把 $e_i \in \mathbb{R}^d$ 排成矩阵 $E \in \mathbb{R}^{N_r \times d}$,则

$$ u_t^\top e_i = (E u_t)_i $$

这与「Router 线性层 $W_g \in \mathbb{R}^{N_r \times d}$,logits $= W_g u_t$」是同一类双线性打分——参数可一一对应($W_g$ 的第 $i$ 行就是 $e_i^\top$)。

叙事在问什么典型符号
Gate-weight「给每个 expert 一个调度权重」$W_g$, router logits, $g_i$
Centroid / affinity「token 离哪个 expert 的代表点最近?」$e_i$, $s_{i,t}$, affinity

DeepSeek 选第二种写法,不是因为算子不能实现成 gate layer,而是要把路由解释成 hidden space 里的匹配 / 聚类,与 fine-grained expert specialization 的设计目标对齐。


2. 概念区别:三条分工

DeepSeek 公式里其实拆了三层,很多 gate-only 写法混为一谈:

符号作用是否稀疏
① 匹配$s_{i,t} = f(u_t, e_i)$token 与各 expert 原型的亲和度否(对全体 routed 算分)
② 选择Top-$K_r$ on ${s_{i,t}}$(V3 起加 $b_i$)哪些 expert 参与
③ 门控$g_{i,t}$(选中后取 $s$ 或归一化 $s$)expert 输出 乘多少仅 $K_r$ 非零

Gate-weight 文献常把 ①②③ 合成一个向量 $g=\mathrm{TopK}(\mathrm{softmax}(W u))$。

Centroid 叙事强调:

  • $e_i$ 不是 FFN 权重,而是 expert $i$ 在 同一 hidden 空间里的 routing 原型(可学习向量);
  • expert 特化 = 「处理亲和 $e_i$ 的 token 簇」;
  • $g$ 只是稀疏化后的 执行系数,语义上从 affinity 派生。

3. 为什么 DeepSeek 要强调 centroid?

3.1 与 fine-grained segmentation 同构

DeepSeekMoE 把 $N$ 个大 expert 拆成 $2N$ 个小 expert

  • expert 越多 → hidden 空间被划得越细;
  • 每个 $e_i$ 像一个 小簇中心
  • 路由 = 「这个 token 属于哪个细簇」→ 走对应小 FFN。

若只叫 gate-weight,很难在论文里自然推出「为什么要 160 个小 expert」;centroid + clustering 直觉更顺。

3.2 与 shared expert 分工一致

  • Shared FFN:不走 $e_i$ 匹配,每个 token 必过 → 承担 跨簇公共模式;
  • Routed FFN:走 $s_{i,t}=u_t^\top e_i$ → 承担 簇内特化

这是 「公共底座 + 按簇特化」,比「$N$ 个 gate 加权 expert」更好讲清 shared isolation 动机。

3.3 与 device-limited routing 一致

V2 先按 device 上 expert 组的 affinity 总和 选 $M$ 台机器,再在子集里 Top-$K$。

把 $e_i$ 看成空间中的点,天然支持 「先选区域(device),再选簇内 expert」;纯 gate 矩阵也能算,但缺少几何解释。


4. 对后续建模的影响

4.1 V2:affinity 驱动训练侧均衡

  • Expert / device / comm 三级 aux loss 监控的是 被路由到的 token 流,affinity 决定谁被选中;
  • Token dropping:丢弃 affinity 最低的 token-expert 对 — 显式假设「低亲和 = 可牺牲的边缘匹配」;
  • 若只有匿名 gate,很难区分「调度分数」与「语义匹配质量」。

4.2 V3 aux-loss-free:拆选择 vs 门控

V3 保留 affinity $s_{i,t}$(改为 sigmoid 系),但:

用途V3 用法
Top-$K$ 排序$s_{i,t} + b_i$($b_i$ batch 级启发式更新)
乘 FFN 输出仍用 原始 $s_{i,t}$

详见 aux-loss-free 路由逻辑

Centroid 叙事下的含义

  • $e_i$ / $s_{i,t}$:学 「token 是否属于 expert $i$ 的语义簇」(主 loss 反传);
  • $b_i$:运维旋钮,只挪负载、不扭曲 gate 幅度 → 避免 aux loss 伤主任务。

若 early MoE 只有一个 gate 向量,把负载均衡和语义匹配绑在同一标量上,V3 这种 解耦 更难表述,也难调。

4.3 V3 $L_{\mathrm{Bal}}$:序列内 complement

$L_{\mathrm{Bal}}$单序列内 补 $f_i P_i$,与 $b_i$ 的 batch 级均衡互补 — 仍假设 expert 是可被 按亲和度分配 的特化单元,而不是纯随机 gate。

4.4 V4 Hash MoE:部分层离开 centroid 路由

V4 前几层改用 Hash 路由— 不再用 $u^\top e_i$ 做语义匹配,而是确定性 hash。

说明 centroid 路由是 DeepSeekMoE 稠密→稀疏 FFN 阶段的主线;到 V4 为效率/hash 另开一路,但 256/8 + shared + aux-loss-free 骨架仍继承 V2/V3 的 MoE 形态。


5. 对照表

维度常见 gate-weight MoEDeepSeekMoE(centroid)
Router 参数$W_g \in \mathbb{R}^{N \times d}$$e_i \in \mathbb{R}^d$(每 expert 一向量)
打分$\mathrm{softmax}(W_g u)$$\mathrm{softmax}_i(u^\top e_i)$
语义「学一个调度函数」「token 匹配 expert 原型 / 簇」
与 FFN 关系gate 与 FFN 权重独立同上;$e_i$ $\mathrm{FFN}_i$ 的 $W_1,W_2$
负载均衡aux loss 直接推 routerV2 aux;V3 $b_i$ 只动选择、不动 $g$
设计延伸fine-grained、shared isolation、device-limited

6. 一句话

Gate-weight 把 MoE 路由说成「学一个 softmax 分类器」;centroid 把同一条算子说成「在 hidden 空间里做 expert 聚类匹配」。DeepSeek 选后者,是为了把 细粒度 expert、shared 分工、affinity 驱动的均衡、以及 V3 选择/门控解耦 串成一条可设计的叙事;算子层面仍可实现为 linear(u, E)


参考

MoE 推理:Expert Parallel与 gather/scatter

← 返回 Hash MoE §1.3 · DeepSeekMoE §推理 infra · 答疑目录


一句话

Expert Parallel(EP)routed experts 的权重 切到多张 GPU 上;前向时 token 经 dispatch(scatter) 送到持有对应 expert 的 rank,算完再 combine(gather) 回 batch 布局。DeepSeek V3 / V4 Hash MoE 共享这条 MoE 推理骨架——变的是 怎么选 expert id(centroid vs hash),不是 EP 通信模式本身。


1. EP 是什么

并行维切什么MoE 里典型用途
Tensor Parallel(TP)单层内矩阵 列切 + 行切(见下)Attention / 大线性层
Expert Parallel(EP)不同 expert 的 FFN 权重 分到不同 GPUrouted MoE 层
Data Parallel(DP)复制整模型、切 batch通用训练

TP 补注 表里「按列/行切」指 Megatron 式 TP 在同一层里通常各用一次,不是「整张矩阵只切一种方向就结束」:

  • 列切(column parallel):权重按 输出维 / 列 分片;每卡算 $Y_i = X W_i$,得到 输出通道分片(常接 AllGather 或留分片给下一步)。
  • 行切(row parallel):权重按 输入维 / 行 分片;每卡算 部分和,需 AllReduce 合并成完整输出。

典型 FFN / 投影块:先列切、后行切(或 Attention 里 QKV 列切 + $O$ 投影行切),至少两次 TP matmul + 中间通信 才走完一层,且 列切那一次与行切那一次分工不同——不是对同一矩阵重复切两次。

DeepSeekMoE 每层有 256 routed + shared(V3 口径):shared 通常各 rank 都有或按 TP 复用;routed 池太大,单卡放不下 → 用 EP 按 expert id 分片。


2. 前向数据流:gather / scatter

对单个 MoE 层、单个 micro-batch,顺序为:路由得 expert iddispatch(scatter) 把 token 发到持有该 expert 的 GPU → 各 rank 算本 rank expert 子集combine(gather) 加权收回原 batch 顺序。

Shared experts 不走稀疏 scatter:每层 恒激活,与 routed 输出 相加


3. 为何与负载均衡绑在一起

EP 下 每张卡只服务一部分 expert。若路由 collapse(多数 token 涌向少数 expert):

  • 热点 rank 打满,其它 rank 空转EP 效率 ≈ 最忙那张卡
  • 通信量也随 激活 expert 的 rank 分布 波动。

因此 V3 的 aux-loss-free / $L_{\mathrm{Bal}}$ 首要目标之一是 batch 级 expert 均衡——直接服务 EP 训练与推理吞吐


4. Hash MoE 改什么、不改什么

维度V3 centroid 路由V4 Hash 层
Expert id 怎么来$u^\top e_i$ + top-$K_r$确定性 hash(无 router GEMM)
EP scatter/gather✅ 同族仍走 routed gather-scatter
Shared 双路径
负载均衡手段$b_i$、$L_{\mathrm{Bal}}$hash 函数 静态近似均匀 + 深层仍可 centroid

读法Hash MoE 专文 换的是 浅层选 expert 的函数一旦 id 确定,后面仍是 DeepSeekMoE 的 EP + shared 引擎路径,与 V3 推理栈同族。

答疑为何只改浅层、深层仍 centroid?


5. V4 叠加:FP4 + EP

Hash MoE + FP4 在 EP 路径上多一层约束:

  • Routed expert 权重 FP4 存 HBM;各 rank 的 expert 子集 4bit 读 + 高精度累加(引擎需 分 kernel)。
  • Shared 路径通常仍用更高精度(与 V3 FP8 栈衔接)。
  • EP 通信 payload 仍是 activation(hidden),不是 expert 权重;FP4 主要省 权重带宽与显存,不改变 scatter/gather 拓扑。

6. 与训练侧 DeepEP 的关系

V3 训练文档常并列 DualPipe、DeepEP、FP8DeepEPMoE token dispatch 的通信库,属于 训推系统层,不是 Transformer 权重结构。

内容
模型结构256/8 routed、shared、路由公式
EP / DeepEPexpert 分片 + token 怎么跨 rank 搬
Hash MoE仅改 部分层 的 id 映射函数

7. 对照表

术语含义
EPExpert Parallel;按 expert 切权重
scatter / dispatchtoken → 各 expert rank
gather / combineexpert 输出 → 回原 batch
DeepEPDeepSeek 系 MoE 通信实现(训练/推理栈)
device-limited routingV2 限制 token 只打本地 expert,减 EP 通信

参考

Fine-grained Expert Segmentation:为何优于 GShard 式粗专家?

← 返回 DeepSeekMoE §优化逻辑 (b) · 答疑目录

来源:DeepSeekMoE 论文(Dai et al., arXiv:2401.06066)§3.1 · V2 技术报告 2405.04434 §2.2


1. 核心直觉:IsoFLOP 下换「组合空间」

Fine-grained 的操作:

  1. 每个标准 expert FFN 切成 $m$ 个小 expert
  2. 中间维缩为 $1/m$
  3. 每 token 激活数 $K \to mK$

总参 / 激活 FLOPs 不变

$$ K \times d_{\mathrm{ffn}} ;\approx; mK \times \frac{d_{\mathrm{ffn}}}{m} $$

因此优势 不是「多烧算力」,而是在 同等计算预算 下,把路由从「选 $K$ 个大块」换成「选 $mK$ 个小块」——组合数学上,可选方案数爆炸式增长(下文 §2)。

DeepSeekMoE 论文 §3.1 Fine-Grained Expert Segmentation 原文节选

直接打开 §3.1 原文截图


2. 组合数学视角

2.1 路由 = 从专家池里选子集

MoE 对 token $t$ 的路由,本质是:在 $N$ 个 routed expert 中选 $K$ 个 组成激活集 $\mathcal{S}_t$,再加权求和:

$$ \sum_{i \in \mathcal{S}t} g{i,t},\mathrm{FFN}_i(u_t), \quad |\mathcal{S}_t| = K $$

不考虑 gate 权重、只计「选哪几个 expert」,不同激活集的个数为:

$$ \boxed{;#\text{组合} = \binom{N}{K};} $$

这就是 fine-grained 相对 GShard 的 第一性优势$N$ 变大、$K$ 同比放大时,$\binom{N}{K}$ 超指数增长——模型在 相同 FLOPs 下能表达 vastly more 种「专家配方」。

2.2 论文数值例

DeepSeekMoE 原文给出对照(见下图):

DeepSeekMoE 论文组合数对比:16 选 2 vs 64 选 8

直接打开组合数学原文截图

设定专家池 $N$每 token 激活 $K$组合数 $\binom{N}{K}$
标准(粗)MoE162$\binom{16}{2} = \mathbf{120}$
Fine-grained(每个 expert 切 4 份)648$\binom{64}{8} = \mathbf{4{,}426{,}165{,}368}$

倍数:$\dfrac{\binom{64}{8}}{\binom{16}{2}} \approx 3.7 \times 10^{7}$ —— 约 3700 万倍 的离散路由方案。

切分参数:$N' = mN = 4 \times 16 = 64$,$K' = mK = 4 \times 2 = 8$,与 §1 的 IsoFLOP 约定一致($m=4$)。

2.3 通式:为何 $m$ 一放大,组合数就「炸」?

记粗粒度 $\binom{N}{K}$,细粒度 $\binom{mN}{mK}$。固定 $N,K$,增大 $m$:

$$ \frac{\binom{mN}{mK}}{\binom{N}{K}} = \prod_{j=0}^{K-1} \frac{mN - j}{N - j} ;\xrightarrow{m\to\infty}; m^{K} \quad\text{(首阶)} $$

直觉:

  • 粗 MoE:$K=2$ 时只有 $\binom{N}{2} \sim O(N^2)$ 种「双专家配方」;
  • 细 MoE:$mK$ 个 slot 从 $mN$ 个 specialist 里挑,组合数随 $mN$ 与 $mK$ 同时升高,增长远快于 $m^K$ 的多项式级。

论文结论:This combinatorial flexibility allows for more accurate and targeted knowledge acquisition.

2.4 组合多 → 训练为何更好?

组合视角对训练的含义
120 种配方Router 只能在 少数粗粒度混合 间选择;每种配方对应 大 FFN 内部折中
$4.4\times 10^9$ 种配方Router 可为不同 token 细调 specialist 子集;每种配方 = 多个窄 FFN 的特化组合
同 FLOPs不是「算更多次」,而是 同一次 forward 里,从更大离散菜单点菜
与 gate 权重联立Top-$mK$ 先定 支持集,$g_{i,t}$ 再定 配比 → 连续 × 离散 的表达力都上去

类比:粗 MoE 像 120 种固定套餐;fine-grained 像 40 亿种自选小份拼盘——总卡路里(FLOPs)一样,但可针对每个 token 更精准地配知识

2.5 与 V2 产品配置的尺度感

论文玩具数是 $N=16 \to 64$;V2 部署进一步放大 routed 池:

版本routed 数 $N_r$每 token 激活 $K_r$$\binom{N_r}{K_r}$(量级)
论文例648$\sim 4.4 \times 10^9$
DeepSeek-V21606$\binom{160}{6} \approx 2.0 \times 10^{11}$
DeepSeek-V32568$\binom{256}{8} \approx 5.6 \times 10^{14}$

V2/V3 在 IsoFLOP 路由槽位 下,组合空间比论文 $64/8$ 例再大 $10^2$–$10^5$ 量级——这也是细粒度必须配 centroid / device-limited / 均衡 的原因:池子越大,「点菜菜单」越大,越需要稳定路由(见 §5)。


3. GShard 式粗 expert 的特化问题

组合空间小 单 expert 太大时,还会出现 知识重叠

现象后果
单个 expert 很大路由到它的 token 类型杂
一个 FFN 同时拟合多种知识参数在 冲突梯度 间拉扯
$\binom{N}{K}$ 本身很小即使 router 想细分,离散菜单不够

Fine-grained 同时解决两件事:

  1. 组合数 $\binom{N}{K} \to \binom{mN}{mK}$(§2);
  2. 单 expert 宽度 $d_{\mathrm{ffn}} \to d_{\mathrm{ffn}}/m$,每个 specialist 更窄、更专

4. 与 shared expert、Figure 2 的衔接

机制作用
Fine-grained routed扩大 $\binom{mN}{mK}$,特化组合
Shared isolation通用知识 不占用 routed 组合槽位
Centroid affinity在巨大组合空间中 按簇 选 expert,避免随机乱配

Figure 2 (b) 对应:$m=2$ 时 $N \to 2N$,Top-$K$ $\to$ Top-$2K$,中间维减半;组合数 $\binom{N}{K} \to \binom{2N}{2K}$,同样 远大于 原 $\binom{N}{K}$。


5. 训练配套

$\binom{mN}{mK}$ 极大时,若 router collapse 到少数 expert,组合优势浪费。DeepSeek 配套:

机制作用
Centroid + Top-$K$按簇选 specialist
V2 device-limited routing控 EP 通信
V2 aux loss / V3 aux-loss-free防负载塌缩

论文实证(2401.06066):DeepSeekMoE 2B 可达 GShard 2.9B 水平,后者 expert 参数量与计算约 1.5×——说明 组合 + 特化 在同等预算下能换更好效果。


6. 一句话

Fine-grained 在 IsoFLOP 下把 $\binom{N}{K}$ 换成 $\binom{mN}{mK}$,让 router 对每个 token 能从 ** vastly larger 的 specialist 子集菜单** 里精确配知识;再配合更窄的单 expert 与 shared/路由设计,同等算力下训练效果更好。DeepSeek MoE 线(V2→V3→V4)均建立在这一组合数学优势之上。


参考

Hash MoE 为何只改浅层、深层仍用 centroid 路由?

← 返回 Hash MoE §1.2 · EP 答疑 §4 · centroid vs gate-weight §4.4 · 答疑目录


一句话

Hash 路由用确定性函数换 零 router GEMM + 静态负载;适合 浅层偏通用、对语义特化要求低 的 FFN。深层仍要 按 token 语义选 expert($u^\top e_i$ + aux-loss-free),才能保留 V3 系 细粒度 specialization动态均衡——全栈 Hash 省算力更多,但 表达能力与 EP 负载风险 都不划算,所以 V4 选 浅 Hash + 深 centroid 的混合栈。


1. 两种路由各自擅长什么

维度Hash(浅层)Centroid / aux-loss-free(深层)
Expert idtoken / 位置 hash → 近似均匀$u^\top e_i$ 语义亲和度 + top-$K_r$
Router 算力 对 256 expert 的打分 GEMM每层每 token 一次 routed 打分
负载均衡hash 设计 静态近似均匀动态 bias $b_i$ + $L_{\mathrm{Bal}}$
特化能力 — id 与「内容类型」解耦 — expert 向量 $e_i$ 学「原型 / 簇」
典型层位前几层 MoE / 原 dense FFN中深层 主力 MoE 层

2. 为何浅层可以 Hash

2.1 浅层 FFN 更偏「通用变换」

靠近 embedding 的 FFN 多在 升维 / 非线性 / 局部混合,尚未形成强 任务 / 领域 分化。此时用 hash 把 token 伪随机但均匀 摊到 expert 上,等价于 加宽 FFN 容量,对 语义匹配 依赖较小。

2.2 省下来的主要是 router 与参数

V3 每层 MoE 要对 全体 routed expert 算亲和度(256 维量级),再 top-8。浅层 层数少但 token 吞吐相同,若前几层原是 dense FFN 或 MoE,改成 Hash MoE 可以:

  • 去掉 $e_i$、router GEMM 与部分 aux 路径;
  • 仍走 EP + sharedid 确定后引擎与 V3 同族

动机表里写的 「省路由算力与参数;浅层更偏通用变换」 即此。

2.3 静态 hash 够用的前提

Hash 层 不随 batch 调 $b_i$。浅层 expert 负载若天然较匀、且 不承担精细语义分工,静态 hash 的 近似均匀 通常够用;这也是只放浅层的 前提条件


3. 为何深层不动

3.1 深层需要「按内容选 expert」

越靠后,hidden 越 抽象、任务相关。DeepSeekMoE 的 centroid 叙事是:token 与 expert 原型 $e_i$ 匹配(centroid 答疑)。数学 / 代码 / 多语言等 分化 主要在 中深层 MoE 体现;改成 hash 等于 强行去掉内容条件路由,特化能力损失大。

3.2 动态均衡在深层更关键

深层 MoE 激活参数占比高,EP 下 热点 expert 代价更大(EP 答疑 §3)。V3 的 $b_i$ + $L_{\mathrm{Bal}}$ 针对 batch / 序列内 动态调节;hash 无法 在「某 expert 突然过热」时微调路由,全深层 hash 会让 EP 空转风险 上升。

3.3 训练与迁移:深层沿用 V3 族更稳

V4 继承 DeepSeekMoE 256/8 + sharedsigmoid + bias 路由(aux-loss-free)。深层不动 → 大部分 MoE 层 权重形态、训推 kernel、EP 路径与 V3 同族,只在前几层插入 Hash 块;若 全栈 Hash,router 权重与 checkpoint 语义 全面重写,风险与验证成本都高。

3.4 收益递减

Hash 省的是 router 侧 FLOPs 与参数;深层 FFN expert 本体 仍是算力大头。把 Hash 推到全层,额外省的 router 占比变小,但 质量与均衡风险 单调变差 → 混合栈 是 Pareto 折中。


4. 混合栈长什么样

Gate affinity 换 Hash query;Phase C 仍为 EP + shared 引擎

Hash 仅替换浅层 Phase A→B 的路由函数;Phase C(EP scatter → Routed FFN → Gather+shared)与 V3 推理栈不变。

图示详情

路由后面引擎
浅层Hash MoE — 确定性 id,无 centroid GEMMhidden 初步混合后进入深层
深层V3 族 MoE — $u^\top e_i$ + top-$K_r$ + shared + $b_i$ 均衡仍走 EP scatter → expert FFN → gather + shared
  • 改的是「浅层选 expert 的函数」id 一旦确定,后面仍是 EP scatter → expert FFN → gather + shared
  • FP4 作用在 routed expert 权重 上,与 Hash vs centroid 正交(Hash MoE 专文 §2),深层 routed 也可 FP4,router 逻辑仍 centroid

5. 常见误解

误解澄清
「V4 全部 MoE 都 Hash」 — 仅 前几层
「深层不用 MoE」 — 主力层仍是 256/8 DeepSeekMoE + centroid
「Hash 层不做 EP」 — 仍 gather/scatter,只改 id 怎么来
「浅层 Hash = 质量一定差」设计假设是浅层 特化需求低;深层保留 learned routing 兜底能力

6. 与论文口径

V4 2606.19348Hash MoEFP4 MoE 作为 MoE 线改动与 CSA/HCA 等 同期打包;公开材料对 具体层号 着墨有限,本地文档以 「前几层 / 浅层 vs 深层 centroid」 表述,细节以论文与权重 config 为准。


参考

名词解释:Birkhoff 多面体

← 返回 mHC §3.2 · §3 双随机流形 · HC 基础 · 答疑目录


一句话

Birkhoff 多面体 $\mathcal{B}_n$ = 所有 $n \times n$ 双随机矩阵 的集合 = $n$ 阶 置换矩阵凸包;mHC 把 HC 混合矩阵投影到 $\mathcal{B}_n$,使多路残差流混合为 凸组合


1. 双随机矩阵

$H \in \mathbb{R}^{n \times n}$ 若满足:

$$ H_{ij} \ge 0;\quad \sum_j H_{ij}=1;\forall i;\quad \sum_i H_{ij}=1;\forall j $$

则称 $H$ 为 双随机矩阵(doubly stochastic):每行、每列都是 非负且和为 1 的概率分布。


2. Birkhoff 多面体 = 置换矩阵的凸包

记 $\mathcal{B}_n$ 为 全体 $n \times n$ 双随机矩阵的集合,则(Birkhoff–von Neumann 定理):

$$ \mathcal{B}n = \mathrm{conv},{, P\pi \mid \pi \in S_n ,} $$

概念含义
置换矩阵 $P_\pi$每行、每列 恰有一个 1,其余为 0(对应排列 $\pi$)
凸包 $\mathrm{conv}{\cdots}$允许对顶点做 非负权重加权平均,权重和为 1
Birkhoff 多面体双随机矩阵在 $\mathbb{R}^{n \times n}$ 中形成的 凸多面体(有界、闭、凸)

直觉:任意双随机矩阵都可以写成「若干个置换矩阵的加权平均」;极端点(顶点)就是置换矩阵本身。

$n{=}2$ 小例:$H=\begin{pmatrix}0.7&0.3\0.4&0.6\end{pmatrix}$ 可视为两个置换矩阵(恒等与交换)的凸组合。


3. 为何 mHC 论文叫它「流形」

说法含义
严格几何$\mathcal{B}_n$ 是 多面体(polytope),维数 $n^2-n$
论文 / 工程口语训练时在 $\mathbb{R}^{n^2}$ 上优化 logits,前向用 Sinkhorn 把矩阵 约束回 $\mathcal{B}_n$ → 称 Manifold-Constrained双随机流形

mHC §3.4Sinkhorn–Knopp 投影配合:无约束 $\tilde{H}$ → 逼近 $H \in \mathcal{B}_n$。


4. 对残差混合的含义

把 $n$ 条残差流堆叠为 $X$,混合 $H \in \mathcal{B}_n$ 后第 $i$ 行:

$$ (X')i = \sum{j=1}^{n} H_{ij} X_j, \quad H_{ij}\ge 0,; \sum_j H_{ij}=1 $$

即 $(X')_i$ 是各条流的 凸组合单层不放大 最大流范数


5. 易混名词

名词领域与 Birkhoff 多面体
SWA优化 / 训练Stochastic Weight Averaging;与 Birkhoff 无关
SWA(V4)AttentionSWA(Sliding Window Attention)
单纯形概率行随机矩阵集合;双随机 = 行 + 列 都随机,更严
置换矩阵线性代数$\mathcal{B}_n$ 的 顶点,不是全体

6. 相关阅读

文档内容
mHC§3双随机定义 · Sinkhorn · 与 HC 对照
Hyper-Connections无约束 HC 为何不 stable

MoE 推理:Expert Parallel与 gather/scatter

← 返回 Hash MoE §1.3 · DeepSeekMoE §推理 infra · 答疑目录


一句话

Expert Parallel(EP)routed experts 的权重 切到多张 GPU 上;前向时 token 经 dispatch(scatter) 送到持有对应 expert 的 rank,算完再 combine(gather) 回 batch 布局。DeepSeek V3 / V4 Hash MoE 共享这条 MoE 推理骨架——变的是 怎么选 expert id(centroid vs hash),不是 EP 通信模式本身。


1. EP 是什么

并行维切什么MoE 里典型用途
Tensor Parallel(TP)单层内矩阵 列切 + 行切(见下)Attention / 大线性层
Expert Parallel(EP)不同 expert 的 FFN 权重 分到不同 GPUrouted MoE 层
Data Parallel(DP)复制整模型、切 batch通用训练

TP 补注 表里「按列/行切」指 Megatron 式 TP 在同一层里通常各用一次,不是「整张矩阵只切一种方向就结束」:

  • 列切(column parallel):权重按 输出维 / 列 分片;每卡算 $Y_i = X W_i$,得到 输出通道分片(常接 AllGather 或留分片给下一步)。
  • 行切(row parallel):权重按 输入维 / 行 分片;每卡算 部分和,需 AllReduce 合并成完整输出。

典型 FFN / 投影块:先列切、后行切(或 Attention 里 QKV 列切 + $O$ 投影行切),至少两次 TP matmul + 中间通信 才走完一层,且 列切那一次与行切那一次分工不同——不是对同一矩阵重复切两次。

DeepSeekMoE 每层有 256 routed + shared(V3 口径):shared 通常各 rank 都有或按 TP 复用;routed 池太大,单卡放不下 → 用 EP 按 expert id 分片。


2. 前向数据流:gather / scatter

对单个 MoE 层、单个 micro-batch,顺序为:路由得 expert iddispatch(scatter) 把 token 发到持有该 expert 的 GPU → 各 rank 算本 rank expert 子集combine(gather) 加权收回原 batch 顺序。

Shared experts 不走稀疏 scatter:每层 恒激活,与 routed 输出 相加


3. 为何与负载均衡绑在一起

EP 下 每张卡只服务一部分 expert。若路由 collapse(多数 token 涌向少数 expert):

  • 热点 rank 打满,其它 rank 空转EP 效率 ≈ 最忙那张卡
  • 通信量也随 激活 expert 的 rank 分布 波动。

因此 V3 的 aux-loss-free / $L_{\mathrm{Bal}}$ 首要目标之一是 batch 级 expert 均衡——直接服务 EP 训练与推理吞吐


4. Hash MoE 改什么、不改什么

维度V3 centroid 路由V4 Hash 层
Expert id 怎么来$u^\top e_i$ + top-$K_r$确定性 hash(无 router GEMM)
EP scatter/gather✅ 同族仍走 routed gather-scatter
Shared 双路径
负载均衡手段$b_i$、$L_{\mathrm{Bal}}$hash 函数 静态近似均匀 + 深层仍可 centroid

读法Hash MoE 专文 换的是 浅层选 expert 的函数一旦 id 确定,后面仍是 DeepSeekMoE 的 EP + shared 引擎路径,与 V3 推理栈同族。

答疑为何只改浅层、深层仍 centroid?


5. V4 叠加:FP4 + EP

Hash MoE + FP4 在 EP 路径上多一层约束:

  • Routed expert 权重 FP4 存 HBM;各 rank 的 expert 子集 4bit 读 + 高精度累加(引擎需 分 kernel)。
  • Shared 路径通常仍用更高精度(与 V3 FP8 栈衔接)。
  • EP 通信 payload 仍是 activation(hidden),不是 expert 权重;FP4 主要省 权重带宽与显存,不改变 scatter/gather 拓扑。

6. 与训练侧 DeepEP 的关系

V3 训练文档常并列 DualPipe、DeepEP、FP8DeepEPMoE token dispatch 的通信库,属于 训推系统层,不是 Transformer 权重结构。

内容
模型结构256/8 routed、shared、路由公式
EP / DeepEPexpert 分片 + token 怎么跨 rank 搬
Hash MoE仅改 部分层 的 id 映射函数

7. 对照表

术语含义
EPExpert Parallel;按 expert 切权重
scatter / dispatchtoken → 各 expert rank
gather / combineexpert 输出 → 回原 batch
DeepEPDeepSeek 系 MoE 通信实现(训练/推理栈)
device-limited routingV2 限制 token 只打本地 expert,减 EP 通信

参考

为何 DeepSeek 用 $C=M\cdot D$ 而非 $C=6ND$?

← 返回演进总览 §3.1 V1 · ← V1 §3 Scaling Laws · 答疑目录

来源:DeepSeek-LLM arXiv:2401.02954 §3.2 · Table 3 / Formula 2–4


1. 一句话

不是把 Chinchilla 的 $6$ 随便改掉,而是:$6N$ 只是「每 token 算力」的粗近似;DeepSeek 改用实测的 $M$(non-embedding FLOPs/token),于是总算力按定义写成 $C=M\cdot D$——IsoFLOP 拟合(Figure 4a)才准。


2. 传统写法:$C \approx 6ND$

Kaplan / Chinchilla 系 scaling law 里,训练总算力常写成:

$$ C \approx 6ND $$

符号含义
$N$模型规模(参数量,有两种取法,见下)
$D$训练 token 数
6一次 forward + backward 相对 forward 的 FLOPs 倍数($\approx 1+2=3$ 再乘 matmul 计数约定)

$N$ 的两种常见定义

符号定义文献
$N_1$non-embedding 参数量Kaplan et al.
$N_2$含 embedding / lm_head 的全参Hoffmann et al.(Chinchilla)

于是「每 token 算力」可粗写为 $6N_1$$6N_2$,再乘 $D$ 得 $C$。


3. $6N$ 哪里不准?

V1 论文指出:$6N_1$ 与 $6N_2$ 都不是真实的 per-token FLOPs,误差在小模型上尤其大:

近似问题
$6N_1$只数 FFN/线性层 matmul,不含 attention 的 $O(L^2)$ 项 → 低估算力
$6N_2$在 $6N_1$ 基础上 加上 $6,n_{\mathrm{vocab}},d$(vocab 投影)→ 对能力贡献小却 高估算力;仍 不含 attention

DeepSeek 给出三者闭式(Formula 2,$l_{\mathrm{seq}}$ = 序列长度):

$$ \begin{aligned} 6N_1 &= 72 \cdot n_{\mathrm{layer}} \cdot d_{\mathrm{model}}^2 \ 6N_2 &= 72 \cdot n_{\mathrm{layer}} \cdot d_{\mathrm{model}}^2 + 6 \cdot n_{\mathrm{vocab}} \cdot d_{\mathrm{model}} \ M &= 72 \cdot n_{\mathrm{layer}} \cdot d_{\mathrm{model}}^2 + 12 \cdot n_{\mathrm{layer}} \cdot d_{\mathrm{model}} \cdot l_{\mathrm{seq}} \end{aligned} $$

$M$ = non-embedding FLOPs/token:计 attention不计 vocab 投影——作为「模型有多重、每 token 算多狠」的度量。


4. Table 3:小模型上误差可达 50%

Table 3 — 6N1、6N2 相对 M 的偏差

直接打开 Table 3

$n_{\mathrm{layer}}$$d_{\mathrm{model}}$$6N_1/M$$6N_2/M$
127680.431.32
2410240.691.14
3240960.971.01
  • $6N_1/M < 1$(12 层仅 0.43):缺 attention → 严重低估 $M$
  • $6N_2/M > 1$(12 层 1.32):多计 vocab → 高估 $M$
  • 模型变大后趋近 1,但 IsoFLOP 扫小模型时若仍用 $6N$,会把「同一 $C$ 下的不同 $(M,D)$ 分配」搞错 → U 形曲线(Figure 4a)拟合被污染

因此 Formula 4 / IsoFLOP 统一用 $M$,不用 $6N_1$/$6N_2$。


5. 改成 $C = M \cdot D$ 在算什么?

这是 定义,不是新物理定律:

$$ \boxed{C = M \cdot D} $$

含义
$M$每个训练 token 的 non-embedding forward FLOPs(含 attention,不含 embedding 矩阵乘)
$D$训练 token 总数
$C$总训练算力(FLOPs)

与 $6ND$ 的关系:若你坚持用参数量 $N$,只能选 $N_1$ 或 $N_2$,再乘 6近似 $M$;DeepSeek 选择 直接测 $M$,避免 $N_1$/$N_2$ 双轨与 attention 缺失。

训练时仍用 3× forward 做 backward——变的只是 用什么标度刻画「模型规模」:从 参数个数 $N$ 换成 每 token 实际 FLOPs $M$


6. 和 Figure 4a / IsoFLOP 的关系

IsoFLOP 实验:固定总算力 $C$,扫约 10 种 $(M,D)$ 满足 $M\cdot D=C$,找 validation loss 谷底

  • 横轴必须是 真实的 $M$(FLOPs/token),不能是 $6N_1$ 或 $6N_2$
  • 若用 $6N$ 当横轴,小模型点会 系统性偏移,谷底位置错 → $M_{\mathrm{opt}}(C)$、$D_{\mathrm{opt}}(C)$(Formula 4)不可信

Figure 4a 的 U 形曲线因此建立在 $C=M\cdot D$ 之上;演进总览 §3.1 所贴即此图。


7. 和数据质量结论的关系

论文在 Formula 4 成立(即用 $M$) 之后还发现:不同语料拟合的 $M_{\mathrm{opt}}\propto C^a$、$D_{\mathrm{opt}}\propto C^b$ 指数 $a,b$ 不同——数据质量越高,$a$ 越大 → 更该扩模型而非堆数据

这是 第二层结论,依赖第一层「用 $M$ 而不是 $6N$ 把 $C$ 算准」。


8. 常见误解

误解正解
DeepSeek 否定了 Chinchilla仍做 IsoFLOP;改的是 模型规模的度量($M$ vs $6N$)
$C=MD$ 意味着 7B/67B 必须同 $D$$C=M\cdot D$ 是乘法 定义;产品统一 2T 是 工程选择,见 Scaling-Law 选择性应用
6 这个常数错了6 来自 fwd+bwd 计数;问题在于 $N$ 不能代表 per-token FLOPs(缺 attention / 多 vocab)

9. 延伸阅读

文档内容
V1 §3.2 最优 model/data ScalingFormula 2–4 原文与 Figure 4
Scaling 答疑$M$ 推导、Formula 1/4 数值、4B 实战
Scaling-Law 选择性应用Figure 3/4/5 分工;2T 产品 vs IsoFLOP 谷底
产品训练与 Scaling Law7B/67B 同训 2T 与 compute-optimal 的区别

V4 里的 Indexer KV 是什么?

← 返回 CSA/HCA 一句话 · §4 异构 KV · KV Layout §State · Lightning Indexer 详解 · DSA 梗概 · 答疑目录


一句话

Indexer KV 是 V4 CSA 稀疏路径上、沿 V3.2 Lightning Indexer 一脉的 轻量 K 向量 cache:当前 $q_t$ 对 全长历史 每条 $k_s$ 廉价打分 → top-$k$ 选出要读的 C4 压缩 entry维数、池子、是否 offload 均与 主 MLA / HCA entry 不同


1. 在 decode 一步做什么

对象动作
1当前 hidden $h_t$现算 indexer query $q_t$
2Indexer KV 第 $s$ 行 $k_s$每个历史位置 $s$ 打分 $I_{t,s}$
3Top-$k$得到下标集 $I$
4Classical 池 C4 entryCore attention 只读 $I$ 内压缩块

方向始终是 $q_t \to k_s$(当前选历史),不是每个历史 token 各自 top-$k$。机制细节见 Lightning Indexer §1


2. 为何单独一类 cache

对比Indexer KVCSA C4 entryHCA entry
目的选位置被选的远距稀疏 K/V全局 dense 摘要
典型维度(indexer 专用)压缩后主 attention更重压缩
读模式全长扫 打分仅 $I$ 内 稀疏读短序列 dense
V3.2 对应Indexer-CacheLatent-Cache

V4 把 indexer 与 C4/HCA 分开记账,引擎才能 分池 eviction、分类型 prefixKV layout)。


3. 与 ESS / offload 的关系

说明
IndexerV3.2 ESS:一般不 offload(GPU 常驻,先算 index 再决定搬哪些 latent)
V4Indexer KV 仍偏 热路径inactive C4HiSparse offload 不替代 indexer 打分(V3.2 链路描述;V4 对象名不同、分工类似)

4. 相对纯 DSA 的延续

算法线:MLA → DSA(indexer + top-$k$)→ CSA(压缩序列上再稀疏)。Indexer 不是 V4 新发明,而是 CSA 在 更短 entry 序列 上仍需要 「看谁」 的阶段;HCA 路径则走 dense attend 压缩摘要,不共用同一套 indexer 读法。


5. 相关阅读

文档内容
Lightning Indexer 详解$q_t$ 对 $k_s$ 打分、$O(L^2)$ 常数极小
DSA 稀疏注意力DSA 流水线总览
CSA / HCACSA 4:1 块 + indexer 在 V4 栈中的位置

V4 为何要分池?块对齐与尾缓冲怎么配合?

← 返回 KV Layout §为何单一 layout 不够 · Classical 池 · State 池 · Tail buffer · SWA · 答疑目录


一句话

V4 同时有 两种块长(CSA $m{=}4$、HCA $m'{=}128$)和 两种生命周期(已压缩定型 vs 仍在滑动/凑块);Classical 池 只放 凑满且不可变 的压缩 entry,State 池尾缓冲 + SWA每步都在变 的状态——混在一个池里会同时破坏 $\mathrm{lcm}$ 块对齐、prefix 共享、HiSparse offload


1. 为什么要分池管理

1.1 不是「多几种 KV」那么简单,是 读写语义不同

Classical KV cacheState cache
存什么已凑满的 CSA C4 / HCA 压缩 entryTail(未凑满块)+ SWA(滑动窗口精确 K/V)+ 可能含 Indexer
是否可变写入后 不可变(immutable)每 decode 步 都可能变(tail 变长/清空,SWA 滑动)
能否 prefix 共享 — 同一压缩块多请求只存一份 — 随各请求当前长度 / 窗口不同
能否落盘 / offloadCSA/HCA 块 优先(紧凑、不变)通常 跟请求走;SWA 还有三档策略(磁盘 prefix
分配粒度压缩 entry append每请求固定 state block(batch 内对齐)

V3/V3.2 可以「一层一条同质 latent 流」——shape 一样、生命周期一样。V4 把 远距压缩历史局部未压缩 / 未定型 混在同一抽象里,引擎就无法用 同一套 eviction、同一套 prefix 哈希、同一套 DMA 粒度 管理。

1.2 压缩比 $m \neq m'$ 放大了这个问题

  • CSA:每 4 token → 1 条 C4 entry(远距 稀疏 top-$k$ 读)
  • HCA:每 128 token → 1 条 HCA entry(全局 dense 读)

二者 entry 密度差 32 倍,读模式也不同。若强行共池:

  1. 块边界对不齐 — 同一 token 区间在 CSA 是 32 条 entry、在 HCA 是 1 条,物理槽位无法统一编号;
  2. 尾部长度不同 — CSA tail 最多 3 token,HCA tail 最多 127 token,与 SWA 窗口 叠加 后 State 侧体积不可预测;
  3. eviction 策略冲突 — HiSparse 想 offload inactive C4;SWA 却要 热窗口常驻 — 必须在池级分开。

所以表里写:$m{=}4$、$m'{=}128$ 不同 → 块对齐、尾缓冲、SWA 窗口必须分池管理


2. 块对齐:$\mathrm{lcm}=128$ 是啥逻辑

2.1 压缩器的硬约束

块压缩不是「任意截断」,而是:

$$ \text{连续 } m \text{ 个 token 的 K/V} ;\xrightarrow{;\text{compress};}; 1 \text{ 条 entry} $$

  • CSA:$m=4$
  • HCA:$m'=128$

引擎要为 已完成的块 在 Classical 池里分配 连续、可索引 的槽位。若物理分配粒度只按 4 对齐,HCA 每 128 token 才一条,中间会产生 跨槽碎片;若只按 128 对齐,CSA 每 4 token 一条又无法在子块内寻址。

2.2 用 lcm 统一「大块」边界

$$ \mathrm{lcm}(m,m') = \mathrm{lcm}(4,128) = 128 $$

含义:每 128 个 token 构成一个 对齐超级块,在这个边界上:

在这 128 token 内CSAHCA
满块 entry 数$128/4 = 32$ 条 C4$128/128 = 1$ 条 HCA
边界32 条 C4 刚好填满1 条 HCA 刚好填满

任意 已完成 的历史长度 $L$ 可写成:

$$ L = 128 \cdot q + r,\quad 0 \le r < 128 $$

  • $128q$ token → Classical 池里有 $32q$ 条 C4 + $q$ 条 HCA(一一对应同一批 token 区间)
  • 剩余 $r$ token → 进 tail不进 Classical(见下节)

这样 prefix 共享、落盘、HiSparse 按 entry 搬移 时,CSA 与 HCA 的「第 $k$ 个 128-token 段」语义一致,不会出现半块只压了一边的情况。

2.3 小例子:$L=130$ token

区间Classical 池State 池
token $1\ldots128$32×C4 + 1×HCA(已满)
token $129\ldots130$不写(未满 4 也未满 128 的 公共尾Tail 2 token + SWA 窗口(含最近 128,与上表重叠由 kernel 定义)

若把 129–130 强行写入 Classical,要么 伪造半条 HCA(算法不允许),要么 破坏 C4 四元组完整性


3. 尾缓冲的逻辑

3.1 流式 decode:来一 token,不能立刻压块

Prefill / decode 逐个 append token 时,序列长度 $L$ 任意时刻 不一定 被 4 或 128 整除。

Tail buffer = 当前 还凑不成一整块 的 K/V 暂存区:

路径何时「满块」Tail 最多多长
CSA$L \bmod 4 = 0$3 token
HCA$L \bmod 128 = 0$127 token

满块时:压缩 → 一条 entry append 到 Classical 池 → tail 中对应 token 清空或前移

3.2 为何 tail 必须在 State 池

若在 Classical若在 State(实际)
entry 未定型却要占位 → 无法 immutable 共享明确标记为 进行中
prefix 命中时要拷贝 半块垃圾命中后只需 重算 / 补 tail + SWA
offload 无法判断 是否完整块Classical 里 全是满块,HiSparse 可安全搬 inactive C4

Tail 是 块对齐的工程缓冲,不是新 attention 类型(详见 tail buffer 答疑)。

3.3 与 SWA 同池、不同职责

二者都在 State 池,但:

TailSWA
目的等凑满 压缩块保留 局部精度
变化方式长度 $0\ldots m{-}1$ 阶跃窗口 滑动
与 Classical 关系满则 迁入永不压成 CSA/HCA entry

4. 串起来:一次 decode 步发生了什么

设当前已满 Classical 的历史为 $128q$ token,State 里有 tail + SWA。

  1. 新 token 到达 → K/V 写入 tail(tail 长度 $+1$);
  2. 若 tail 使 CSA 满 4(或 HCA 满 128)→ 触发压缩,新 entry append Classical
  3. SWA 窗口同步滑动,丢弃最老 token、纳入最新 token;
  4. Attention kernel:Classical 上稀疏/密集读压缩 entry + State 上读 tail/SWA 精确局部。

分池 = 第 2 步写完的 只读历史 与第 1、3 步的 可变状态 永不混排。


5. 相关阅读

文档内容
V4 KV LayoutClassical + State 双池定义
V4 里的 Tail buffer 是什么?Tail 生命周期
V4 里的 SWA是什么?SWA 为何独立 eviction
V4 HiSparse为何 offload 主要针对 Classical 里 inactive C4

V4 里的 SWA是什么?

← 返回 CSA/HCA 一句话 · §4 异构 KV · KV Layout §State · 磁盘 Prefix §SWA 三档 · 答疑目录


一句话

SWA 保存最近约 $n_{\text{win}}$个 token 的 精确、未压缩 K/V,给当前 query 提供 局部因果邻域;与 CSA/HCA 压缩 entry 分池(State cache),eviction 与 磁盘 prefix 策略独立——部署上 SWA 常常是 per-token KV 体积大头

0. 四模块表里的 sliding window 指什么

Raschka 表 8-1演进总览 §1.2Attention 行业链 中,sliding windowSliding Window Attention(SWA,滑动窗口注意力)

维度说明
机制每个 query 只 attend 最近 $W$ 个 token 的 K/V(固定局部窗口),复杂度随序列长度 线性 而非 $O(L^2)$
行业语境Mistral 等长上下文模型常用此路数,介于 GQA(减 KV 头)与 MLA(低秩 latent 压缩 KV)之间
DeepSeek 落点V1–V3 主线走 MLA → DSA → CSA/HCAV4 把 SWA 作为 五类 KV 之一 与压缩 entry 分池KV Layout §State),保证最近邻域 不丢 token 级精度

即:表里的 sliding window 是 行业演进节点;DeepSeek 在 V4 才将其 显式工程化 进异构 cache,而非 V2 引入 MLA 时的同代产物。


1. 在 V4 五类 KV 里的角色

维度SWACSA / HCA
表示每 token 一条 精确 K/V按块压缩 后的 entry(4:1 或 128:1)
覆盖范围最近 窗口内 局部远距 稀疏(CSA)或 全局摘要(HCA)
存放池State cache(per-request 块)Classical KV cache(对齐 $\mathrm{lcm}(4,128)$)
是否可落盘共享体积大、策略复杂(见 §3)CSA/HCA 压缩块易落盘

CSA/HCA 把历史 压短;SWA 保证 紧邻上下文 不丢精度——二者 互补,不是替代关系。


2. 为何不能只用压缩 entry

块压缩(4:1 / 128:1)会 损失 token 级精度。最近几十个 token 对语法、指代、工具调用格式等 极敏感;SWA 用 滑动窗口 保留这部分 dense 局部,与 CSA top-$k$、HCA dense 摘要 并行参与 同一层 attention 融合。


3. 推理 infra:体积与 prefix 策略

现象说明
体积Together 早期:全量 SWA 时 per-token KV 可 高于 仅 MLA 路径;瓶颈常在 SWA state 而非 CSA/HCA 本体(HiSparse 专文
Eviction与 C4 inactive offload 正交;可只保留 高复用 SWA 检查点
磁盘 Prefix论文 §3.5.2:Full / Periodic Checkpointing / Zero 三档——在 存储带宽 vs 命中重算 间取舍(专文

4. 与 V3.2 DSA 的对比

V3.2V4 SWA
局部性主要靠 顺序滑动 + indexer top-$k$显式 SWA state + CSA/HCA 压缩
Cache 类型Indexer-Cache + Latent-Cache五类异构对象之一

5. 相关阅读

文档内容
V4 KV LayoutClassical vs State 双池;SWA 进 State
V4 磁盘 Prefix CacheSWA 三档落盘策略
V4 HiSparseSWA 与 C4 offload 的容量权衡

V4 里的 Tail buffer 是什么?

← 返回 CSA/HCA 一句话 · §4 异构 KV · KV Layout §State · 磁盘 Prefix §可落盘对象 · 答疑目录


一句话

Tail buffer 是流式 decode 时 尚未凑满一块 的 token 尾(CSA 缺 4、HCA 缺 128):在 State cache 里以 未压缩 K/V 暂存,凑满后 才压成 entry append 进 Classical 池——是压缩算法的 块对齐缓冲,不是第四种 attention 机制。


1. 为何需要 tail

块压缩要求 连续 $m$ 个 token 才能输出一条 entry:

路径块大小 $m$Tail 含义
CSA$m{=}4$当前序列长度 $\bmod 4 \neq 0$ 的 1~3 个尾 token
HCA$m'{=}128$不足 128 的 未压缩尾

若强行写入 Classical 池会破坏 $\mathrm{lcm}(4,128)$ 对齐KV layout §Classical),故 tail 单独挂在 State 池,与 SWA 同属 「仍在形成中」 的状态。


2. 生命周期

阶段TailClassical 池
Prefill / 流式 append新 token 先 进 tail已满块 写入
Tail 达到 $m$触发压缩 → 一条新 entryappend 不可变 entry
Prefix 共享Tail 随请求推进变化已满块可 共享 / 落盘

因此 磁盘 Prefix Cache 对 tail 的结论是:通常随请求走 State 池,不像 CSA/HCA 压缩块那样 直接 immutable 落盘


3. 与 SWA 同池、分工不同

Tail bufferSWA
内容等待压缩 的原始 token K/V窗口内精确局部 K/V
是否可变每来一 token 可能变长/清空滑动更新 窗口
算法角色块对齐工程缓冲注意力精度 保障

二者都在 State cache,但 eviction、prefix 策略 各自独立


4. 读图提示

异构 KV 图 下半 State / tail 区:token 流在进 CSA 4:1 / HCA 128:1 之前,末尾不足一块的部分 不会 出现在 Classical 条带里。


5. 相关阅读

文档内容
V4 KV LayoutClassical vs State 分工
CSA / HCA 混合压缩注意力§4五类对象对照表

V4 里的 Indexer KV 是什么?

← 返回 CSA/HCA 一句话 · §4 异构 KV · KV Layout §State · Lightning Indexer 详解 · DSA 梗概 · 答疑目录


一句话

Indexer KV 是 V4 CSA 稀疏路径上、沿 V3.2 Lightning Indexer 一脉的 轻量 K 向量 cache:当前 $q_t$ 对 全长历史 每条 $k_s$ 廉价打分 → top-$k$ 选出要读的 C4 压缩 entry维数、池子、是否 offload 均与 主 MLA / HCA entry 不同


1. 在 decode 一步做什么

对象动作
1当前 hidden $h_t$现算 indexer query $q_t$
2Indexer KV 第 $s$ 行 $k_s$每个历史位置 $s$ 打分 $I_{t,s}$
3Top-$k$得到下标集 $I$
4Classical 池 C4 entryCore attention 只读 $I$ 内压缩块

方向始终是 $q_t \to k_s$(当前选历史),不是每个历史 token 各自 top-$k$。机制细节见 Lightning Indexer §1


2. 为何单独一类 cache

对比Indexer KVCSA C4 entryHCA entry
目的选位置被选的远距稀疏 K/V全局 dense 摘要
典型维度(indexer 专用)压缩后主 attention更重压缩
读模式全长扫 打分仅 $I$ 内 稀疏读短序列 dense
V3.2 对应Indexer-CacheLatent-Cache

V4 把 indexer 与 C4/HCA 分开记账,引擎才能 分池 eviction、分类型 prefixKV layout)。


3. 与 ESS / offload 的关系

说明
IndexerV3.2 ESS:一般不 offload(GPU 常驻,先算 index 再决定搬哪些 latent)
V4Indexer KV 仍偏 热路径inactive C4HiSparse offload 不替代 indexer 打分(V3.2 链路描述;V4 对象名不同、分工类似)

4. 相对纯 DSA 的延续

算法线:MLA → DSA(indexer + top-$k$)→ CSA(压缩序列上再稀疏)。Indexer 不是 V4 新发明,而是 CSA 在 更短 entry 序列 上仍需要 「看谁」 的阶段;HCA 路径则走 dense attend 压缩摘要,不共用同一套 indexer 读法。


5. 相关阅读

文档内容
Lightning Indexer 详解$q_t$ 对 $k_s$ 打分、$O(L^2)$ 常数极小
DSA 稀疏注意力DSA 流水线总览
CSA / HCACSA 4:1 块 + indexer 在 V4 栈中的位置

名词解释:SM

← 返回投机解码专文 §1.1 · Compute vs Memory 答疑 · MMA 名词 · 答疑目录


SM 是什么

SM = Streaming Multiprocessor(流式多处理器)。

NVIDIA GPU 上 一块芯片里重复出现很多次 的基本计算单元:每个 SM 自带一批 CUDA Core、若干 Tensor Core寄存器文件共享内存(Shared Memory / L1),并通过片上互联访问 L2,再经 内存控制器 访问片外 HBM(显存)。

可以粗记:HBM 存数据,SM 算数据;kernel 启动后,线程块(thread block)被调度到某个 SM 上执行。


在 GPU 里排哪一层

自顶向下(与本仓库 decode / 投机解码 语境相关):

GPU 存储层级:HBM → L2 → SM(寄存器 / CUDA Core / Tensor Core)

图示详情

DeepSeek 文档里「把权重 从 HBM 搬进 SM」= 一次矩阵乘前,权重 tile 经 HBM → L2 → SM 寄存器/共享内存 流入,再在 该 SM 的 Core 上做乘加。


SM 里谁干什么

组件在 SM 内的角色本仓库常见语境
CUDA Core通用标量/向量运算、控制流、部分 epilogueFP8 反量化、partial sum FP32 续累加名词解释:MMA
Tensor Core专用 GEMM / MMA,高吞吐低精度矩阵乘训练 FP8 GEMM;推理里大 batch GEMM 更吃 TC
寄存器线程私有,最快DSpark 顺序头「寄存器级微算」指这里,不反复读 HBM
Shared Memory同 block 线程共享,比 HBM 快一个数量级FlashAttention 等 kernel 把 tile 缓存在此

一个 warp(32 线程)是 SM 上调度的基本单位;Tensor Core 的一条 MMA/WGMMA 通常由一组 warp 协作完成


为何 decode 文档总提 SM?

投机解码专文 §1.1Compute vs Memory 答疑 §2 的物理图景:

  1. batch=1 自回归 decode 每步是 GEMV(大权重矩阵 × 单向量),算术强度极低。
  2. 每生成 1 个 token,仍要把 整层权重HBM 流式读入 SM,但 SM 上实际并行处理的「有效计算量」很小。
  3. 结果:SM 上的 Core 大量时间在等 HBM/L2 送下一批权重 → 任务 Memory-Bound(带宽瓶颈,不是 FLOPS 瓶颈)。

口语里的「填不满 SM」= SM 内 Tensor Core / CUDA Core 算力闲置,内存子系统已饱和。


「搬进 SM」vs「饱和 SM」

说法含义
权重搬进 SM数据路径:HBM → … → SM 寄存器,准备做一次 matmul
填不满 SM算力视角:单位时间内 SM 内 有效 FLOPS / 利用率低,因为 访存跟不上
$K$ 宽并行(DFlash / target verify)同一次权重流,SM 上处理 $K$ 列激活 → 算术强度 ↑,相对更易 吃算力

投机解码 target verify:仍 搬 1 遍 权重进 SM,但在 $K$ 个位置并行算——FLOPS 增加,但 不再为 $K$ 个 token 各搬 $K$ 遍权重


和相邻名词不要混

缩写领域含义
SMGPU 硬件Streaming Multiprocessor
HBM显存High Bandwidth Memory,片外大容量存储
GEMV / GEMM算子矩阵×向量 / 矩阵×矩阵;decode 常是 GEMV
MMATensor Core 指令Matrix Multiply-Accumulate(名词解释:MMA
MHA / MQA注意力结构与 SM 无关

与 NVIDIA 官方术语对照

  • CUDA Programming Guide:SM 是 device 上执行 kernel 的 multiprocessor;每个 SM 有独立寄存器、共享内存与 Core 资源。
  • Hopper 及以后架构:SM 内 Tensor Core 代际不同(如 WGMMA 在 warp-group 粒度调度),但「HBM 搬入 SM 再算」的分层不变。

一句话

SM = GPU 上 真正执行 kernel 的流式多处理器;DeepSeek 推理文档里说「权重从 HBM 搬进 SM」,是在描述 decode 访存路径;说「填不满 SM」是在说 Memory-Bound 时算力单元空转——与投机解码、Eagle/DFlash 的 mem/compute 讨论直接相关。


反向引用

文档锚点 / 说明
投机解码专文 §1.1HBM → 计算单元;GEMV Memory-Bound
Compute vs Memory 答疑 §2–§4「搬进 SM」「填不满 SM」
酱紫君解读 §半自回归顺序头 寄存器 / on-chip vs HBM 拉 MoE
名词解释:MMASM 内 Tensor Core vs CUDA Core 分工

H2D / D2H 是什么?

← 返回 ESS 论文梗概 §Figure 6&7 · ← ESS 梗概 §Fig.3 / PD 时序 · 答疑目录


1. 定义

缩写英文方向典型含义
H2DHost-to-DeviceCPU 主机内存 → GPU 显存把数据 搬到 GPU 上算
D2HDevice-to-HostGPU 显存 → CPU 主机内存把结果或 cache 写回 CPU

在 CUDA 语境里,二者常通过 PCIe(ESS 论文为 PCIe 5.0)或 NVLink 完成;API 层常见 cudaMemcpyAsync(..., cudaMemcpyHostToDevice)(H2D)与 cudaMemcpyDeviceToHost(D2H)。


2. 在 ESS / V3.2 里指什么

ESS 把 Latent-Cache 大头放在 CPU DRAM,GPU 只留 Sparse Memory Pool(LRU 热子集)。每个 decode step:

  1. Indexer(GPU)选出本步需要的 top-$K$ latent index
  2. H2D(prefetch):Cache miss 的 latent entry(约 656B/条)从 CPU 拉进 GPU 热池;
  3. Core MLA Attention 在 GPU 上算;
  4. D2H(写回):本步新生成的 latent 写回 CPU 侧 Total Memory Pool。

因此 Fig.3 时间线上的 H2D prefetchD2H 写回 都是 Latent-Cache 在 CPU↔GPU 间的搬运Indexer-Cache 不 offload,也不走这条搬运链。


3. 为何 ESS 论文反复强调 H2D

问题说明
小块、分散每步多达 $K{=}2048$ 次、每次仅 656B → 原生 cudaMemcpyAsync H2D 有效带宽极低
与算力串行SGLang 默认:Indexer → H2D → Attention 全串行 → GPU 在等传输时空转
优化手段FlashTrans + UVA 拉高 H2D/D2H 带宽;DA/DBA OverlapAttention 与 H2D 并行(如 Attn0 $\parallel$ H2D)

论文报告优化后 H2D 约 0.79 → 37 GB/s,D2H 约 0.23 → 43 GB/s(Table/§3 工程数据,见 梗概 §三大工程模块)。


4. 和「Overlap」的关系

无 Overlap(默认)

Indexer 完成 → H2D 完成 → Attention 开始(全串行)

图示详情

DA Overlap

  • 把 Attention 拆成 Attn0(只用 GPU 里已有的 latent)和 Attn1(等 prefetch 完成);
  • Attn0 与 H2D 同时进行 → 用计算掩盖一部分传输延迟。

DBA 再在 batch 维切 Indexer,长上下文下算力更足,进一步掩盖 H2D。


5. 相关概念

概念与 H2D/D2H 关系
Prefetch在需要算 Attention 之前 提前发起 H2D,把 miss 的 latent 拉上来
UVA(Unified Virtual Addressing)GPU 内核直接访问 pinned 的 CPU 地址,减少小块 Memcpy 开销
PCIe 带宽H2D/D2H 的物理上限;ESS 针对「大量小传输」做软件栈优化

6. 延伸阅读

论文arXiv:2512.10576

MTP 中间 token 融合方案

← V3 §三 MTP · ← 投机解码专文 §2 · 融合 scheme SVG · 答疑目录

← 中文导读 · ← 仓库首页(EN) · 旧图 MTP 投机解码总览图 是「训练结构 + 投机对照」总览;本文 + MTP 融合 scheme 图 只讲 中间 token 怎么融进 MTP 链


1. 先建立时间线:在位置 $t$ 要预测谁?

已接受前缀 $x_{1:t}$,接下来要猜未来 token:

谁预测预测目标依赖什么
主网 OutHead$x_{t+1}$主 Transformer 在 $t$ 的 hidden $h_t^{(0)}$
MTP-1$x_{t+2}$$h_t^{(0)}$ 融合 $\mathrm{Emb}(x_{t+1})$
MTP-2$x_{t+3}$$h_t^{(1)}$ 融合 $\mathrm{Emb}(x_{t+2})$
MTP-$k$$x_{t+k+1}$$h_t^{(k-1)}$ 融合 $\mathrm{Emb}(x_{t+k})$

要点:主网负责 下一个 token;MTP 模块负责 更远的 $t{+}2, t{+}3, \ldots$,且 每一位仍因果依赖前面的中间 token

1.1 你的理解:对在哪里、错在哪里?

说法判定说明
draft 多个 token 不是一次性必须 串行 propose:先 $x_{t+1}$,再融 $\mathrm{Emb}(x_{t+1})$ 猜 $x_{t+2}$,再融 $\mathrm{Emb}(x_{t+2})$ 猜 $x_{t+3}$…
「$K$ 个 LM 头、每个头深度不同」半对半错V3 是 1 个共享 OutHead,被调用 $K$ 次;变长的是 MTP 因果链,不是 $K$ 套独立 output head
「第 2 个比第 1 个深,因为要融上一个 emb」对(指链深度)猜 $x_{t+2}$:链深度 1(1 次 Fusion+TRM,1 个中间 Emb);猜 $x_{t+3}$:链深度 2(再串 1 步,累计 2 个 Emb)
「每个 MTP 模块自身更深」每个 $\mathrm{TRM}_k$ 都是 1 个浅 Block;不是 MTP-2 = 2 层 Transformer、MTP-3 = 3 层

一句话:不是 K 路并行 LM 头;是 1 个共享 OutHead + K 步串行 Fusion/TRM,每步多注入 1 个中间 token 的 Emb。

MTP draft 串行计算链:链深度 0/1/2,共享 OutHead,逐步 Emb 注入

图示详情


2. 融合公式

对位置 $t$、MTP 深度 $k$:

$$ h_t^{\prime(k)} = M_k\bigl[,\mathrm{RMSNorm}(h_t^{(k-1)})\ ;\ \mathrm{RMSNorm}(\mathrm{Emb}(x_{t+k})),\bigr] $$

$$ h_t^{(k)} = \mathrm{TRM}k(h_t^{\prime(k)}), \qquad P(x{t+k+1}\mid x_{1:t}) = \mathrm{softmax}\bigl(\mathrm{OutHead}(h_t^{(k)})\bigr) $$

符号说明:

符号含义
$h_t^{(0)}$主网在位置 $t$ 的 hidden(不是再跑一遍主网)
$x_{t+k}$第 $k$ 个 中间 token(训练用真值,推理用已 propose 的 $\hat{x}$)
$M_k$线性投影 $d \to d$(concat 后)
$\mathrm{TRM}_k$1 层浅 Transformer Block(不是 L 层主网)
$\mathrm{OutHead}$与主网 共享 的输出头

$\oplus$ / 融合 = [RMSNorm(h); RMSNorm(Emb)] 拼接后过 $M_k$,不是把 $x_{t+1:t+k}$ 一次性全塞进去。


3. 「一次前向」到底指什么?

容易混的两层:

3.1 训练

整段序列 x_{1:T}
 -> 主 Transformer 【1 次前向】-> 所有位置的 h_t^(0)
 -> 各 t 上批量跑 MTP-1, MTP-2, ...(浅块,不重跑主网 L 层)
 -> 中间 token 用 teacher forcing 真值 Emb(x_{t+k})
  • 1 次前向 = 主网对 整批序列 只跑一遍 L 层 Transformer。
  • MTP 是在 已有 $h_t^{(0)}$ 上叠 浅 MTP Block,算力远小于「主网 × K 遍」。

3.2 推理

每个 decode

1) 主网 【1 次】target forward -> verify 已 propose 的 K 个候选
2) MTP 链 【K 小步】串行:
 Emb(x_hat_{t+1}) + MTPBlock_1 -> 猜 x_hat_{t+2}
 Emb(x_hat_{t+2}) + MTPBlock_2 -> 猜 x_hat_{t+3}
 ...
  • 不是 一个 softmax 无依赖吐出 $t{+}1,\ldots,t{+}K$。
  • 也不是 为 MTP 把 671B 主网跑 $K$ 遍;主网每轮仍 1 次 verify

4. 三个常见误解

误解实际
MTP 一次吐出 K 个独立 token因果链:深度 $k$ 只融 一个 $x_{t+k}$,更远位靠上一层 $h_t^{(k-1)}$ 传递
MTP 推理 = 主网跑 K 遍主网 1 遍;多出来的是 K 个浅 MTP Block
Emb 输入永远是真值训练 teacher forcing;推理 draft上一步刚猜的 $\hat{x}$ embed

5. 与 DSpark 对照

MTPDSpark
重活主网 1 次(verify)并行 MoE 主干 1 次
轻链MTPBlock 串 $K$ 步(融 embed)顺序头 $g_\theta$ 串 $K$ 步
权重同 checkpoint MTP 头外挂 DeepSpec draft

投机 verify 循环相同(§1);差异在 draft 从哪来、怎么猜 K 位


6. 训练目标

$$ \mathcal{L}{\mathrm{total}} = \mathcal{L}{\mathrm{main}} + \sum_{k=1}^{M} \lambda_k \mathcal{L}_{\mathrm{MTP}}^{(k)} $$

MTP 首要目的是 训练信号 densify / 表征 pre-plan;推理时可 丢弃 MTP 模块,也可 复用做 draft(V3 论文 MTP in Inference)。


7. 反向引用

文档说明
MTP 融合 scheme 图融合 scheme 总览
MTP draft 链深度图§1.1 串行 draft 链深度计算图
酱紫君解读 §MTP
投机解码专文 §2
V3 论文 Figure 3 原文(Eq.21–23)

投机解码:Compute-Bound vs Memory-Bound — DFlash / Eagle 如何对应?

← 返回投机解码专文 §1.1 · ← 专文 §4 草稿范式 · ← 酱紫君解读 §Speculative Decoding · 答疑目录

酱紫君原文一句话:

Compute-Bound 的并行验证 去替代 Memory-Bound 的串行读取

下文分 两层 读这句话,并说明 DFlash / Eagle 在 draft 侧如何对应。


1. 两层含义:不要混在一个维度上

层级「前者」Compute-Bound 并行「后者」Memory-Bound 串行代表
A. 整链宏观(target 侧)target 一次前向并行校验 $K$ 个位置传统 decode:每 token 各跑 1 次 target 前向§1.1–§1.2
B. Draft 范式($M_q$ 侧)并行出整块 $K$ 位 hidden / logits串行自回归,每步完整 draft 前向DFlash vs Eagle3

结论(直接回答)

  • 若问的是 draft 怎么猜 $K$ 个 tokenDFlash ≈ 前者(并行 / 更偏 Compute-Bound)Eagle3 ≈ 后者(串行 / Memory-Bound)
  • 若问的是 酱紫君开篇整句在说什么:主语是 投机解码相对纯自回归——用 target 的 1 次并行 verify 换掉 $K$ 次串行 target decode;Eagle / DFlash 是这之后 draft 侧的两条工程路线,不是整句的字面主语。

两层 同构:都是「少搬几次权重,多算一点并行位」。


2. 为何 decode 默认是 Memory-Bound?

专文 §1.1 的物理图景(batch=1 自回归):

  1. 每生成 1 个 token,都要把 整网权重HBM 搬进 SM名词:SM;大矩阵 × 单向量,GEMV)。
  2. 算术强度极低 → GPU 算力闲置,时间花在 访存带宽 上 → Memory-Bound
  3. 第 $N$ 个 token 必须等第 $N{-}1$ 个 → 串行读取(每步一遍权重流)。

传统 target decode 出 $K$ 个 token:$K$ 次 target 前向 ≈ $K$ 次搬大模型权重。

投机解码的 target verify:仍搬 1 遍 target 权重,但 attention / FFN 在 $K$ 个位置并行算——多出来的 FLOPS 相对带宽往往 填不满 SM名词:SM),但 不再乘 $K$ 遍搬权重 → 从系统视角 更像 Compute-Bound 的并行验证(相对「$K$ 次 mem-bound 串行读」)。


3. 为何 Eagle3 是 Memory-Bound 串行?

Eagle3 属于 自回归外挂 draft:块内第 $i$ 个 token 依赖已猜的 $\hat{x}_{t+i-1}$,不能与前面位完全并行,必须:

$$ \hat{x}_{t+1} \to \text{draft 前向}1 \to \hat{x}{t+2} \to \text{draft 前向}2 \to \cdots \to \hat{x}{t+K} $$

3.1 每步都在「再读一遍 draft 权重」

与 target 同理,draft 在 batch=1 decode 下也是 GEMV 型 前向。Eagle3 的第 $i$ 步 = 一整段 draft Transformer(多层 Attention + FFN/MoE)完整前向 → 从 HBM 再拉一遍 draft 全部层权重。

  • 块长 $K$ → $K$ 次完整 draft 前向
  • draft 侧总耗时 $\tau_q^{\mathrm{Eagle}} \approx K \cdot \tau_{\mathrm{step}}$ → $\tau_q \propto K$(专文 §4、酱紫君解读对照表)

3.2 算力利用率低

每步只推进 1 个 token 的 hidden;矩阵乘法是「大矩阵 × 单向量」,SM 上并行度有限。时间轴上大量周期在 等 HBM 返回下一层权重,而非饱和 Tensor Core → 典型 Memory-Bound

3.3 换来的收益:块内因果对齐

串行的代价是 每步显式看见 $\hat{x}{t+i-1}$,draft 分布 $q_i$ 更贴近 target 校验分布 $p_i$ → $\mathbb{E}[N{\mathrm{acc}}]$ 高、后缀稳定(专文 §6.1 表)。Eagle 用 多搬几次权重猜得更准


4. 为何 DFlash 更偏 Compute-Bound 并行?

DFlash 走 并行外挂 draft:在固定 target hidden $h_t^p$ 上,一次前向同时产出 $K$ 个位置的 hidden / 基础 logits:

$$ E = {e_{t+1}, \ldots, e_{t+K}} = \mathrm{DFlashBackbone}(h_t^p) $$

4.1 权重只搬一轮,$K$ 位并行 matmul

  • 2–3 层轻量 MoE:1 次 HBM 权重流 → $K$ 个位置并行做 Attention / FFN。
  • 相对 Eagle 的 $K$ 次完整前向,访存次数 ~$1/K$;多出来的 FLOPS 用于 并行位 而非 重复搬权重 → draft 延迟 几乎与 $K$ 弱相关(专文 §4 表「DFlash 优势」)。

4.2 瓶颈从带宽转向算力

同一轮 draft 里,SM 处理 $K$ 宽的激活 → 算术强度高于「$K$ 次单向量 GEMV」。在固定 draft 参数量下,更吃算力、更少重复访存 → 工程上归类为 Compute-Bound 并行一侧。

4.3 代价:缺块内因果

各位 共享 target 前缀,互不见块内已猜 $\hat{x}{<i}$ → 第 2 位起 $q_i \not\approx p_i$ → $\mathbb{E}[N{\mathrm{acc}}]$ 骤降(专文 §6.1)。DFlash 用 少搬权重、并行算低 draft 延迟,但 后缀接受率 不如 Eagle。


5. DSpark:在同一轮 draft 里拆「重并行 + 轻串行」

DSpark 不是第三条 mem/compute 轴,而是 把 Eagle 的串行依赖拆成极轻顺序头

阶段访存 / 算力作用
并行主干(DFlash 改进)1 次 HBM 拉 MoE;$K$ 位并行低 $\tau_q$、第 1 位高接受率
顺序头 $g_\theta$ × $K$寄存器 / on-chip;$<0.1%$ 主模型参数逐位注入 $\hat{x}_{i-1}$,补块内因果

若顺序头也每层跑 MoE → 退化成 Eagle,$\tau_q$ 再次 $\propto K$(酱紫君解读 §半自回归)。


6. 对照总表

Eagle3(后者 / 串行)DFlash(前者 / 并行)DSpark
Draft 生成$K$ 次完整 Transformer 前向1 次并行主干1 次主干 + $K$ 次轻头
主导瓶颈HBM 带宽(重复搬 draft 权重)并行算力($K$ 宽 matmul)主干同 DFlash;轻头 on-chip
$\tau_q$ vs $K$$\propto K$≈ 常数主干 ≈ 常数 + 极小尾巴
$\mathbb{E}[N_{\mathrm{acc}}]$(块内因果完整)第 1 位高,后缀掉折中
加速公式 $S_{\uparrow}$ 杠杆抬接受率;$K\tau_q$ 大$K\tau_q$ 小;后缀接受差两者折中

加速比粗式(专文 §4):

$$ S_{\uparrow} = \frac{\bigl(\mathbb{E}[N_{\mathrm{acc}}] + 1\bigr),\tau_p}{K,\tau_q + \tau_p} $$

  • Eagle:分子大($\mathbb{E}[N_{\mathrm{acc}}]$),分母里 $K\tau_q$ 也大
  • DFlash:分母小,但 $\mathbb{E}[N_{\mathrm{acc}}]$ 限制分子
  • DSpark:在 $K\tau_q$$\mathbb{E}[N_{\mathrm{acc}}]$ 之间取半自回归折中

7. 一句话记忆

  • Memory-Bound 串行读取 = batch=1 decode 下 每 token 各搬一遍权重;Eagle draft 是典型($K$ token → $K$ 遍 draft 权重流)。
  • Compute-Bound 并行验证 = 搬一遍权重、多位置并行算;target verify 与 DFlash 并行主干同属这一类。
  • DFlash ≈ 前者,Eagle ≈ 后者 —— 在 draft 范式维度上成立;开篇整句 additionally 指 target 并行 verify 替代 $K$ 次串行 target decode

8. 反向引用

文档锚点 / 说明
投机解码专文 §1.1Memory-Bound 瓶颈原文
投机解码专文 §4Eagle / DFlash / DSpark 范式表
投机解码专文 §6.1堆叠依赖与接受率
酱紫君解读 §Speculative Decoding「用并行验证替代串行读取」原文
酱紫君解读 §半自回归Eagle 式 vs DSpark 式 $\tau_q$ 对照
投机解码:为何接受率是 $\min$、修正分布是 $\max$lossless 接受路径(与 mem/compute 正交)
名词解释:SMSM / HBM / 「填不满 SM」名词

9. 外部文献

  • Leviathan et al., Fast Inference from Transformers via Speculative Decoding, arXiv:2211.17002, 2022.
  • Li et al., EAGLE: Speculative Sampling Requires Rethinking Feature Uncertainty, 2024(Eagle 系自回归 draft)。
  • DSpark_paper.pdf — Semi-Autoregressive Draft;DFlash 并行 vs Eagle 串行消融。

投机解码:为何接受率是 $\min$、修正分布是 $\max$

← 返回投机解码专文 §1.3 · 答疑目录

专文 §1.3 仅保留结论;本节用引用块展开 接受路径 / 拒绝路径 / 合并为 $p$ 与公式推导。

接受路径 — 固定前缀 $s$,draft 抽 $X \sim q$,再独立抽 $U \sim \mathrm{Uniform}(0,1)$。对 token $x$,事件 $E_{\mathrm{acc}}(x)={X{=}x,\ U\le\alpha(x)}$:draft 恰好提议 $x$校验通过,直接输出 $x$。

$$P\bigl(E_{\mathrm{acc}}(x)\bigr)=P(X{=}x)\cdot P(U\le\alpha(x)\mid X{=}x)=q(x),\alpha(x).$$

连乘是序贯试验的乘法公式:先以 $q(x)$ 抽到 $x$,再以 $\alpha(x)$ 通过校验。

拒绝路径 — 「发生拒绝且最终输出 $x$」:丢弃提议的 $X$,从 $p_{\mathrm{resample}}$ 抽到 $X'{=}x$。与 $E_{\mathrm{acc}}(x)$ 不交

合并为 target 分布 — 输出 $x$ 的总概率

$$\pi(x)=P\bigl(E_{\mathrm{acc}}(x)\bigr)+P(\mathrm{reject}),p_{\mathrm{resample}}(x).$$

取 $\alpha(x)=\min(1,p(x)/q(x))$ 使接受路径贡献 $q\alpha=\min(q,p)$;取 $p_{\mathrm{resample}}(x)\propto\max(0,p(x)-q(x))$ 补足拒绝路径上的剩余质量,可得 $\pi(x)=p(x)$(§5 逐步验算)。draft 只改 $q$ 与接受有多快,不改边际分布。


1. 问题设定

固定已接受前缀 $s$。希望下一个 token 服从 target 分布 $p(\cdot)\equiv p_{\mathrm{tgt}}(\cdot \mid s)$。

投机解码让 draft 先提议 token $x$,其(条件)概率为 $q(x)\equiv p_{\mathrm{draft}}(x \mid s)$。算法只做两件事:

  1. 以某个概率 接受 $x$;
  2. 否则 拒绝,再从另一个分布 重采 $x'$。

要证明 lossless,只需证明:对任意词汇表元素 $x$,最终输出 $x$ 的总概率 $\pi(x)$ 恰好等于 $p(x)$。


2. 单步随机实验:何谓「接受路径」、为何是连乘

2.1 算法对应的一次抽样

把「draft 提议 → target 校验」看成 两步随机试验

  1. 提议:随机变量 $X \sim q$(draft 按 $q$ 抽一个 token,$P(X{=}x)=q(x)$)。
  2. 校验:再抽 $U \sim \mathrm{Uniform}(0,1)$,与 $X$ 独立;若 $U \le \alpha(X)$ 则 接受,否则 拒绝

其中 $\alpha(x)$ 是待定的接受率(下一节解出 $\alpha(x)=\min(1,p(x)/q(x))$)。

输出规则

事件输出
接受($U \le \alpha(X)$)直接输出提议的 $X$
拒绝($U > \alpha(X)$)丢弃 $X$,从 $p_{\mathrm{resample}}$ 另抽 $X'$ 输出

2.2 「接受路径」的严格含义

对某个 具体的 token $x$,定义事件

$$ E_{\mathrm{acc}}(x) ;=; { X = x ;\land; U \le \alpha(x) }. $$

即:draft 恰好提议了 $x$,且校验通过。全文所称 接受路径(acceptance path) 就是指输出 $x$ 时,$E_{\mathrm{acc}}(x)$ 发生这一条分支。

与之互斥的是 拒绝路径(rejection path)

$$ E_{\mathrm{rej}}(x) ;=; { \text{发生拒绝} } ;\land; { X' = x }, $$

其中 $X' \sim p_{\mathrm{resample}}$ 是拒绝后另抽的 token。

两条路径 不交:接受时输出的是 $X$,拒绝时输出的是 $X' \neq X$(逻辑上先拒绝再重采,不会「又接受 draft 又重采」)。

2.3 为何是 $q,\alpha$

乘法公式 / 条件概率($U$ 与 $X$ 独立,故给定 $X{=}x$ 时接受概率为 $\alpha(x)$):

$$ P\bigl(E_{\mathrm{acc}}(x)\bigr) = P(X{=}x) \cdot P(U \le \alpha(x) \mid X{=}x) = q(x),\alpha(x). $$

连乘不是额外假设,而是「先以 $q(x)$ 抽到 $x$,再以 $\alpha(x)$ 通过校验」这一 序贯试验 的自然写法。类比:先掷骰得到 6 的概率是 $\frac{1}{6}$,再独立掷硬币正面才采纳,则「出 6 且采纳」$=\frac{1}{6}\times\frac{1}{2}$。

2.4 两条路径合并

任意 $x$ 的最终输出概率是 两条不交路径之和

$$ \pi(x) = \underbrace{P\bigl(E_{\mathrm{acc}}(x)\bigr)}_{q(x)\alpha(x)}

  • \underbrace{P(\mathrm{reject})\cdot p_{\mathrm{resample}}(x)}_{\text{拒绝后重采}}. $$

后文先定 $\alpha$ 使 $q\alpha=\min(q,p)$,再定 $p_{\mathrm{resample}}$ 补足 $\max(0,p-q)$,即得 $\pi(x)=p(x)$。


3. 接受率为何是 $\min!\left}{q}\right)$

记接受概率为 $\alpha(x)$。由 §2.3,接受路径上输出 $x$ 的概率为 $q(x),\alpha(x)$。要求这条路径对 $x$ 的贡献是 $p(x)$ 的一部分,且不超过 $p(x)$(超出部分留给拒绝路径)。最自然要求是

$$ q(x),\alpha(x) = \min\bigl(q(x),, p(x)\bigr). $$

当 $q(x)>0$ 时两边同除以 $q(x)$:

$$ \alpha(x) = \min!\left(1,\ \frac{p(x)}{q(x)}\right). $$

直觉

关系含义接受率
$q(x) > p(x)$draft 高估 $x$$\dfrac{p}{q} < 1$,经常拒绝以 压低 $x$ 出现频率
$q(x) \le p(x)$draft 低估或未覆盖 $x$接受率 $=1$;$p-q$ 的正差留给重采分布补足

这就是 $\min(1,p/q)$ 的来源:不是经验公式,而是要求「接受路径贡献 $\min(q,p)$」的代数解(见 §2.2 对接受路径的定义)。


4. 修正分布为何 $\propto \max$

对每个 $x$,target 需要总质量 $p(x)$。接受路径已给出 $\min(q(x),p(x))$,还差

$$ p(x) - \min\bigl(q(x),p(x)\bigr) = \max\bigl(0,, p(x) - q(x)\bigr). $$

把所有 token 上「尚未满足的质量」收集起来,归一化,定义 拒绝后重采分布

$$ p_{\mathrm{resample}}(x) = \frac{\max\bigl(0,, p(x) - q(x)\bigr)}{Z}, \qquad Z = \sum_{x'} \max\bigl(0,, p(x') - q(x')\bigr). $$

直觉:$p-q>0$ 的位置,正是 draft 没给够 的概率质量;拒绝后专门从这些位置补抽,把 target 分布「缺的那一块」填回去。


5. 合并后恰好等于 $p$

基础恒等式 — 记 $a=p(x)$、$b=q(x)$,则

$$\min(a,b) + \max(0,, a-b) = a.$$

分两种情形验证:若 $p \le q$,则 $\min(p,q)=p$、$\max(0,p-q)=0$,相加得 $p$;若 $p > q$,则 $\min(p,q)=q$、$\max(0,p-q)=p-q$,相加得 $q+(p-q)=p$。因此对每个 token,接受路径质量 $\min(q,p)$ 与拒绝路径补足 $\max(0,p-q)$ 刚好拼回 target 的 $p(x)$,与 draft 无关。

拒绝概率

$$ P(\mathrm{reject}) = 1 - \sum_x q(x),\alpha(x) = 1 - \sum_x \min\bigl(q(x),p(x)\bigr) = Z. $$

(由上文恒等式,$\sum_x \min(q,p) + \sum_x \max(0,p-q) = \sum_x p(x) = 1$,故 $P(\mathrm{reject}) = 1 - \sum_x \min(q,p) = \sum_x \max(0,p-q) = Z$。)

最终输出 $x$ 的概率:

$$ \pi(x) = \underbrace{q(x),\alpha(x)}{\min(q,p)} + \underbrace{P(\mathrm{reject})\cdot p{\mathrm{resample}}(x)}_{Z \cdot \frac{\max(0,p-q)}{Z}} = \min\bigl(q(x),p(x)\bigr) + \max\bigl(0,, p(x)-q(x)\bigr) = p(x). $$

因此对 每一个 $x$ 都有 $\pi(x)=p(x)$:与「不用 draft、直接从 $p$ 采样」同分布


6. 与投机解码整链的关系

  • 上面对 单个位置、固定前缀 $s$ 证明一次;链上第 $1,2,\ldots$ 位在 更新前缀后 重复同一规则。
  • target 一次并行前向 只是同时算出各位置的 $p_{\mathrm{tgt}}$;接受/拒绝规则不变。
  • draft 只影响 $q$ 与接受有多快,不改变 $\pi=p$ 的构造。

7. 参考

  • Leviathan, Y., Kalman, M., & Matias, Y. Fast Inference from Transformers via Speculative Decoding. arXiv:2211.17002.
  • 专文机制总览:投机解码与 DSpark§1.2–§1.3

V4 为何要分池?块对齐与尾缓冲怎么配合?

← 返回 KV Layout §为何单一 layout 不够 · Classical 池 · State 池 · Tail buffer · SWA · 答疑目录


一句话

V4 同时有 两种块长(CSA $m{=}4$、HCA $m'{=}128$)和 两种生命周期(已压缩定型 vs 仍在滑动/凑块);Classical 池 只放 凑满且不可变 的压缩 entry,State 池尾缓冲 + SWA每步都在变 的状态——混在一个池里会同时破坏 $\mathrm{lcm}$ 块对齐、prefix 共享、HiSparse offload


1. 为什么要分池管理

1.1 不是「多几种 KV」那么简单,是 读写语义不同

Classical KV cacheState cache
存什么已凑满的 CSA C4 / HCA 压缩 entryTail(未凑满块)+ SWA(滑动窗口精确 K/V)+ 可能含 Indexer
是否可变写入后 不可变(immutable)每 decode 步 都可能变(tail 变长/清空,SWA 滑动)
能否 prefix 共享 — 同一压缩块多请求只存一份 — 随各请求当前长度 / 窗口不同
能否落盘 / offloadCSA/HCA 块 优先(紧凑、不变)通常 跟请求走;SWA 还有三档策略(磁盘 prefix
分配粒度压缩 entry append每请求固定 state block(batch 内对齐)

V3/V3.2 可以「一层一条同质 latent 流」——shape 一样、生命周期一样。V4 把 远距压缩历史局部未压缩 / 未定型 混在同一抽象里,引擎就无法用 同一套 eviction、同一套 prefix 哈希、同一套 DMA 粒度 管理。

1.2 压缩比 $m \neq m'$ 放大了这个问题

  • CSA:每 4 token → 1 条 C4 entry(远距 稀疏 top-$k$ 读)
  • HCA:每 128 token → 1 条 HCA entry(全局 dense 读)

二者 entry 密度差 32 倍,读模式也不同。若强行共池:

  1. 块边界对不齐 — 同一 token 区间在 CSA 是 32 条 entry、在 HCA 是 1 条,物理槽位无法统一编号;
  2. 尾部长度不同 — CSA tail 最多 3 token,HCA tail 最多 127 token,与 SWA 窗口 叠加 后 State 侧体积不可预测;
  3. eviction 策略冲突 — HiSparse 想 offload inactive C4;SWA 却要 热窗口常驻 — 必须在池级分开。

所以表里写:$m{=}4$、$m'{=}128$ 不同 → 块对齐、尾缓冲、SWA 窗口必须分池管理


2. 块对齐:$\mathrm{lcm}=128$ 是啥逻辑

2.1 压缩器的硬约束

块压缩不是「任意截断」,而是:

$$ \text{连续 } m \text{ 个 token 的 K/V} ;\xrightarrow{;\text{compress};}; 1 \text{ 条 entry} $$

  • CSA:$m=4$
  • HCA:$m'=128$

引擎要为 已完成的块 在 Classical 池里分配 连续、可索引 的槽位。若物理分配粒度只按 4 对齐,HCA 每 128 token 才一条,中间会产生 跨槽碎片;若只按 128 对齐,CSA 每 4 token 一条又无法在子块内寻址。

2.2 用 lcm 统一「大块」边界

$$ \mathrm{lcm}(m,m') = \mathrm{lcm}(4,128) = 128 $$

含义:每 128 个 token 构成一个 对齐超级块,在这个边界上:

在这 128 token 内CSAHCA
满块 entry 数$128/4 = 32$ 条 C4$128/128 = 1$ 条 HCA
边界32 条 C4 刚好填满1 条 HCA 刚好填满

任意 已完成 的历史长度 $L$ 可写成:

$$ L = 128 \cdot q + r,\quad 0 \le r < 128 $$

  • $128q$ token → Classical 池里有 $32q$ 条 C4 + $q$ 条 HCA(一一对应同一批 token 区间)
  • 剩余 $r$ token → 进 tail不进 Classical(见下节)

这样 prefix 共享、落盘、HiSparse 按 entry 搬移 时,CSA 与 HCA 的「第 $k$ 个 128-token 段」语义一致,不会出现半块只压了一边的情况。

2.3 小例子:$L=130$ token

区间Classical 池State 池
token $1\ldots128$32×C4 + 1×HCA(已满)
token $129\ldots130$不写(未满 4 也未满 128 的 公共尾Tail 2 token + SWA 窗口(含最近 128,与上表重叠由 kernel 定义)

若把 129–130 强行写入 Classical,要么 伪造半条 HCA(算法不允许),要么 破坏 C4 四元组完整性


3. 尾缓冲的逻辑

3.1 流式 decode:来一 token,不能立刻压块

Prefill / decode 逐个 append token 时,序列长度 $L$ 任意时刻 不一定 被 4 或 128 整除。

Tail buffer = 当前 还凑不成一整块 的 K/V 暂存区:

路径何时「满块」Tail 最多多长
CSA$L \bmod 4 = 0$3 token
HCA$L \bmod 128 = 0$127 token

满块时:压缩 → 一条 entry append 到 Classical 池 → tail 中对应 token 清空或前移

3.2 为何 tail 必须在 State 池

若在 Classical若在 State(实际)
entry 未定型却要占位 → 无法 immutable 共享明确标记为 进行中
prefix 命中时要拷贝 半块垃圾命中后只需 重算 / 补 tail + SWA
offload 无法判断 是否完整块Classical 里 全是满块,HiSparse 可安全搬 inactive C4

Tail 是 块对齐的工程缓冲,不是新 attention 类型(详见 tail buffer 答疑)。

3.3 与 SWA 同池、不同职责

二者都在 State 池,但:

TailSWA
目的等凑满 压缩块保留 局部精度
变化方式长度 $0\ldots m{-}1$ 阶跃窗口 滑动
与 Classical 关系满则 迁入永不压成 CSA/HCA entry

4. 串起来:一次 decode 步发生了什么

设当前已满 Classical 的历史为 $128q$ token,State 里有 tail + SWA。

  1. 新 token 到达 → K/V 写入 tail(tail 长度 $+1$);
  2. 若 tail 使 CSA 满 4(或 HCA 满 128)→ 触发压缩,新 entry append Classical
  3. SWA 窗口同步滑动,丢弃最老 token、纳入最新 token;
  4. Attention kernel:Classical 上稀疏/密集读压缩 entry + State 上读 tail/SWA 精确局部。

分池 = 第 2 步写完的 只读历史 与第 1、3 步的 可变状态 永不混排。


5. 相关阅读

文档内容
V4 KV LayoutClassical + State 双池定义
V4 里的 Tail buffer 是什么?Tail 生命周期
V4 里的 SWA是什么?SWA 为何独立 eviction
V4 HiSparse为何 offload 主要针对 Classical 里 inactive C4

V4 里的 SWA是什么?

← 返回 CSA/HCA 一句话 · §4 异构 KV · KV Layout §State · 磁盘 Prefix §SWA 三档 · 答疑目录


一句话

SWA 保存最近约 $n_{\text{win}}$个 token 的 精确、未压缩 K/V,给当前 query 提供 局部因果邻域;与 CSA/HCA 压缩 entry 分池(State cache),eviction 与 磁盘 prefix 策略独立——部署上 SWA 常常是 per-token KV 体积大头

0. 四模块表里的 sliding window 指什么

Raschka 表 8-1演进总览 §1.2Attention 行业链 中,sliding windowSliding Window Attention(SWA,滑动窗口注意力)

维度说明
机制每个 query 只 attend 最近 $W$ 个 token 的 K/V(固定局部窗口),复杂度随序列长度 线性 而非 $O(L^2)$
行业语境Mistral 等长上下文模型常用此路数,介于 GQA(减 KV 头)与 MLA(低秩 latent 压缩 KV)之间
DeepSeek 落点V1–V3 主线走 MLA → DSA → CSA/HCAV4 把 SWA 作为 五类 KV 之一 与压缩 entry 分池KV Layout §State),保证最近邻域 不丢 token 级精度

即:表里的 sliding window 是 行业演进节点;DeepSeek 在 V4 才将其 显式工程化 进异构 cache,而非 V2 引入 MLA 时的同代产物。


1. 在 V4 五类 KV 里的角色

维度SWACSA / HCA
表示每 token 一条 精确 K/V按块压缩 后的 entry(4:1 或 128:1)
覆盖范围最近 窗口内 局部远距 稀疏(CSA)或 全局摘要(HCA)
存放池State cache(per-request 块)Classical KV cache(对齐 $\mathrm{lcm}(4,128)$)
是否可落盘共享体积大、策略复杂(见 §3)CSA/HCA 压缩块易落盘

CSA/HCA 把历史 压短;SWA 保证 紧邻上下文 不丢精度——二者 互补,不是替代关系。


2. 为何不能只用压缩 entry

块压缩(4:1 / 128:1)会 损失 token 级精度。最近几十个 token 对语法、指代、工具调用格式等 极敏感;SWA 用 滑动窗口 保留这部分 dense 局部,与 CSA top-$k$、HCA dense 摘要 并行参与 同一层 attention 融合。


3. 推理 infra:体积与 prefix 策略

现象说明
体积Together 早期:全量 SWA 时 per-token KV 可 高于 仅 MLA 路径;瓶颈常在 SWA state 而非 CSA/HCA 本体(HiSparse 专文
Eviction与 C4 inactive offload 正交;可只保留 高复用 SWA 检查点
磁盘 Prefix论文 §3.5.2:Full / Periodic Checkpointing / Zero 三档——在 存储带宽 vs 命中重算 间取舍(专文

4. 与 V3.2 DSA 的对比

V3.2V4 SWA
局部性主要靠 顺序滑动 + indexer top-$k$显式 SWA state + CSA/HCA 压缩
Cache 类型Indexer-Cache + Latent-Cache五类异构对象之一

5. 相关阅读

文档内容
V4 KV LayoutClassical vs State 双池;SWA 进 State
V4 磁盘 Prefix CacheSWA 三档落盘策略
V4 HiSparseSWA 与 C4 offload 的容量权衡

V4 里的 Tail buffer 是什么?

← 返回 CSA/HCA 一句话 · §4 异构 KV · KV Layout §State · 磁盘 Prefix §可落盘对象 · 答疑目录


一句话

Tail buffer 是流式 decode 时 尚未凑满一块 的 token 尾(CSA 缺 4、HCA 缺 128):在 State cache 里以 未压缩 K/V 暂存,凑满后 才压成 entry append 进 Classical 池——是压缩算法的 块对齐缓冲,不是第四种 attention 机制。


1. 为何需要 tail

块压缩要求 连续 $m$ 个 token 才能输出一条 entry:

路径块大小 $m$Tail 含义
CSA$m{=}4$当前序列长度 $\bmod 4 \neq 0$ 的 1~3 个尾 token
HCA$m'{=}128$不足 128 的 未压缩尾

若强行写入 Classical 池会破坏 $\mathrm{lcm}(4,128)$ 对齐KV layout §Classical),故 tail 单独挂在 State 池,与 SWA 同属 「仍在形成中」 的状态。


2. 生命周期

阶段TailClassical 池
Prefill / 流式 append新 token 先 进 tail已满块 写入
Tail 达到 $m$触发压缩 → 一条新 entryappend 不可变 entry
Prefix 共享Tail 随请求推进变化已满块可 共享 / 落盘

因此 磁盘 Prefix Cache 对 tail 的结论是:通常随请求走 State 池,不像 CSA/HCA 压缩块那样 直接 immutable 落盘


3. 与 SWA 同池、分工不同

Tail bufferSWA
内容等待压缩 的原始 token K/V窗口内精确局部 K/V
是否可变每来一 token 可能变长/清空滑动更新 窗口
算法角色块对齐工程缓冲注意力精度 保障

二者都在 State cache,但 eviction、prefix 策略 各自独立


4. 读图提示

异构 KV 图 下半 State / tail 区:token 流在进 CSA 4:1 / HCA 128:1 之前,末尾不足一块的部分 不会 出现在 Classical 条带里。


5. 相关阅读

文档内容
V4 KV LayoutClassical vs State 分工
CSA / HCA 混合压缩注意力§4五类对象对照表

← 返回 Engram 系列导读 · 答疑目录 · ← 中文导读 · ← 仓库首页(EN)

Engram 系列 · 答疑

主文档公式/推导类细节放本目录;engram-series-overview.md 只保留一行跳转。

L1 HBM / L2 DRAM / L3 CXL.mem:三级存储区别

← 返回 §CXL 三级存储 · 硬件拓扑 02b · 访问时序 02c · prefetch window · CXL vs RDMA · 答疑目录


问题

CXL 硬件拓扑图 里出现 L1 HBM、L2 Local DRAM、L3 CXL Pool——三者物理上是什么?在 Engram 部署里各放什么、差在哪?


结论

HBM(L1)Host DRAM(L2)CXL.mem(L3)
物理位置焊在 GPU 封装内CPU 插槽旁 主板内存条CXL 扩展内存卡,经 Switch 挂到 PCIe/CXL fabric
谁直接访存GPU SM(最高带宽)CPU;GPU 经 PCIe 间接读CPU / GPU 经 CXL 协议 load/store(像内存,不像网卡消息)
典型容量数十 GB / 卡TiB 级 / 节点论文 256 GB/卡;多机池 4 TB / 8 机
延迟最低(GPU 片上)本地 DRAM 级论文:≈ 本地 DRAM(远好于小包 RDMA)
带宽特点极高(TB/s 级),容量瓶颈高,按节点私有交换机聚合 512 GB/s多机共享一份表
Engram 放什么MoE/Attn 权重、hidden、gate/conv 小参数、prefetch staging热 embedding 缓存、CPU offsets[]、bounce buffer、CXL 的 mmap 窗口完整 Engram embedding 大表(只读、DAX mmap)
大表能否全放下❌ 装不下百亿参数表⚠️ 单机可放一部分;多机各拷一份贵机架级共享一份

一句话HBM = GPU 算力旁边的小而快内存DRAM = CPU 旁边的大内存(可当中间缓存)CXL.mem = 用内存语义挂在 fabric 上的超大扩展池,专扛 Engram 只读大表 + 多机共享


1. 三种介质分别是什么

HBM

  • 是什么:与 GPU die 2.5D/3D 封装的专用 DRAM 栈(如 H100 上的 HBM2e/HBM3)。
  • 特点:带宽极高、延迟最低,但 每卡只有几十 GB~百余 GB,且 只有 GPU 能高效用
  • 类比:GPU 的「工作台台面」——算子权重、激活、临时 buffer 必须在这儿才能跑满算力。

Host DRAM

  • 是什么:服务器主板上 DDR4/DDR5 内存条,CPU 通过内存控制器访问。
  • 特点:容量 比 HBM 大一个数量级以上(单节点可达 TB),延迟低,但 GPU 访问要经过 PCIe(除非 pinned + DMA)。
  • Engram 语境:奠基论文把大表 offload 到 Host DRAM,异步 prefetch 进 HBM,吞吐损失 <3%;CXL 论文里 L2 还可做 Zipf 热 n-gram 缓存,命中则不必每次打到 L3。

CXL.mem

  • 是什么:符合 CXL.mem 协议的 扩展内存设备(内存语义设备),经 CXL Adapter + Switch 接到 CPU/GPU 同一 fabric。
  • 与「普通 DRAM」的区别
  • 不在 主板 DIMM 槽里,而是 扩展卡 / 池化设备
  • 多主机可通过 Switch 映射到各自地址空间共享物理一份数据(Engram 表只读,无需 cache coherence);
  • 软件用 DAX + mmapcxl_base + offset[i] 按 cache line 细粒度 load/store,适合 Engram 5 KB×多段离散小读
  • 与 RDMA 池的区别:RDMA 是 消息式 远端读写,小包效率差;CXL 是 字节寻址内存,延迟接近 DRAM(见 CXL 论文 Figure 3/5/6)。

2. Engram 三级分层

CXL 论文 Figure 4 把部署抽象为三层(与 02b 拓扑图 一致):

L3 CXL Pool 完整 embedding 表(只读,多机一份)
 | prefetch / memcpy
L2 Host DRAM 热缓存、CPU 算 offsets、可选中转
 | DMA / P2P
L1 GPU HBM staging e_t -> W_K,W_V, gate, conv -> 写回 H
步骤典型位置说明
[hash / offsetsCPU + L2
读表L3(未命中热缓存时)离散小读;可 overlap 前层 GPU 计算
热命中L2 或 L1 缓存Zipf:高频 n-gram 不必每次访问 L3
gate / conv / AttnL1 HBM需要 $h_t$,必须在 GPU

数据通路:

  • CXL → CPU:OpenMP 并行 memcpy(延迟 ≈ DRAM)
  • CXL → GPU(推荐)cxl2vram_copy P2P,离散 embedding 直进 HBM staging

详见 02c 访问时序


3. 为什么 Engram 需要三层,而不是「全放 HBM」

  1. 表太大:百亿参数级 embedding 放不进 HBM;全复制到每机 DRAM 贵且浪费
  2. 访问又小又碎:每 token 每层约 5 KB、多段随机读——适合 内存语义细粒度读,不适合 RDMA 小包风暴。
  3. 索引可提前算:与 GPU 算力 overlap prefetch(~56 μs 窗口 / 层,见 overview §②)。
  4. 多机推理L3 共享一份表 + L2/L1 热缓存,比每节点 DRAM 全副本更省。

4. 和「奠基论文只用 DRAM offload」的关系

阶段存储
Engram ①(2601.07372)大表 offload 到 Host DRAM,PCIe prefetch 到 HBM
CXL Pooling ②(2603.10087)表升级到 L3 CXL 共享池;L2 热缓存 + L1 staging 逻辑 不变

CXL 论文结论:端到端吞吐 CXL ≈ DRAM(如 Qwen3-4B 1.2% 损失),成本上多机大表更优。


5. 速查:该把什么放在哪

数据推荐层级
Transformer / MoE 权重L1 HBM
当前 hidden、KV(若在本机)L1 HBM
Engram gate / ShortConv 参数L1 HBM(小)
prefetch 到的 $e_t$ / embedding 行L1 staging
高频 embedding 缓存L2(可选 L1 更小缓存)
完整 Engram 表L3 CXL(或单机时 L2 DRAM
hash offsets[] 计算CPU(不占 HBM 算力)

参考

Prefetch window:不是「CPU 比 GPU 强」,而是 CPU 先点火、GPU 腾出时间窗

← 返回 §prefetch window · 02c 时序图 · L1–L3 存储 · CXL vs RDMA · 答疑目录


问题

02c 图 右侧 prefetch window 和左侧绿色 Step 0/1(CPU) 连在一起——是不是 prefetch 放在 CPU 上比 GPU 更强?为什么?


结论

不是。 Prefetch window 不是一块「放在 CPU 上的内存」,而是 一段时间

$$ \text{window} = \sum_{i=1}^{k-1} t_{\mathrm{exec}}^{\mathrm{GPU}}(i) $$

即:Engram 插在 第 $k$ 层 时,GPU 先算 Layer $0 \ldots k-1$ 的这段时间,用来 并行 把 Layer $k$ 要的 embedding 从 CXL 拉到 HBM staging。

角色做什么「强」在哪
CPU(Step 0–1)token IDsoffsets[];SGLang 异步发起 prefetch不必等 GPU hidden;decode 步一开始就点火,不占 SM
GPU(窗口主体)算 Layer $0..k-1$(Attn/MoE 等)算力时间 盖住 CXL 读延迟
CXL / DMA(Step 2)L3 → L1 staging(Path B P2P 推荐与上两行 overlap,不是串在 GPU critical path 前面

所以图里绿色框多,是因为 「谁先能知道要读哪」在 CPU/host不是说 CXL 数据通路 CPU 比 GPU 更快——Step 2 推荐仍是 CXL→GPU P2Pcxl2vram_copy)。


0. 基础概念:decode、Layer $k$、hidden、「更早做」

Decode是什么

LLM 推理分两段:

阶段在干什么一次 forward 处理多少新 token
Prefill吃进整段 prompt很多 token(整段并行)
Decode已生成回复后,每步只新来 1 个 token,再跑一遍模型通常 1 个新 token / 步

Decode 步 = 每生成一个新 token 时触发的 一次完整前向(从 Layer 0 一直算到最后一层,再采样下一个 token)。

02c 图 标题 one Decode step 画的就是:这一步 里 Engram 怎么 prefetch。

Layer $k$、Layer $k-1$ 是什么

Transformer backbone 是一叠 相同结构的块,编号 $0,1,\ldots,L-1$(如 64 层)。

  • Layer $k$:Engram 插在第 $k$ 块里 的那一层。
  • Layer $k-1$:紧挨在它 上面 的一层(下标小 1),要先算完,才能得到喂给 Layer $k$ 的 hidden。

数据流(简化):

$$ h^{(0)} \xrightarrow{\text{Layer 0}} h^{(1)} \xrightarrow{\text{Layer 1}} h^{(2)} \xrightarrow{\text{Engram@2 + Attn + MoE}} \cdots $$

上标 $(\ell)$ 表示 第几层之后 的表示;$h^{(k-1)}$ 就是 Layer $k-1$ 算完以后 的向量。

Hidden是什么

  • $h_t$:序列里 位置 $t$ 的 hidden 向量(一个长度为 $d$ 的向量),承载「读到当前 token 为止,模型内部的语境表示」。
  • $h_t^{(\ell)}$:同一位置 $t$ 在 第 $\ell$ 层之后 的 hidden。

Attention、MoE 路由、Engram 门控 $\alpha_t$ 都要看 hidden(动态、依赖前文计算)。

对比:

依赖什么何时可知
n-gram / hash 索引input token IDsdecode 步 一开始 就有
$h_t^{(\ell)}$前面层 Attention/MoE 算出来Layer $\ell$ 算完之后 才有

「更早做」到底是多早

更早 = 相对「必须等 Layer $k-1$ 的 hidden 出来之后再决定读什么」。

Engram(可更早) — decode 步时间线:

时刻 T0 本步新 token 的 ID 已知(整段 input_ids 都在)
 CPU:hash → offsets[](所有 Engram 层要读哪几行都定了)
 CPU:SGLang 立刻异步向 CXL 发读请求 ← 「更早做」指这里

时刻 T0~T1 GPU 并行算 Layer 0, 1, …, k-1 ← prefetch window(藏 CXL 延迟)
 ‖ CXL 并行把 Layer k 要的 embedding 拉进 staging

时刻 T1 GPU 算 Layer k:staging 里已有 e_t,再 gate(h_t, …)

MoE(不能更早) — 路由要看 当前 hidden

Layer k-1 算完 → 得到 h^{(k-1)} → 才知道选哪个 expert → 才能去读/算

所以 MoE 的「该激活谁」最早也要等到 $k-1$ 层结束;prefetch 有效窗口 $\approx 0$(相对 Engram 而言)。

「更早做」不是

  • ❌ 比 prefill 更早(prefill 是另一阶段;这里指 同一 decode 步内 相对层间依赖更早)
  • ❌ CPU 比 GPU 算得快
  • 在 GPU 还没算到 Layer $k-1$ 之前,仅凭 token IDs 就启动 CXL 读 Layer $k$ 的表项

和 Step 3 图的关系

01d 多头寻址图 CPU 区:$g_{t,n}\to\varphi\to z\to E[\cdot]$ 都只依赖 input → 所以能在 decode 步入口 在 CPU 完成,不必等 GPU hidden。


1. 先纠正两个常见误读

误读 A:「prefetch window = CPU 侧缓存」

  • 正解:右侧竖条是 时间轴——蓝条 = GPU 在执行前面层;橙条 = 同一时刻 CXL 在拉 Layer $k$ 的数据。
  • 条件 $L_{\mathrm{pool}} < \sum_{i=1}^{k-1} t_{\mathrm{exec}}(i)$ 说的是:池子读延迟 必须 小于 GPU 算完 $k-1$ 层的时间,读才能在 Layer $k$ 用到前完成。

误读 B:「Path A比 Path B更推荐」

02c 图 Step 2 同时画了:

通路做法论文态度
ACXL → CPU(OpenMP memcpy)→ 再进 GPU延迟 ≈ DRAM,可行
BCXL → GPU staging(PCIe P2Pcxl2vram_copy推荐:绕过 CPU 搬运、少 launch 开销

绿色 path A 框 ≠ 「整体以 CPU 为准」;它是 数据搬运的备选路径点火调度(Step 0–1)在 CPU/host;搬运终点仍是 L1 HBM staging


2. 为什么 Step 0–1 必须在 CPU/host 侧

Engram 索引 只依赖 input token,因此:

  1. Decode 步入口 就知道 Layer $k$ 要读哪些 offset[i]不必等 Layer $k-1$ 的 hidden。
  2. CPU 并行算 hash / offsets 几乎不占 GPU;SGLang 可 立刻 向 CXL 发异步读。
  3. 若索引像 MoE 路由那样 依赖 $h_t$,则必须等前层算完才知道读什么 → prefetch 无法提前 → 有效窗口 $\approx 0$。

这就是「CPU 侧先算索引」对 prefetch 不可或缺——不是因为 CPU 算力比 GPU 强,而是因为 这件事本来就不该占 GPU,且可以极早做


3. GPU 在 window 里做什么

没有 GPU 在前面层 实打实算 $t_{\mathrm{exec}}$,就没有窗口长度:

  • Qwen3-32B 例:每步 $\approx 3.6,\mathrm{ms}$ / 64 层 → 每层 ~56 μs
  • Engram 若在 Layer 2:窗口只有 Layer 1 那一层 的时间 ≈ 56 μs
  • 这 56 μs 内必须完成 CXL 离散读 + 进 staging;故论文强调 CXL 近 DRAM 延迟,RDMA 小包不够(图右下角 why CXL not RDMA)。→ 完整推导

GPU 越强 / batch 越大 → 前面层越久 → 窗口越宽 → prefetch 越好藏。


4. 串起来:一次 decode 步时间线

t0 ForwardBatch 到达
 CPU Step0: offsets[] = hash(token_ids) ← 不占用 GPU
 CPU Step1: SGLang 异步发起 CXL read ← 目标 gpu_staging

t0..t1 GPU: Layer 0, 1, …, k-1 ← 这就是 prefetch window(蓝条)
 ‖ 并行
 CXL: fetch layer-k embeddings ← 橙条(Step 2 Path B)

t1 GPU Layer k: staging 已有 e_t
 Step3: W_K,W_V, gate, conv, 写回 H ← 必须在 HBM

「强」的是整套 overlap;CPU 负责 早、准地发起;GPU 负责 撑开时间窗 + 消费 staging


5. 和「奠基论文 DRAM offload」一致

单机 Host DRAM offload 时逻辑相同:索引在 CPU 算、prefetch 与前几层 overlap,只是 L3 换成 L2 DRAM。CXL 论文把 L3 换成共享池,window 机制不变


6. 一图对照 02c

02c 元素含义
绿圈 Step 0–1Host/CPU 编排(索引 + 异步触发)
黄框 L3CXL 池里离散 320B 行
绿框 path A可选:经 CPU memcpy
蓝框 L1 stagingGPU HBM 终点
虚线 P2P preferred推荐 直读 CXL→GPU
右侧 windowGPU 算 0..k-1 的时间CXL 拉 k

参考

CXL vs RDMA:Engram 的两种「远程内存」通信 pattern

← 返回 §RDMA 对比 · 02c 时序图(已标注) · L1–L3 存储 · 为何选 CXL 非 RDMA · prefetch window · 答疑目录


问题

02c 图 右下角 communication patternCXLRDMA 各指什么通信方式?和主流程 Step 2 的箭头如何对应?


结论

CXL pattern(Engram 用)RDMA pattern(KV 池 / Mooncake 类)
语义内存 load/store(像读本地 DRAM)消息 get/put(像网络 RPC)
寻址mmap(cxl_base) + offset[i] 字节地址远端对象句柄 + 显式请求
粒度cache-line / 数百字节 随机读适合 MB–GB 大块
典型路径L3 CXL → PCIe P2P → GPU staging(或经 CPU memcpy)GPU → host bounce → NIC RDMA → 远端 DRAM
Engram 5KB×多段离散读延迟 ≈ DRAM,可塞进 ~56 μs 窗口小包效率差,延迟 远高于 DRAM

02c 主流程画的是 CXL;灰色 RDMA pool 面板是 对比参照(同一需求若走 RDMA 为何不行)。

→ 时间窗 + 56 μs 如何推出这一结论:为何选 CXL 而非 RDMA?


1. CXL pattern

是什么

CXL.mem 把扩展内存挂进 CPU/GPU 的 统一地址空间。进程 mmap 后,读 embedding 就是 ordinary load/store

cxl_ptr = mmap(DAX device)
row = load(cxl_ptr + offset[i]) // 离散 320B 行

在 02c 上标在哪

图元素pattern
黄框 L3 CXL Poolmmap: cxl_base+offset[i] · CXL.mem: load/store
橙色虚线 path BCXL load/store + PCIe P2P(推荐)
绿框 path ACXL→CPU OpenMP memcpy,再进 GPU
蓝框 L1 stagingcxl2vram_copy 终点
右侧橙条 CXL: fetch @ layer k与 GPU 算 0..k-1 并行 的 CXL 读

不是发「请给我第 i 行」的网络消息,而是 CPU/GPU DMA 直接按地址读


2. RDMA pattern

是什么

RDMA 内存池:GPU/CPU 通过 NIC 对远端内存发 get/put

put(remote_buf, local_chunk) // 消息式
get(local_buf, remote_handle) // 需 NIC 参与、常经 bounce buffer

面向 大块、连续 传输(整段 KV cache);对 Engram 这种 每 token 每层 ~5 KB、16 段离散 320B 访问:

  • 大量 小包 → 带宽利用率低
  • 软件栈 + NIC 延迟 → 远高于本地 DRAM填不进 56 μs prefetch 窗

在 02c 上标在哪

图元素pattern
右下灰框 RDMA pool (KV-style)get/put · GPU→bounce→NIC→remote
小示意图 GPU—NIC—remote不走 主流程 Step 2
many 320B pkts | too slow here与 Engram 访问形态不匹配

主流程 没有 RDMA 箭头——故意表示 Engram 不选这条 pattern


3. 为何 Engram 要标清两者

  1. 延迟预算:Layer 2 的 prefetch 窗 ≈ 56 μs → 需要 近 DRAM 的 CXL,RDMA 不够。
  2. 访问形态:离散小行读 → load/store 自然;RDMA 消息 开销过大。
  3. 多机共享:CXL Switch 硬件映射 同一 L3 池;RDMA 也能共享,但 语义不同、延迟曲线不同

奠基论文在 Host DRAM offload 已验证 prefetch;CXL 论文把 L3 换成 共享 CXL 池通信 pattern 从「本地 DRAM load/store」换成「CXL load/store」,而不是换成 RDMA。


4. 与三级存储的对应

L1 HBM / L2 DRAM / L3 CXL.mem:三级存储区别

  • CXL pattern 发生在 L3 → L1(Step 2)
  • RDMA pattern 是另一种「远端内存」产品形态,不落在 Engram 02c 主路径上

参考

为何选 CXL 而非 RDMA?

← 返回 §Step 1 时间窗 · 02c 图 · CXL vs RDMA pattern · 答疑目录


先澄清

Engram CXL 论文选的是 CXL,不是 RDMA。

overview 里「这是选 CXL 而非 RDMA 的核心原因」= 解释 为什么不走 RDMA 内存池(Mooncake 类 KV offload 路径),而要用 CXL.mem load/store

若问「为啥选 RDMA」→ 在 Engram 大表 + 离散小读 + ~56 μs prefetch 窗 这个场景下 不选;RDMA 仍适合 KV cache 大块传输 等别的 workload。


问题

Step 1 里的时间窗不等式

$$ L_{\mathrm{pool}}(N_{\mathrm{token}}, S_{\mathrm{layer}}) < \sum_{i=1}^{k-1} t_{\mathrm{exec}}(i) $$

和「Layer 2 仅 ~56 μs」如何推出 必须 CXL、不能 RDMA


结论

约束来源含义
时间窗Engram 在 Layer $k$,只允许在 GPU 算 Layer $1..k-1$ 的这段时间里,把本层要的 embedding 从 内存池 拉进 HBM staging
$L_{\mathrm{pool}}$一次 decode 步、一层 Engram,从池子完成 所有离散读 的端到端延迟
56 μs 例Qwen3-32B:$k=2$ 时窗口 $\approx$ 单层时间 $\approx 56,\mu\mathrm{s}$
CXL$L_{\mathrm{pool}}$ ≈ 本地 DRAM 量级不等式可满足
RDMA离散 320B×多段 + NIC/消息栈 → $L_{\mathrm{pool}}$ 远高于 DRAM56 μs 内完不成

根因两条:① 延迟预算太紧(早层 Engram);② 访问形态是大量小随机读,不是 RDMA 擅长的大块 get/put。


1. 时间窗从哪来

一次 decode 步

  1. CPU 在步入口就算好 offsets[](只依赖 token IDs)。
  2. SGLang 异步 prefetch Layer $k$ 的 Engram 行。
  3. GPU 同时算 Layer $0,1,\ldots,k-1$。
  4. 进入 Layer $k$ 时,staging 里 必须已有 $e_t$。

因此池子读延迟 $L_{\mathrm{pool}}$ 必须小于前面层的 GPU 时间之和:

$$ L_{\mathrm{pool}} < t_{\mathrm{exec}}(1) + \cdots + t_{\mathrm{exec}}(k-1) = \sum_{i=1}^{k-1} t_{\mathrm{exec}}(i) $$

02c 图 右侧蓝条 = 右边求和;橙条 = $L_{\mathrm{pool}}$ 必须落在蓝条长度以内。


2. Qwen3-32B 的 56 μs 怎么算

每 decode 步总时间 $t_{\mathrm{step}}$$\approx 3.6,\mathrm{ms}$
层数64
单层平均 $t_{\mathrm{exec}}(i)$$3.6/64 \approx 56,\mu\mathrm{s}$
Engram 插在 $k=2$窗口 = $t_{\mathrm{exec}}(1) \approx$ 56 μs
Engram 插在 $k=15$窗口 = $\sum_{i=1}^{14} t_{\mathrm{exec}}(i) \approx 14\times 56 \approx 0.78,\mathrm{ms}$(宽裕得多)

最苛刻的是最早插入层(如 Layer 2):几乎只有 一层 的 GPU 时间来藏 CXL 读 → 池子延迟必须 接近 DRAM,不能是「慢一个数量级的网络内存」。


3. 为何 RDMA 过不了这个窗

3.1 延迟:消息栈 vs load/store

CXLRDMA 池
语义mmapload/storeget/put 请求/响应
软件路径用户态直接寻址 + DMAbounce buffer、NIC、远端处理
论文测量CXL→CPU ≈ DRAM;CXL→GPU 略高仍可接受离散小包延迟 数量级高于 DRAM(Fig 3)

56 μs 预算里,RDMA 一次或多次 round-trip 的固定开销往往就把窗口吃光,更别说 16 段×320B 级别的多段读。

3.2 粒度:5 KB×离散 vs MB–GB 块

Engram 每层每 token:

  • 载荷 $\approx$ 5 KB(多阶 n-gram × 多头 × 320B/行)
  • 稀疏离散 随机行读

RDMA 池为 KV cache offload 优化:大块、连续 传输效率高;64B~数百字节级海量小包 时:

  • 带宽利用率可跌至峰值 ~25% 以下(overview §② 动机)
  • 每次 get/put 有固定成本 → $L_{\mathrm{pool}}$ 随段数恶化

CXL 用 cache-line 级 load/store,与「随机抽很多小行」匹配。

3.3 带宽不是瓶颈

论文算过:所需池带宽 $\approx T \times S_{\mathrm{layer}} \times N_{\mathrm{eng}} \approx 0.7,\mathrm{GB/s}$,PCIe Gen5 / 百 G 网卡都够。

卡的是延迟形态,不是峰值 GB/s——所以「RDMA 带宽也很大」不能替代 CXL。


4. 为何 CXL 能过

  1. 内存语义cxl_base + offset[i] 按地址读,无 per-chunk 消息。
  2. 实测延迟:CXL→CPU ≈ DRAM;CXL→GPU P2P 略高仍 < 56 μs 级窗口
  3. 端到端:Qwen3-4B DRAM 5683.7 vs CXL 5614.4 tok/s(~1.2% 损),说明换 CXL 池 几乎不掉吞吐
  4. 多机:Switch 映射共享 L3,仍保持 load/store 延迟曲线,而非 RDMA 小包曲线。

5. RDMA 适合什么

Workload更合适的技术
KV cache 大块 offload / 跨机共享RDMA 池(Mooncake 等)
Engram embedding 表 离散小读 + 紧 prefetch 窗CXL.mem
单机 Host DRAM 表奠基论文:DRAM + PCIe prefetch(无 CXL 硬件时)

同一推理栈里可以 KV 用 RDMA、Engram 用 CXL——争的是 不同访问形态,不是二选一谁更强。


6. 决策链

Engram 索引只依赖 input ids
 -> decode 步入口即可 prefetch
 -> 有效窗口 = sum t_exec(1..k-1) [有时仅 ~56 μs]
 -> 需要 L_pool ≈ DRAM
 -> CXL load/store 满足;RDMA get/put 不满足
 -> 选 CXL 池(Fig 2b),不选 RDMA 池(Fig 2a)

参考

Step 6 上下文门控:依据与「记忆依赖过滤」

← 返回 Step 6 · 前向总图 01c · 答疑目录


问题

01c 前向图 里 Step 6 标成「过滤记忆」——门控 $\alpha_t$ 的设计依据是什么?为什么说 gate 是 记忆依赖 的过滤,而不是普通标量门?


结论

维度Step 1–5Step 6 门控
$e_t$ / $k_t,v_t$只依赖 input n-gram,与当前句义无关$h_t$(语境)× $k_t$(本条记忆) 算 $\alpha_t$
输出静态查表结果$\tilde{v}_t=\alpha_t v_t$:本条记忆留多少
角色O(1) 检索动态过滤:碰撞 / 歧义 / 不合语境 → $\alpha_t\to 0$

依据:查表给的是「这个 n-gram 通常 伴随什么向量」,不是「此刻 该不该用」;必须用已含上下文的 $h_t$ 与 本条 记忆的 $k_t$ 做对齐,才能决定 $v_t$ 是否注入 backbone。这就是 记忆依赖——$\alpha_t$ 随 检索到的记忆内容(经 $W_K$)与 当前 hidden jointly 变化,而非每位置固定系数。

α_t 算「一次 Attention」吗?

可以说:像 Attention 的「一个 Q 对一个 K」的那一步不能说:等于一层 Self-Attention

标准 Attention(位置 $t$)Engram Step 6 的 $\alpha_t$
Q·K$\mathrm{softmax}_j\bigl(q_t^\top k_j\bigr)$,对 多个 $j$ 归一化一个 $h_t$ 对 一条 $k_t$,无对 $j$ 的 softmax
非线性softmax → 权重和为 1$\sigma(\cdot)$ → $\alpha_t\in(0,1)$,不要求与其他位置竞争
V 聚合$\sum_j w_{t,j} v_j$标量 $\alpha_t$ 只缩放 本条 $v_t$:$\tilde{v}_t=\alpha_t v_t$
K/V 来源同一 hidden 线性投影K/V 来自 查表 $e_t$

更贴切的说法:

  • :一次 scaled dot-product 兼容性打分(Q=$h_t$,K=$k_t$),再乘 V=$v_t$ —— 和 Attention 核心算子同族。
  • 不是:对序列 / 多记忆槽的 分布归一化注意力;没有「在 $L$ 个或 $K$ 个头里选谁」那一步(多头哈希的 $K$ 个头已在 Step 4 拼进 $e_t$,Step 6 是对整段 $e_t$ 投影后的 一个 门)。

口诀:「单键 attention 打分 + sigmoid 门」,不是 「一层 multi-head self-attention」。后面 backbone 里的 Attention 仍负责全局依赖;Step 6 只决定 这条静态记忆此刻放多少进来


1. 为什么 Step 1–5 不能代替门控

Step 1–4 产出 上下文无关 的 $e_t$:

$$ e_t = \Big\Vert_{n,k} E_{n,k}[\varphi_{n,k}(g_{t,n})] $$

索引 $\varphi_{n,k}(g_{t,n})$ 只依赖 input token,因此:

  1. 哈希碰撞:不同 n-gram 映射到同一槽位 → 表项是混合先验,未必对应当前片段。
  2. 多义 / 歧义:同一表面 n-gram 在不同句子里语义不同(图脚注「Apple vs apple」类问题在 Step 1 部分缓解,但不能消歧整句)。
  3. 静态先验 vs 动态需求:$e_t$ 回答「历史上这个搭配常出现什么表示」,不回答「这一句 现在是否需要这条先验」。

Step 5 把 $e_t$ 投影为 $k_t, v_t$,仍 未使用 $h_t$——只是「把记忆装进 K/V 形态」,还没有过滤(01c 图:备过滤)。


2. 门控在算什么

论文 / overview 写法

$$ \alpha_t = \sigma\left(\frac{\mathrm{RMSNorm}(h_t)^{\top} \mathrm{RMSNorm}(k_t)}{\sqrt{d}}\right), \quad \tilde{v}_t = \alpha_t \cdot v_t $$

角色张量语义
Query$h_t$当前层 hidden,已吸收前文 Attention / 下层信息 → 此刻语境
Key$k_t = W_K e_t$本条 查表记忆在「对齐空间」的表示
Value$v_t = W_V e_t$若通过门控,实际写入记忆支路的内容
$\alpha_t \in (0,1)$$h_t$ 与 $k_t$ 越一致 越大;不合 → 趋近 0

与 Attention 相同点:用归一化 Q·K 衡量 兼容性(scaled dot product)。

与 Attention 不同点

AttentionEngram Step 6
K/V 来源由 hidden 算出来K/V 来自 查表 $e_t$(O(1))
范围可对全序列做 softmax标量 $\alpha_t$ 门控本条记忆(非全局分布)
计算$O(L^2)$ 或稀疏变体查表 O(1) + 一次 dot + sigmoid

本质:Attention 式对齐,但 记忆是条件查表来的,所以叫 context-aware gating / 记忆过滤


3. 为何叫「记忆依赖」的过滤

「记忆依赖」指 $\alpha_t$ 不是 只由位置 $t$ 或只由 $h_t$ 决定,而是 耦合本条检索结果

$$ \alpha_t = f\bigl(h_t,; k_t(e_t(g_{t,\cdot}))\bigr) $$

  • 换一句 input → $g_{t,n}$ 变 → $e_t$ 变 → $k_t, v_t$ 变 → 即使 $h_t$ 维数相同,$\alpha_t$ 也可完全不同
  • 同一句里不同层 / 不同分支:$h_t$ 变 → 对 同一条 $e_t$ 也可得到不同 $\alpha_t$(语境变了,是否采纳这条静态先验也变)。

因此 gate 过滤的是 「这一条记忆」对当前语境的贡献,不是对 hidden 做通道级 LayerScale 那种与查表无关的门。

为何乘在 $v_t$ 上:注入 backbone 的是 value 支路;$k_t$ 只参与 是否放行,$v_t$ 是 放行后的内容。Step 7–8 只在 $\tilde{v}_t$ 上运算(01c 图例:S7–8 不再接触未过滤 $v_t$)。


4. 官方 demo 实现

Engram demo 脚本Engram.forward(约 L358–377):

key = self.key_projs[hc_idx](embeddings)
normed_key = self.norm1[hc_idx](key)
query = hidden_states[:, :, hc_idx, :]
normed_query = self.norm2[hc_idx](query)
gate = (normed_key * normed_query).sum(dim=-1) / math.sqrt(hidden_size)
gate = gate.abs().clamp_min(1e-6).sqrt() * gate.sign() # demo 额外:保符号的 sqrt
gate = gate.sigmoid().unsqueeze(-1)
value = gates * self.value_proj(embeddings).unsqueeze(2)
demooverview 公式
归一化norm1 on key,norm2 on query$\mathrm{RMSNorm}(k_t)$,$\mathrm{RMSNorm}(h_t)$
对齐分数逐维积再 sum = 内积$h_t^\top k_t$
缩放/ sqrt(hidden_size)`/ sqrt{d}$
非线性signed_sqrtsigmoid直接 $\sigma(\cdot)$
多分支hc_mult 路独立 gateoverview §多分支有 $\alpha_t^{(m)}$

阅读建议:结构一致(normed Q·K → 门 → × value);demo 在 sigmoid 前多一步 signed sqrt,属实现细节,不改变「用 $h_t$ 与 本条 memory key 决定是否采用 $v_t$」这一设计。


5. 若去掉 Step 6 会怎样

有门控无门控($\alpha_t\equiv 1$)
碰撞 / 歧义表项可被压掉噪声 $v_t$ 直接进 Conv / 残差
静态先验 按需 接入所有 n-gram 查表结果 强制 影响 hidden
与论文「条件记忆」一致退化成「查表 + 固定加回」,难扛多义

Engram-Nine 等工作进一步讨论 gating credit assignment(门控是否跟对表项);瓶颈常在 门控质量 而非索引精度(见 overview §热冷层 / Nine 梗概)。


6. 与前后 Step 的衔接

S1–4: e_t 静态(input only)
S5: k_t, v_t = W_K e_t, W_V e_t ← 备过滤
S6: α_t = f(h_t, k_t); ṽ_t = α_t v_t ← ★ 记忆过滤
S7–8: 只用 ṽ,写回 H

短卷积 / 感受野Step 7 短卷积:感受野扩充常数(在 已过滤 的 $\tilde{V}$ 上扩序列混合)


参考

← 返回 Engram 系列导读 · 答疑目录 · ← 中文导读 · ← 仓库首页(EN)

Step 7 感受野 1→10:训练与推理差异

← 感受野常数 · Step 7 正文


先澄清:「10 倍」指什么

不是算力放大 10×,而是门控记忆流 $\tilde{V}$ 沿序列的有效依赖跨度1 个位置 扩到 10 个 token 索引范围(默认 $w=4,d=3$)。

$$ \mathrm{RF}_{\mathrm{seq}}:\ 1 ;\rightarrow; 1+(w-1)d = 10 $$

影响总览

感受野 1 到 10 影响总览

图示详情


1. 能力上差什么

RF = 1(仅 Step 6)RF = 10(Step 7 后)
每位置输入仅 $\tilde{v}_t$$\tilde{v}t,\tilde{v}{t-3},\tilde{v}{t-6},\tilde{v}{t-9}$
表达每 token 独立 的过滤记忆跨位置组合 已过滤记忆 + SiLU 非线性
与 n-gram 关系查表已见 2–3 token input记忆向量序列 上再对齐 n-gram 间隔 $d$ 做融合
仍不做的事不替代 Attention(全局仍靠 Attn/MoE)

直觉:Step 1–4 给每个位置一张「局部词典卡片」;Step 6 决定信不信;Step 7 把 间隔为 3 的多张卡片 合成一句更长的「记忆短语」,再写入 backbone。


2. 训练带来的差异

2.1 梯度与耦合

  • RF=1:loss 对 $\tilde{v}_t$ 的梯度只回传到位置 $t$ 的 gate / 查表 / 投影。
  • RF=10:$Y_t$ 的梯度经 depthwise Conv 同时回传 到 $t,t{-}3,t{-}6,t{-}9$ 四条记忆路径。
  • 卷积权重 $W_{\mathrm{conv}}$ 可学习:模型学习「哪些间隔 3 的记忆组合有用」,而非硬编码拼接。

2.2 优化与表达

效应说明
更强局部组合超出单次 n-gram 槽位的 短语级 静态先验(仍局部)
非线性SiLU(Conv(·)) 在残差旁路;纯线性叠加 $w=4$ 的表达能力有限
因果安全因果卷积不看未来 token,训练/推理一致
序列前端$t<9$ 时有效 tap 变少(边界),与因果 LM 常见行为一致

2.3 训练成本

  • 相对 Engram 查表 + gate:增量很小
  • Depthwise Conv1d:每 token 仅 $w=4$ 次 tap 乘加(按 channel 分组),与 $d_{\mathrm{model}}$ 线性,远低于同层 Attention。
  • 反向:多 4 个历史位置的 gate/投影梯度,仍 $O(w)$ 常数。

3. 推理带来的差异

3.1 延迟与算力

RF=1RF=10(有 Step 7)
每 decode step 查表$O(1)$ / token不变 $O(1)$
Gate1 次 / token不变
额外 Conv$w=4$ tap depthwise,$O(w\cdot d_{\mathrm{hc}})$,常数级
相对 AttentionEngram 仍偏 memory-bound 查表Conv 通常 < 5% Engram 块(实现依赖)

要点:跨度 10 不等于每步读 10 次表;只是卷积多读 3 个历史 $\tilde{v}$(间隔 3),计算量由 $w$ 决定,不由 10 决定。

3.2 状态与缓存

  • Decode 需保留最近 $\tilde{v}$(至少 $t{-}9$)供 dilated conv 取用,或等价地保留 Conv 环形缓冲。
  • 额外显存:$\approx 9 \times d_{\mathrm{mem}} \times \mathrm{sizeof}(\mathrm{fp})$ 每序列每 Engram 层,相对 KV cache 通常可忽略。
  • Prefill:全长并行,与训练前向同构;仍无未来泄漏。

3.3 与 prefetch / offload 的关系

  • n-gram 索引仍 只依赖 input ids(Step 3 前可算)→ prefetch 路径 不受 Step 7 影响
  • Step 7 只在 GPU 上融合 已算出的 $\tilde{V}$,不增加 CXL/表访问次数。

4. 若去掉 Step 7

训练推理
速度略快(少一次 conv)略快
质量每 token 记忆 解耦,难学短语级组合输出更「逐 token 查表感」
与论文分工削弱 Engram「局部静态搭配」路径Attention 负担可能上升

论文保留 Step 7 的原因:极便宜地 在记忆支路补上 跨位置局部非线性,把全局留给 Attention。


5. 一图速览

RF 1 vs 10 训练与推理

图示详情

参考

Step 7 短卷积:感受野扩充常数

← 返回 Step 7 · Step 6 门控专文 · 答疑目录


问题

Step 7 标题写「扩感受野」——是从 1 扩到 4 吗?$w=4$ 的 kernel 是否等于跨度 4?


结论

维度Step 6 之后Step 7 之后(默认 demo)
门控记忆流 $\tilde{V}$ 沿序列每位置独立,跨度 1因果 dilated conv 混合,跨度 $1+(w-1)d$
默认 $w=4$,$d=\text{max_ngram_size}=3$$1+3\times 3=10$

$w=4$ 是卷积核 tap 个数,不是感受野跨度。

感受野 1 到 10 影响总览

图示详情


1. 两种「看过多远」不要混

A. 输入侧 n-gram 跨度

每个位置 $t$ 查表时,$e_t$ 已编码 后缀 2/3-gram,即最多 3 个 input token 的静态搭配。

这是 查表键的长度,不是门控记忆在序列维上的混合。

B. 门控记忆流沿序列的混合

Step 5–6 对每个 $t$ 独立算 $\tilde{v}_t$;在 $\tilde{V}$ 这条流上,位置 $t$ 在 Step 6 结束时 只依赖 $\tilde{v}t$,与 $\tilde{v}{t-1}$ 等无关 → 序列感受野 = 1

Step 7 的因果 Conv1D 才在 $\tilde{v}$ 序列 上做局部融合。


2. 公式与代码参数

论文 / overview:Depthwise 因果 Conv1D,kernel $w$,dilation = 最大 n-gram 阶数 $N$。

官方 demo(Engram demo 脚本):

kernel_size = engram_cfg.kernel_size # 默认 4
dilation = engram_cfg.max_ngram_size # 默认 3

因果 dilated 一维卷积,位置 $t$ 的输出依赖的 tap 下标(向后看):

$$ t,; t-d,; t-2d,; \ldots,; t-(w-1)d $$

有效序列感受野(跨度)

$$ \boxed{\mathrm{RF}_{\mathrm{seq}} = 1 + (w-1),d} $$

默认:$\mathrm{RF}_{\mathrm{seq}} = 1 + 3\times 3 = 10$。

即 $Y_t$ 会用到 $\tilde{v}t,,\tilde{v}{t-3},,\tilde{v}{t-6},,\tilde{v}{t-9}$——间隔为 $d$ 的 4 个点,覆盖 10 个 token 索引范围,而非连续 4 个位置。

2.1 逐项看懂:谁在扩感受野?

公式 $Y=\mathrm{SiLU}(\mathrm{Conv1D}(\mathrm{RMSNorm}(\tilde{V})))+\tilde{V}$ 从左到右:

顺序操作对位置 $t$ 做了什么序列感受野
RMSNorm只归一化 当前 $\tilde{v}_t$ 这个向量仍为 1(不读邻居)
Conv1D4 个可学习权重 把 $\tilde{v}{t-9},\tilde{v}{t-6},\tilde{v}_{t-3},\tilde{v}_t$ 加权求和1 -> 10(只有这一步扩)
SiLU对卷积结果做非线性不新增位置
$+\tilde{V}$把原始 $\tilde{v}_t$ 加回去(残差)不新增位置

「第一项」RMSNorm 不扩感受野;真正让 $t$ 看见 $t{-}3,t{-}6,t{-}9$ 的是 第二项 Conv1D

为何跨度是 10 而不是 4?

  • $w=4$ = 卷积 读 4 个点(4 个 tap)
  • $d=3$ = 相邻 tap 间隔 3 个 token
  • 最左 tap 在 $t{-}9$,最右在 $t$ → 索引覆盖 $t{-}9,\ldots,t$ 共 10 个位置

$$ \underbrace{t-9}{\text{tap 0}};\cdots; \underbrace{t-6}{\text{tap 1}};\cdots; \underbrace{t-3}{\text{tap 2}};\cdots; \underbrace{t}{\text{tap 3}} \quad\Rightarrow\quad \mathrm{RF}_{\mathrm{seq}} = t - (t-9) + 1 = 10 $$

位置 t 感受野 1 到 10

图示详情

3. 为何 dilation = max n-gram 阶数

直觉对齐:n-gram 查表已在 长度 $N$ 的 input 窗口上编码局部模式;短卷积用 相同间隔 $N$ 在门控后的记忆流上再混合,使序列方向的采样节奏与 n-gram 阶数一致。


4. 残差与 Step 8

$$ Y = \mathrm{SiLU}(\mathrm{Conv1D}(\mathrm{RMSNorm}(\tilde{V}))) + \tilde{V} $$

残差保证 $Y_t$ 至少保留 $\tilde{v}_t$;卷积分支提供跨位置的局部非线性。Step 8 将 $Y$ 残差写入 backbone,之后 Attention 再负责全局依赖。

Step 7-8 残差与 backbone 写回

图示详情

5. 速查表

符号demo 默认含义
$w$4Conv1d kernel_size
$d$3dilation = max_ngram_size
$\mathrm{RF}_{\mathrm{seq}}$10$1+(w-1)d$
Step 6 序列 RF1每 $t$ 仅 $\tilde{v}_t$
n-gram input 跨度2–3查表键长,≠ 上式 RF

训练/推理差异Step 7 感受野 1→10:训练与推理差异

RF 1 vs 10 训练与推理

图示详情

参考