DeepSeek-V3 与 GPT 核心技术原理及差异:从架构革新到工程实现

1. 溯源与基准:Transformer 到 GPT

1.1 Transformer

2017 年在《Attention Is All You Need》中提出 Transformer 架构,彻底抛弃了 RNN 的循环结构与 CNN 的局部卷积,以纯粹的注意力机制建立了序列到序列的建模范式。

1.1.1标准 MHA 公式

对于输入序列 X=(x1,x2,…,xn)X=(x_1,x_2,…,x_n)X=(x1,x2,,xn),每个注意力头 iii 拥有独立的投影矩阵:
在这里插入图片描述

其中 WiQ,WiK,WiV∈Rdmodel×dkW^Q_i,W^K_i,W^V_i∈ℝ^{d_{model}×d_k}WiQ,WiK,WiVRdmodel×dk。每个头的 Scaled Dot-Product Attention 为:

hhh 个头的输出拼接后经输出投影矩阵 WOW^OWO 得到 Multi-Head Attention 的最终输出:
在这里插入图片描述

论文设定 h=8h=8h=8dk=dv=dmodel/h=64d_k=d_v=d_{model}/h=64dk=dv=dmodel/h=64dmodel=512d_{model}=512dmodel=512。除以 dk\sqrt{d_k}dk 的缩放因子防止点积过大导致 Softmax 梯度消失——这是 MHA 数学稳定性的第一个关键细节。

1.1.2 Encoder-Decoder 架构

原始 Transformer 包含 6 层 Encoder 和 6 层 Decoder:

  • Encoder 每层:Multi-Head Self-Attention → Add & Norm → Feed-Forward Network (FFN) → Add & Norm
  • Decoder 每层:Masked Multi-Head Self-Attention → Add & Norm → Cross-Attention (Q 来自 Decoder,K/V 来自 Encoder) → Add & Norm → FFN → Add & Norm

FFN 结构:
FFN(x)=max(0,xW1+b1)W2+b2FFN(x)=max(0,xW_1+b_1)W_2+b_2FFN(x)=max(0,xW1+b1)W2+b2
内层维度 dff=2048d_{ff}=2048dff=2048

核心组件拆解

① Input Embedding & Positional Encoding

  • Embedding:把词变成向量
  • Positional Encoding (位置编码):一次性读取全句,为每个词附加位置标识,让模型区分词语先后顺序。

② Multi-Head Attention
让句子里每个词都能“看见”其他所有词;“多头”代表模型可从多维角度建模词语间关联。

③ Add & Norm

  • Add:残差连接,保证多层堆叠下信息、梯度不丢失
  • Norm:层归一化,稳定数据分布,降低训练波动

④ Feed Forward(MLP)
注意力完成特征交互后,每层接入全连接网络,对提取特征做非线性变换加工。
在这里插入图片描述

1.2 GPT :Decoder-Only 与自回归生成

GPT 系列对 Transformer 做了关键简化——仅保留 Decoder 部分,移除 Cross-Attention 子层。这一设计选择带来了以下优势:

  1. 自回归生成的天然适配:语言建模本质上是"根据上文预测下一词",Decoder-Only 的 Masked Self-Attention 恰好满足这一因果约束
  2. 训练效率:同一段文本只需一次前向传播即可计算所有位置的损失,无需 Encoder-Decoder 的两次编码
  3. 扩展性:Decoder-Only 架构可以简洁地堆叠更多层(GPT-3 达到 96 层),每层结构完全一致,工程实现高度统一
    GPT-2 单层 Decoder 流程图
    在这里插入图片描述
    在这里插入图片描述
推理过程——自回归循环:
  1. 输入序列经 Embedding + Positional Encoding 后进入第一个 Block
  2. 每个 Block 依次处理,最后一个 Block 输出隐向量
  3. 隐向量与 Embedding 矩阵相乘得到词汇表上的 logits
  4. Softmax → 采样(Top-K 或 Top-P)→ 生成下一个 Token
  5. 新 Token 追加到输入序列末尾,重复步骤 1-4

1.3 KV Cache 的数学本质与显存危机

1.3.1 KV Cache 的引入动机

在自回归推理的第 t+1t+1t+1 步,需计算当前 Query qt+1q_{t+1}qt+1 与所有历史 Key/Value 的注意力:

若每步重新计算全部 kj,vjk_j,v_jkj,vj,总计算量为 O(t2)O(t^2)O(t2)。因此标准做法是缓存已计算的 Key 和 Value。

1.3.2显存占用的严格推导

