8.1 DeepSeek 架构:MLA、DeepSeekMoE 与 FP8 训练
1.DeepSeek 为什么值得专门拆一篇
如果说 2024–2026 年有哪个开源模型系列最深刻地影响了整个大模型工程实践,DeepSeek 一定排在最前面。它不是最强的(旗舰能力上和 GPT-4/Claude 还有差距),但它把"用相对有限的算力训出接近旗舰的能力"这件事做到了极致,而且把几乎所有技术细节都开源了。它在 2024 年底发布的 V3 技术报告(arXiv:2412.19437),几乎成了后来所有 MoE 大模型的施工蓝图——MLA、细粒度 MoE、无辅助损失负载均衡、FP8 训练,这套组合被国内外无数团队借鉴。
这一章我们拆 DeepSeek 的架构,重点讲清它三个最有影响力的创新:MLA(多头潜在注意力)、DeepSeekMoE(细粒度专家)、FP8 训练。下一篇 8.2 讲它的强化学习(R1/GRPO)。到 2026 年中,DeepSeek 已经迭代到 V4(V4-Pro 1.6T、V4-Flash 158B),但底子还是 V3 奠定的这套架构,所以我们从 V3 讲起,再补演进。
2.MLA:把 KV cache 压进一个低秩潜在向量
DeepSeek 最招牌的创新是 MLA(Multi-head Latent Attention,多头潜在注意力)。要理解它解决什么问题,先回忆 3.8 节的标准多头注意力(MHA):每个 token、每一层、每个头都要存一份 key 和 value,推理时这些 KV 会累积成庞大的 KV cache,长上下文下能把显存吃光。
MLA 的核心想法是低秩压缩:与其存每个头完整的 K 和 V,不如把它们联合投影到一个低维的潜在向量里存起来,推理需要时再从这个潜在向量"还原"出 K 和 V。
具体说,对每个 token,MLA 先算一个低维潜在表示 (维度远小于完整的 KV),然后通过上投影矩阵分别还原出 K 和 V:
这里 是该 token 的隐状态, 是下投影(压到低维), 是上投影(还原)。推理时 KV cache 里只存低维的 ,而不是完整的高维 K、V,显存占用大幅下降——DeepSeek 报告里 MLA 的 KV cache 大约只有标准 MHA 的 1/4 到 1/7(取决于配置)。
一个关键的工程技巧:query 侧也做了类似的低秩压缩,而且通过精心设计的投影,让 MLA 在数学上等价于一种特殊的低秩注意力,精度几乎不损失。这就让 MLA 既能省显存,又不掉能力——这是它比其他 KV 压缩方案(比如 GQA/MQA)高明的地方:GQA/MQA 是靠"少几个头"来省,会牺牲表达能力;MLA 是靠"低秩压缩再还原",保留了完整的多头结构。
3.DeepSeekMoE:细粒度专家 + 共享专家
DeepSeek 的第二个招牌是它的混合专家设计,叫 DeepSeekMoE。3.12 节我们讲过 MoE 的基本思路——每次只激活一部分专家。DeepSeekMoE 在此基础上做了两个关键改进。
第一,细粒度专家。 传统 MoE(比如 Mixtral)每个专家是一个完整的大 FFN,专家数量少(8 个)、每个都很大。DeepSeek 反其道而行——把每个大专家拆成很多个小专家,专家总数大幅增加(V3 有 256 个路由专家),但每个都很小。这样做的好处是路由更灵活:一个 token 可以同时被很多个高度专业化的小专家服务,组合更精细,而不是被少数几个大专家"打包处理"。打个比方,传统 MoE 像是几个全科大夫会诊,DeepSeekMoE 像是一大群细分科室的专家各管一摊再汇总。
第二,共享专家。 除了路由专家(按 token 动态选择),DeepSeek 还设了少数几个永远激活的共享专家(V3 是 1 个)。这些共享专家专门负责捕捉"所有 token 都需要的通用知识",避免通用知识被分散到各个路由专家里重复学习。路由专家因此可以更专注于"特定类型的知识",分工更清晰。
配合细粒度和共享专家,DeepSeek 用更少的激活参数(V3 是 37B 激活 / 671B 总参)达到了接近甚至超过更大稠密模型的能力——这就是 MoE 的核心性价比:总参数撑大模型容量,激活参数控制计算成本。
4.无辅助损失的负载均衡
MoE 还有个老大难问题:负载不均。如果路由器偏爱少数几个专家,那些专家被塞爆、其他专家闲死,既浪费算力又让训练不稳。传统做法是加一个辅助损失(auxiliary loss)惩罚不均衡,但 DeepSeek 发现这个辅助损失会干扰主任务梯度、降低模型质量。
DeepSeek 的创新是无辅助损失的负载均衡:给每个专家配一个偏置项(bias),加到路由分数上。每个 batch 结束后,根据各专家的实际负载动态调整偏置——太忙的专家降偏置、太闲的升偏置。这个调整不参与梯度回传,所以不会干扰主任务,却能有效地把负载拉平。这是个四两拨千斤的设计,后来被很多 MoE 模型沿用。
5.FP8 训练:第一个大规模跑通的
DeepSeek V3 是第一个大规模用 FP8(8 位浮点)做预训练的模型。传统大模型预训练用 BF16 或 FP32,FP8 的数值范围和精度都更小,直接用容易训崩。DeepSeek 设计了一套细粒度的量化方案——对每个 tile/block 单独算缩放因子(而不是全局一个 scale),把 FP8 的精度损失控制在可接受范围内。
收益是实打实的:FP8 把 HBM 显存占用和计算量都大幅压低,V3 用 2.788M H800 GPU-小时就训完了 14.8T token——这个效率在当时是惊人的。这也是后来大家纷纷跟进 FP8 训练的开端。
6.MTP 与 V3.1/V3.2/V4 的演进
V3 还引入了 MTP(Multi-Token Prediction,多 token 预测):训练时不只预测下一个 token,而是同时预测未来多个 token(depth-first)。这给模型更强的"规划"信号,而且推理时 MTP 的头可以当推测解码(speculative decoding)的草稿模型用,加速推理。
到 2026 年中的演进脉络:
- V3.1(2025 年中):融合了思考/非思考双模式(一个 checkpoint 既能快速回答又能深度推理),685B 总参。
- V3.2(2025 年底):引入 DSA(DeepSeek Sparse Attention),把 7.3 节讲的 NSA 思路落地到生产,支撑超长上下文推理。
- V4 系列(2026 年):V4-Pro 1.6T、V4-Flash 158B,延续 V3 的 MoE+MLA+DSA 路线,规模再上一个台阶。
7.练习
Q1. MLA 相比标准 MHA,是用什么机制压缩 KV cache 的?为什么比 GQA/MQA 更好?
MLA 把每个 token 的 K、V 联合投影到一个低维潜在向量 存进 cache,推理时再用上投影还原。GQA/MQA 是靠"减少头数"来省,会牺牲多头表达能力;MLA 保留完整多头结构,靠低秩压缩再还原,省显存的同时几乎不掉精度。
Q2. DeepSeekMoE 的"细粒度专家 + 共享专家"分别解决什么问题?
细粒度专家(把大专家拆成很多小专家)让路由更灵活、组合更精细,一个 token 能被多个高度专业化的小专家服务;共享专家(永远激活)专门捕捉通用知识,避免通用知识在路由专家里重复学习,让路由专家更专注。
Q3. 为什么 DeepSeek 不用辅助损失做负载均衡,改用偏置项?这个偏置项有什么特别之处?
辅助损失会干扰主任务梯度、降低模型质量。偏置项加在路由分数上,每 batch 根据实际负载动态调整(忙的降、闲的升),但不参与梯度回传,所以不干扰主任务,却能有效拉平负载。
Q4.(面试题) DeepSeek V3 用 FP8 训练,核心的工程技巧是什么?为什么不能直接全局用一个 scale?
核心是细粒度量化——对每个 tile/block 单独算缩放因子。FP8 动态范围小,全局一个 scale 会让数值差异大的区域(有的接近 0 有的很大)要么下溢要么上溢,精度损失严重。分块缩放让每个块都在 FP8 的有效范围内,把损失控制住,才得以大规模跑通。
8.小结
DeepSeek 的架构可以浓缩成一句话:MLA 省 KV cache、细粒度 MoE 省激活参数、无辅助损失稳负载、FP8 省算力。这套组合拳让它在有限算力下逼近旗舰能力,并开源带火了整个 MoE + 高效注意力范式。下一篇我们看 DeepSeek 的另一半成就——用强化学习让推理能力涌现的 R1。
下一章见。