设模型有 LLL 层、nhn_hnh 个注意力头、每头维度 dhd_hdh、当前序列长度 ttt、batch size 为 bbb
KVCachepertoken=2×nh×dh×L(每个token在每层的K+V)KVCachetotal=b×t×2×nh×dh×L(总缓存元素数)MemoryKVCache=KVCachetotal×sizeof(dtype) \begin{matrix} KV Cache_{per token} & =2×n_h×d_h×L \quad(每个 token 在每层的 K + V)\\ KV Cache_{total} & =b×t×2×n_h×d_h×L \quad(总缓存元素数)\\ Memory_{KV Cache} & =KV Cache_{total}×sizeof(dtype) \end{matrix} KVCachepertokenKVCachetotalMemoryKVCache=2×nh×dh×L(每个token在每层的K+V)=b×t×2×nh×dh×L(总缓存元素数)=KVCachetotal×sizeof(dtype)
以 GPT-3 175B 典型配置(L=96L=96L=96, nh=96n_h=96nh=96, dh=128d_h=128dh=128)为例,BF16 精度下:
MemoryKVCache(pertoken)=2×96×128×96×2  bytes≈4.72  MB/token \begin{matrix} Memory_{KV Cache}(per token) & =2×96×128×96×2 \;bytes\\ & ≈4.72 \;MB/token \end{matrix} MemoryKVCache(pertoken)=2×96×128×96×2bytes4.72MB/token
序列长度与显存的线性灾难:

序列长度 ttt b=1b=1b=1 KV Cache 显存 b=8b=8b=8 KV Cache 显存 b=64b=64b=64 KV Cache 显存
2,048 9.66 GB 77.3 GB 618 GB
8,192 38.6 GB 309 GB 2,473 GB
32,768 154.7 GB 1,237 GB 9,898 GB
128,000 604.2 GB 4,834 GB 38,671 GB

单张 H100 仅有 80 GB HBM。128K 上下文的 b=1b=1b=1 推理就需 604 GB——需要 8 张 H100 仅存放 KV Cache,遑论模型权重和中间激活。

1.3.3 Memory Wall 的物理本质

Decode 阶段每步的算术强度:
在这里插入图片描述

算术强度极低意味着每从 HBM 搬运一个字节,GPU 只做极少计算。H100 HBM 带宽 3.35 TB/s,而计算能力达 989 TFLOPS (FP16)——访存速度远跟不上计算速度,计算单元大量空转。这就是 GPT 长文本推理的 Memory Wall:每步延时与 KV Cache 读取量成正比,即与序列长度成正比。
TstepGPT∝BytesKVCache(t)HBMBandwidth∝tT^{GPT}_{step}∝\frac{Bytes_{KV Cache}(t)}{HBM Bandwidth}∝tTstepGPTHBMBandwidthBytesKVCache(t)t

2. DeepSeek-V3 核心重构

DeepSeek-V3 对 Transformer 做了两处根本性的架构手术:注意力机制(MLA)和 FFN 层(DeepSeekMoE)。这两处修改分别针对 Memory Wall 和计算冗余——前者从数学上压缩了推理访存量,后者从结构上解耦了参数量与计算量。
在这里插入图片描述

2.1 MLA:低秩联合压缩的数学原理

2.1.1前置:多头注意力完整演进链路

自2017年Transformer提出MHA以来,大模型注意力机制的迭代主线始终只有一条:在尽量无损模型表征能力的前提下,压缩KV Cache、破解显存与带宽瓶颈。从原始MHA到最终DeepSeek-V3所用的MLA,形成一条循序渐进的技术演进链:MHA → MQA → GQA → MLA,每一轮优化都是效果与缓存开销的极限拉扯。
在这里插入图片描述

(1)MHA:原始多头注意力,性能最优、缓存开销最大

MHA是Transformer原生注意力,为每个注意力头分配独立Q/K/V投影矩阵,多头并行建模多维语义特征,表征能力最强。但致命缺陷是每一个注意力头都需要缓存专属K、V,KV Cache显存占用与头数成正比,长序列推理下显存爆炸,也是前文1.3节Memory Wall的直接诱因。

(2)MQA:极致压缩,牺牲精度换显存

2019年提出的MQA是首个极简优化方案:保留多组查询Q,让全部注意力头共享同一组K、V。该方案直接将KV Cache压缩至原始MHA的 1/h1/h1/h,显存压缩达到理论上限,但过度压缩破坏多头表征多样性,极易造成语义理解精度下降,模型能力损耗明显。

(3)GQA:折中方案,平衡精度与显存

为调和MHA与MQA的矛盾,GQA提出分组折中策略:将全部注意力头划分为 ggg 个分组,同一分组内的头共享K、V,不同分组相互独立。参数边界清晰:g=hg=hg=h 等价于原生MHA,g=1g=1g=1 等价于MQA。主流大模型(LLaMA2、DeepSeek-V1)默认设置 g=8g=8g=8,兼顾推理显存开销与模型效果,但GQA依旧存在固有缺陷:依赖拆分、复制向量实现分组共享,属于表层线性优化,无法从数学本质上消除KV冗余,压缩上限存在天花板。

(4)演进终点:MLA 跳出传统优化框架

按照苏剑林老师博客结论:GQA本质上已是隐式低秩投影,但受限于固定拆分逻辑,无法进一步压缩。而MLA跳出“分组共享KV”的固有思路,直接从矩阵低秩分解、矩阵吸收的底层数学逻辑重构注意力,既保留多头表征能力,突破GQA压缩上限,又兼容RoPE位置编码,成为V3架构的核心底座。下文结合DeepSeek,拆解MLA完整原理。

注意力机制 单Token KV缓存元素量 模型表征能力
Multi-Head Attention (MHA) 2nhdhL2nhd_hL2nhdhL
Grouped-Query Attention (GQA) 2ngdhL2ngd_hL2ngdhL 中等
Multi-Query Attention (MQA) 2dhL2d_hL2dhL
MLA (Ours) (dc+dhR)L≈dL(d_c+d_h^R)L≈dL(dc+dhR)LdL 更强
2.1.2 核心:Key 和 Value 存在低秩结构

标准 MHA 为 K 和 V 各自维护一个 d×dd×dd×d 的投影矩阵,直接从 hth_tht 映射到 kt,vtk_t,v_tkt,vt。MLA 的核心观察是:不同注意力头的 Key 之间(Value 之间)存在强烈的线性相关性,它们在低维子空间中共享表示。
在这里插入图片描述

压缩-解压的数学形式

MLA 引入一个共享的低维隐向量 ctKV∈Rdcc^{KV}_t∈ℝ^{d_c}ctKVRdcdc≪dh⋅nhd_c≪d_h⋅n_hdcdhnh):
下行投影(压缩):
ctKV=WDKVht其中WDKV∈Rdc×dc^{KV}_t=W^{DKV}h_t \quad 其中W^{DKV}∈ℝ^{d_c×d}ctKV=WDKVht其中WDKVRdc×d
上行投影(解压):
在这里插入图片描述

推理阶段的关键性质——矩阵吸收:
在注意力计算中,Query 与 Key 的点积为:
在这里插入图片描述

可以将 WUKW^{UK}WUK 吸收到 Query 侧的投影矩阵中,推理时无需显式计算 kjCk^C_jkjC。同理,WUVW^{UV}WUV 可吸收到 WOW^OWO 中:
在这里插入图片描述

因此推理时 KV Cache 仅需存储低维的 ctKVc^{KV}_tctKV,而非完整的 kt,vtk_t,v_tkt,vt

MLACache 压缩比的定量分析

KVCacheMLAKVCacheMHA=dc+dhR2⋅nh⋅dh以DeepSeek−V2配置:4dh+dh/22⋅nh⋅dh=4.52⋅nh≈2.25nh \begin{matrix} \frac{KV Cache_{MLA}}{KV Cache_{MHA}} & =\frac{d_c+d_h^R}{2⋅n_h⋅d_h}\\ 以 DeepSeek-V2 配置:\frac{4d_h+d_h/2}{2⋅n_h⋅d_h} & =\frac{4.5}{2⋅n_h}≈\frac{2.25}{n_h} \end{matrix} KVCacheMHAKVCacheMLADeepSeekV2配置:2nhdh4dh+dh/2=2nhdhdc+dhR=2nh4.5nh2.25
nh=96n_h=96nh=96 时,MLA 的 KV Cache 仅为 MHA 的约 2.3%(实际报告显示为 6.7%,包含解耦 RoPE 的额外开销)。相比 GQA(g=8g=8g=8 时压缩到 8/96≈8.3%8/96≈8.3\%8/968.3%),MLA 压缩率更高且不牺牲每头的注意力多样性。

2.2 RoPE 与吸收性的冲突及解耦方案

2.2.1 RoPE 的定义与相对位置性质

RoPE(Rotary Position Embedding)通过旋转矩阵对 Query 和 Key 施加位置编码:
在这里插入图片描述

其中 Rt∈Rdh×dhR_t∈ℝ^{d_h×d_h}RtRdh×dh 为分块对角旋转矩阵,满足关键性质:
Rs⊤Rt=Rt−sR_s^⊤R_t=R_{t−s}RsRt=Rts
这使得注意力计算天然包含相对位置信息:
qs⊤ktRoPE=(Rsqs)⊤(Rtkt)=qs⊤Rs⊤Rtkt=qs⊤Rt−sktq_s^⊤k^{RoPE}_t=(R_s q_s)^⊤(R_t k_t)=q_s^⊤R_s^⊤R_t k_t=q_s^⊤R_{t−s}k_tqsktRoPE=(Rsqs)(Rtkt)=qsRsRtkt=qsRtskt

2.2.2 冲突的数学证明

假设将 RoPE 施加到已压缩再升维的 Key 上:
ktRoPE=Rt⋅(WUKctKV)k^{RoPE}_t=R_t⋅(W^{UK}c^{KV}_t)ktRoPE=Rt(WUKctKV)
在注意力计算中:
qt⊤⋅kjRoPE=qt⊤⋅Rj⋅WUK⋅cjKVq_t^⊤⋅k^{RoPE}_j=q_t^⊤⋅R_j⋅W^{UK}⋅c^{KV}_jqtkjRoPE=qtRjWUKcjKV
我们试图将 WUKW^{UK}WUK 吸收到 qtq_tqt 侧:
qt⊤⋅Rj⋅WUK⋅cjKV≠(qt⊤WUK)⋅Rj⋅cjKVq_t^⊤⋅R_j⋅W^{UK}⋅c^{KV}_j≠(q_t^⊤W^{UK})⋅R_j⋅c^{KV}_jqtRjWUKcjKV=(qtWUK)RjcjKV
矩阵乘法不满足交换律。RjR_jRj 夹在 qt⊤q_t^⊤qtWUKW^{UK}WUK 之间,无法越过旋转矩阵。RjR_jRj 是位置依赖的(随 jjj 变化),而吸收要求 WUKW^{UK}WUK 能与 Query 侧合并成与位置无关的固定变换。两者的矛盾不可调和。

2.2.3 解耦 RoPE:两条独立路径

MLA 的解耦方案极其直接——让 RoPE 走旁路:

解耦方案拆分两条独立通道,参数约束、可吸收性、缓存规则整理如下表:

通道 Query Key 是否可吸收 是否缓存
内容通道 qtC=WUQ⋅WDQhtq^C_t=W^{UQ}⋅W^{DQ}h_tqtC=WUQWDQht ktC=WUK⋅ctKVk^C_t=W^{UK}⋅c^{KV}_tktC=WUKctKV WUKW^{UK}WUK 可被吸收 仅缓存 ctKVc^{KV}_tctKV
位置通道 qtR=Rt⋅WQR⋅ctQq^R_t=R_t⋅W^{QR}⋅c^Q_tqtR=RtWQRctQ ktR=Rt⋅WKR⋅htk^R_t=R_t⋅W^{KR}⋅h_tktR=RtWKRht 但维度极低 (dhR≪dhd_h^R≪d_hdhRdh) 缓存 ktRk^R_tktR(所有头共享)

最终拼接:
qt,i=[qt,iC;  qt,iR]∈Rdh+dhRkt,i=[kt,iC;  ktR]∈Rdh+dhR \begin{matrix} q_{t,i} & =[q^C_{t,i};\;q^R_{t,i}]∈ℝ^{d_h+d_h^R}\\ k_{t,i} & =[k^C_{t,i};\;k^R_t]∈ℝ^{d_h+d_h^R} \end{matrix} qt,ikt,i=[qt,iC;qt,iR]Rdh+dhR=[kt,iC;ktR]Rdh+dhR

注意力计算:
在这里插入图片描述

两部分独立计算后相加。ktRk^R_tktR 维度极低(通常取 dhR=dh/2=64d_h^R=d_h/2=64dhR=dh/2=64)且所有头共享,所以额外缓存开销很小。解耦 RoPE 不是工程技巧——它是低秩压缩 + 旋转位置编码这一组合下的数学必然产物。

2.3 DeepSeekMoE:细粒度稀疏激活的极致

2.3.1从稠密 FFN 到 MoE 的演进逻辑

标准 Transformer 的 FFN 是一个 d→4d→dd→4d→dd4dd 的双层全连接网络,所有 Token 共享同一套参数,模型规模受限于单卡算力;而 MoE Transformer 的核心思想是用多个独立的“专家”FFN 替代单一 FFN,仅在部分 Encoder 层中替换 FFN 为 MoE 模块,通过 Gating 路由器为每个 Token 选择并激活少数几个专家,在大幅扩展总参数量的同时保持单 Token 计算量可控;为解决大模型单卡显存瓶颈,工程上进一步将 MoE 层拆分为多设备模型并行部署,通过 All-to-All Dispatch/Combine 通信机制实现 Token 跨设备路由与结果收集,让大规模 MoE 模型的训练成为可能。
在这里插入图片描述

DeepSeek-V3 的 DeepSeekMoE 包含三类组件:
① 共享专家(Shared Expert)

  • 数量:NsN_sNs
  • 特点:所有 token 都会无差别经过这组专家,不需要路由选择

② 路由专家(Routed Expert)

  • 数量:NrN_rNr
  • 特点:只有被 Router 选中的 token 才会进入这些专家,是 MoE 的 “稀疏计算核心”

③ 路由器(Router)

  • 位置:所有 token 输入的必经之路
  • 核心功能: 对每个 token 计算所有路由专家的 “亲和度分数”,选出分数最高的 Top-KrK_rKr 个专家,输出每个 token 对应的专家选择和权重,指导后续路由计算。
    在这里插入图片描述
2.3.2数学形式

FFN 输出由共享专家和路由专家的输出加权求和得到:
ht′=ut+∑i=1NsFFNi(s)(ut)+∑j=1Nrgt,j⋅FFNj(r)(ut) h'_t=u_t+\sum_{i=1}^{N_s}FFN^{(s)}_i(u_t)+\sum_{j=1}^{N_r}g_{t,j}⋅FFN^{(r)}_j(u_t) ht=ut+i=1NsFFNi(s)(ut)+j=1Nrgt,jFFNj(r)(ut)
其中门控值由 Sigmoid 亲和度归一化得到:
gt,j=st,j∑k∈TopKst,k,st,j=σ(ut⊤ej)g_{t,j}=\frac{s_{t,j}}{\sum_{k∈TopK}s_{t,k}},\quad s_{t,j}=σ(u_t^⊤e_j)gt,j=kTopKst,kst,j,st,j=σ(utej)

核心配置:
Ns=64N_s=64Ns=64(共享专家),Nr=256N_r=256Nr=256(路由专家)
TopK = 8(每 Token 激活 8 个路由专家)+ 64 共享专家 = 72 个激活专家
总参数 671B,激活参数 37B,激活比 ≈ 18:1

2.3.3 Device-Limited Routing

在分布式训练中,每个 Token 最多被发送到 MMM 个节点:

  1. 选择亲和度得分之和最高的 MMM 个节点
  2. 在这 MMM 个节点的专家中选 TopK

论文显示 M≥3M≥3M3 时收益明显。这一设计将跨节点通信限制在可控范围,使得 4 节点的 EP 配置下,通信与计算可几乎完全重叠。

2.4 无辅助损失负载均衡的动态偏置机制

2.4.1 传统方案的困境

MoE 路由 TopK({st,i})TopK(\{s_{t,i}\})TopK({st,i}) 极易坍缩——少数专家被高频激活,其余闲置。标准做法是加辅助损失 Lauxℒ_{aux}Laux 强制均匀:
Ltotal=LLM+α⋅Lauxℒ_{total}=ℒ_{LM}+α⋅ℒ_{aux}Ltotal=LLM+αLaux
但辅助损失过大会损害模型性能,过小则无法有效均衡。

2.4.2 动态偏置方案

DeepSeek-V3 将路由决策与输出权重解耦:
路由决策(决定选谁):TopK({st,i+bi}i=1Nr,K)输出门控(决定用多大权重):gt,i=exp⁡(st,i)∑j∈TopKexp⁡(st,j) \begin{matrix} 路由决策(决定选谁) & :TopK(\{s_{t,i}+b_i\}_{i=1}^{N_r},K)\\ 输出门控(决定用多大权重) & :g_{t,i}=\frac{\exp(s_{t,i})}{\sum_{j∈TopK}\exp(s_{t,j})} \end{matrix} 路由决策(决定选谁)输出门控(决定用多大权重):TopK({st,i+bi}i=1Nr,K):gt,i=jTopKexp(st,j)exp(st,i)
偏置 bib_ibi 只影响路由选择,不进入输出门控。训练中根据实际负载动态调节:
bi←{bi−γ,专家i过载(门槛升高→更难被选中)bi+γ,专家i欠载(门槛降低→更容易被选中) b_i← \begin{cases} b_i−γ, & 专家i过载(门槛升高 → 更难被选中)\\ b_i+γ, & 专家i欠载(门槛降低 → 更容易被选中) \end{cases} bi{biγ,bi+γ,专家i过载(门槛升高更难被选中)专家i欠载(门槛降低更容易被选中)
其中 γγγ 为偏置更新速度超参数。

2.4.3 为什么这比辅助损失更好
  • 辅助损失:在梯度层面拉扯模型参数,迫使专家选择趋向均匀——这会干扰语言建模的优化目标
  • 动态偏置:在控制逻辑层面调整——相当于在路由器上加了一个"流量控制器",模型本身可以自由学习最优表征

此外,为防止极端情况,DeepSeek-V3 还使用了一个微型序列级平衡损失 LBalℒ_{Bal}LBal 作为安全网,但系数极小,对主损失的干扰可忽略。
关键成果:DeepSeek-V3 在整个训练过程中没有丢弃任何 Token(V2 曾丢弃 10%),训练高度稳定,未发生任何不可恢复的 loss spike 或回滚。

3. DeepSeek-V3 工程创新

DeepSeek-V3 的工程创新是其能以 $557.6 万成本训练 671B 模型的关键。FP8 训练将显存和带宽需求减半,DualPipe 将通信完全隐藏在计算之后——两项叠加,打破了跨节点 MoE 训练的通信瓶颈。

3.1 FP8 混合精度训练框架

精度格式 总位数 指数位 尾数位 动态范围 精度 显存占用 (相对 FP32)
FP32 32 8 23 ±3.4×10³⁸ 最高 100%
BF16 16 8 7 ±3.4×10³⁸ 中等 50%
FP16 16 5 10 ±65504 中等 50%
FP8 E4M3 8 4 3 ±448 较低 25%
FP8 E5M2 8 5 2 ±57344 更低 25%

FP8 训练的主要挑战:

  1. 动态范围极窄(E4M3 仅 ±448)→ 异常值(outliers)导致严重量化误差
  2. 累加精度受限:H800 Tensor Core 的 FP8 GEMM 累加精度仅约 14 位,远低于 FP32
  3. 不同张量对精度的敏感度不同:激活、权重、梯度各有特性

3.2 细粒度量化:Tile-wise 与 Block-wise

3.2.1 Tensor-wise 量化的局限

传统 FP8 量化对整个 Tensor 使用单一 scale factor:
FP8(X)=Convert(Xscale),scale=max(∣X∣)448FP8(X)=Convert\left(\frac{X}{scale}\right),\quad scale=\frac{max(|X|)}{448}FP8(X)=Convert(scaleX),scale=448max(X)
但当 Tensor 中存在异常值(outlier)时,单一 scale 会导致大部分正常值被压缩到极小区间——产生严重的 rounding error。

3.2.2 DeepSeek 的细粒度方案
量化对象 分组方式 说明
Activations Tile-wise: 1×1281×1281×128 每个 token、每 128 个 channel 使用独立 scale
Weights Block-wise: 128×128128×128128×128 每 128 输入通道 × 128 输出通道使用独立 scale

量化核心原理:通过将量化粒度缩小到更小的元素组,每组内的数值分布更均匀,scale 可以更精确地反映该组的动态范围。即使整个 Tensor 存在极端异常值,也只影响其所在 tile/block,不会污染其他区域的量化精度。

对应的细粒度量化公式:
FP8(Xi,j)=Convert(Xi,jscalei(tile)),scalei=max⁡j(Xi,j)448FP8(X_{i,j})=Convert\left(\frac{X_{i,j}}{scale^{(tile)}_i}\right),\quad scale_i=\frac{\max_j(X_{i,j})}{448}FP8(Xi,j)=Convert(scalei(tile)Xi,j),scalei=448maxj(Xi,j)

3.2.3 激活与权重的尺度耦合

在 GEMM 计算 C=A×BC=A×BC=A×B 中,激活 AAA 的 tile scale 沿内维度 KKK 方向变化,权重 BBB 的 block scale 也沿 KKK 方向变化。两者的 dequantization 可在 CUDA Core 上高效融合。

这种 per-group scaling 沿 GEMM 内维度 KKK 的功能并非标准 FP8 GEMM 原生支持。DeepSeek 通过精确的 FP32 累加策略 + CUDA Core dequant 实现了这一机制。这一设计与 NVIDIA Blackwell 系列宣布的 microscaling 格式高度一致,具有前瞻性。
在这里插入图片描述

3.3 累加精度提升与 E4M3 全场景策略

3.3.1 累加精度问题

NVIDIA H800 GPU 的 FP8 GEMM(WGMMA 指令)在 Tensor Core 上的累加精度仅约 14 位,显著低于 FP32 的 23 位尾数 + 隐式位。当内维度 KKK 较大时(大 batch size 或宽模型),累加误差可达到近 2%。

3.3.2 Promotion to CUDA Core 策略

DeepSeek 采用 间隔提升(Interval Promotion) 方案:
NC=128N_C=128NC=128 个 MMA 元素(即 4 次 WGMMA),将 Tensor Core 的中间结果复制到 CUDA Core 的 FP32 寄存器
在 CUDA Core 上完成高精度 FP32 累加 + dequantization(乘以 scale factors)
利用 H800 架构上两个 warpgroup 交替执行的特点:一个 warpgroup 执行提升操作时,另一个可继续 MMA——两者重叠,Tensor Core 利用率不受影响。
在这里插入图片描述

3.3.3 E4M3 全场景策略

与以往工作(Fprop 用 E4M3,Dgrad/Wgrad 用 E5M2)不同,DeepSeek-V3 在所有 GEMM 中统一使用 E4M3 格式:

操作 传统策略 DeepSeek-V3 策略
Fprop E4M3(精度优先) E4M3
Dgrad E5M2(范围优先) E4M3
Wgrad E5M2(范围优先) E4M3

E4M3 全场景的可行性源于细粒度量化:通过在更小的 tile/block 内共享 exponent 位,有效缓解了 E4M3 动态范围不足的问题。Mantissa over Exponents——优先保证精度,用分块缩放来弥补范围。

3.3.4 低精度存储与通信
  • Optimizer States:AdamW 的一阶矩和二阶矩从 FP32 降为 BF16,几乎无损
  • Master Weights & Gradients:保持 FP32,确保数值稳定性
  • Cached Activations:以 FP8 存储,Wgrad 直接使用
  • MoE Dispatch:激活在 All-to-All 通信前量化为 FP8,通信量减半
  • Attention 后 Linear 输入:使用定制的 E5M6 格式(6 位尾数),scale 为 2 的整数次幂以避免额外量化误差

3.4 DualPipe 调度:计算-通信重叠的时序分析

3.4.1 问题背景

跨节点 MoE 训练的计算-通信比仅约 1:1——意味着如果不做重叠,GPU 将有 50% 的时间在等待通信。传统 1F1B(One-Forward-One-Backward)流水线并行无法解决这一问题。

3.4.2 DualPipe 的核心思想

DualPipe 将每个 micro-batch 的计算拆分为 4 个组件:Attention、All-to-All Dispatch、MLP、All-to-All Combine。反向传播中,Attention 和 MLP 进一步拆分为 backward-for-input 和 backward-for-weights。然后在一个 forward-backward chunk pair 中重新排列这些组件,实现计算与通信的完全重叠。

3.4.3 全流水线调度的双向设计

DualPipe 通过将每个 micro-batch 的计算细粒度拆解为 Forward (F)、Backward-for-Input (B) 和 Backward-for-Weights (W) 三个阶段,并从流水线两端双向喂入任务,实现了计算与通信在时间轴上的‘垂直对齐’。镜像对称的调度让跨节点的 All-to-All 通信(Dispatch/Combine)被完全掩盖在 MLP 和 Attention 的计算窗口内,几乎消除了流水线气泡(Pipeline Bubble)。
在这里插入图片描述
在这里插入图片描述

3.4.4 Pipeline Bubble 对比
Method Bubble说明
1F1B PP (PP−1)(F+B)(PP-1)(F +B)(PP1)(F+B)
ZB1P (PP−1)(F+B−2W)(PP-1)(F +B-2W)(PP1)(F+B2W)
DualPipe (Ours) 气泡规模显著小于1F1B、ZB1P,配合大EP分摊双倍参数内存开销

PPP = pipeline stage 数,MMM = micro-batch 数,FFF = forward+backward 重叠因子。DualPipe 的 bubble 显著小于 1F1B 和 ZB1P,同时通过大 EP 分摊了双倍参数内存的开销。

3.4.5 FP8 如何消除跨节点通信瓶颈

跨节点 All-to-All 通信的瓶颈在于 IB 带宽(50 GB/s)仅为 NVLink 带宽(160 GB/s)的约 1/3。FP8 将通信量减半:
通信时间FP8=12⋅通信时间BF16通信时间_{FP8}=\frac{1}{2}⋅通信时间_{BF16}通信时FP8=21通信时BF16
结合 DualPipe 的重叠策略和节点限制路由(每 Token ≤4 节点),DeepSeek-V3 实现了 跨节点通信的几乎零开销——只要计算-通信比保持恒定,模型可进一步扩展而无需额外通信成本。

4. 训练增益:MTP 多 Token 预测

4.1 级联式 MTP 架构

传统 GPT 在每个位置仅预测下一个 Token(Next Token Prediction)。DeepSeek-V3 引入 Multi-Token Prediction (MTP),在每个位置预测后续 DDD 个 Token。
与 Gloeckle et al. (2024) 的并行独立输出头不同,DeepSeek 采用级联式(Sequential)MTP,保持完整的因果链:
在这里插入图片描述

关键设计细节:

  1. 共享 Embedding 与 Output Head:所有 MTP 模块与主模型共享同一套 Embedding 和 Output Head,物理共享减少了参数量和显存
  2. 因果链保持:hki+1h^{i+1}_khki+1 不仅依赖主模型对 tit_iti 的编码 hi1h^1_ihi1,还依赖前一 MTP 模块对 ti+1t_{i+1}ti+1 的预测编码 hi+1kh^k_{i+1}hi+1k——这与 EAGLE 投机解码的思路同源
  3. 级联而非并行:Gloeckle 等并行预测 DDD 个 Token 使用独立输出头,DeepSeek 级联预测保持因果链,使模型在预测更深位置的 Token 时可以利用其对较近位置的预测结果

MTP 总损失:
LMTP=λD∑k=1DLMTPk=λD∑k=1DCrossEntropy(Pk+1(tk+2),tk+2) ℒ_{MTP}=\frac{λ}{D}\sum_{k=1}^{D}ℒ^k_{MTP}=\frac{λ}{D}\sum_{k=1}^{D}CrossEntropy(P_{k+1}(t_{k+2}),t_{k+2}) LMTP=Dλk=1DLMTPk=Dλk=1DCrossEntropy(Pk+1(tk+2),tk+2)
其中 λλλ 为加权因子。

4.2 监督信号密度与推理加速

4.2.1 训练增益:增加监督信号密度

标准 Next Token Prediction 在每个位置只产生一个监督信号。MTP 在每个位置产生 D+1D+1D+1 个(主模型 1 个 + DDD 个 MTP 模块):
监督信号密度MTP=(D+1)×监督信号密度STP监督信号密度_{MTP}=(D+1)×监督信号密度_{STP}监督信号密MTP=(D+1)×监督信号密STP
这有两个效果:

  1. 数据效率提升:每个训练 step 从同样数量的 Token 中提取更多学习信号
  2. 预规划能力:为了预测 t+2,t+3,…t+2,t+3,…t+2,t+3,,模型必须在当前层级就建立对未来语境的"预判"表征——这是一种隐式的规划(Planning)训练
4.2.2 推理加速:投机解码

MTP 模块在训练后可直接用于投机解码(Speculative Decoding):

  1. 主模型生成第一个 Token
  2. MTP 模块并行"投机"后续 DDD 个 Token
  3. 主模型一次性验证所有投机 Token
  4. 接受匹配的 Token,拒绝不匹配的,回退重生成

这可将推理时延降低到原来的 1/(D+1)1/(D+1)1/(D+1) 以下(取决于接受率)。在实际应用中,投机解码的加速比高度依赖于“接受率”。如果 MTP 模块预测的 Token 与主模型不一致,性能提升会大幅缩水甚至失效。

5. 全维度差异对比与创新总结

5.1 GPT vs DeepSeek-V3 全景对比

维度 GPT-4 DeepSeek-V3
总参数 ~1.8T(MoE,推测) 671B
激活参数 ~280B(推测) 37B (5.5%)
注意力机制 GQA (g=8g=8g=8) MLA (低秩联合压缩)
KV Cache/Token 2⋅ng⋅dh⋅L2⋅n_g⋅d_h⋅L2ngdhL dc+dhR≈576d_c+d_h^R≈576dc+dhR576 元素
KV Cache 压缩比 ~10.4%(相对 MHA) ~6.7%(相对 MHA)
FFN 结构 大粒度 MoE(推测 8-16 专家) DeepSeekMoE(64 共享 + 256 路由)
负载均衡 辅助损失 无辅助损失 + 动态偏置
Token 丢弃 不明确 零丢弃
训练精度 BF16/FP16 FP8 混合精度 (E4M3 全场景)
量化粒度 Tensor-wise Tile-wise (1×128) + Block-wise (128×128)
流水线并行 1F1B / ZB DualPipe(双向 + 通信完全隐藏)
位置编码 RoPE 解耦 RoPE(内容通道可吸收)
预测模式 单 Token 预测 (STP) 多 Token 预测 (MTP)
训练成本 数千万-上亿美元 $557.6 万(2.788M H800 GPU 小时)
训练数据 ~15T tokens(推测) 14.8T tokens
上下文长度 128K 128K(两阶段扩展:4K→32K→128K)
训练稳定性 存在 loss spike,需回滚 全程无不可恢复 loss spike,零回滚
并行策略 TP + PP + DP 64-way EP + 16-way PP (DualPipe) + ZeRO-1 DP
推理部署 统一部署 PD 分离(Prefill 32 GPU / Decode 320 GPU)

5.2 核心结论

GPT 路线 DeepSeek 路线
解题思路 增大资源投入(更多 GPU × 更长时间) 提高资源利用效率(同样资源做更多事)
架构策略 MHA/GQA + 稠密/大粒度 MoE 自 GPT-1 始基本不变 改造注意力、FFN、训练目标、数值精度
推理成本 与参数量 1:1 线性增长 与激活参数量挂钩,与总参数量解耦
长文本 memory-bound,质变需要架构改动 memory-efficient,架构层已解决
核心问题 “如何获得更多算力?” “如何让已有算力更高效?”
DeepSeek-V3 的核心贡献
  1. MLA (Multi-head Latent Attention):通过低秩联合压缩,证明了 KV Cache 可以从 2nhdh2n_hd_h2nhdh 压缩到 dc+dhRd_c+d_h^Rdc+dhR,并通过解耦 RoPE 实现了内容通道中 WUKW^{UK}WUK 的完美吸收。这不是工程技巧,而是线性代数结构 + 位置编码约束下的数学必然。
  2. 无辅助损失负载均衡:将 MoE 的负载均衡从优化目标层面(辅助损失)下移到控制逻辑层面(动态偏置)——这是对"MoE 路由"问题本质的重新认识:负载均衡是工程约束,不应污染模型的学习目标。
  3. FP8 全场景训练:首次在超大规模模型上验证了 FP8 训练的可行性。细粒度量化(tile-wise + block-wise)+ 间隔 FP32 累加 + E4M3 全场景策略,三者构成完整的低精度训练方法论。
  4. DualPipe + 通信 Kernel 协同设计:将 MoE 通信从瓶颈变为可隐藏的背景操作。配合 FP8 减半的通信量,实现了跨节点通信的几乎零开销,使得 64-way EP 在 8 节点上的训练效率接近单节点。
  5. MTP (Multi-Token Prediction):通过级联式多 Token 预测增加训练信号密度,同时为投机解码提供现成的 draft model。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