deepseek-v2之MLA(Multi-Head Latent Attention)潜在注意力机制
摘要:DeepSeek-V2的MLA(Multi-Head Latent Attention)通过KV压缩解决Transformer的KV Cache瓶颈。传统方法需缓存所有历史token的高维Key/Value向量(显存占用大),而MLA利用低秩压缩将KV映射到潜空间,仅需存储压缩后的低维向量$\mathbf{c}_t^{KV}$,显存占用减少87.5%(如$d_c=1024$时压缩比达8×)。
DeepSeek-V2 MLA(Multi-Head Latent Attention) 技术的关键创新,旨在解决传统Transformer的 KV Cache 瓶颈。
一、核心目标:为什么需要 KV 压缩?
-
传统 Transformer 的问题:
在生成式任务中,每个新 token 需要缓存所有历史 token 的 Key (K) 和 Value (V) 向量(即 KV Cache)。- 假设模型有
n_h个头,每头维度d_h,则单 token 的 KV Cache 大小为:
KV Size=2×nh×dh \text{KV Size} = 2 \times n_h \times d_h KV Size=2×nh×dh - 生成 32K token 时,KV Cache 占用显存可达 数百 MB(如 Llama-3-70B 约 256MB),严重拖慢推理速度。
- 假设模型有
-
MLA 的解决方案:
通过 低秩压缩 将 KV 向量映射到 低维潜空间,仅缓存压缩后的向量,大幅减少显存占用。
二、关键公式解析(结合图示)
步骤 1:联合压缩键值(KV Compression)
公式 (9)
ctKV=WDKVht(9) \mathbf{c}_t^{KV} = W^{DKV} \mathbf{h}_t \quad \text{(9)} ctKV=WDKVht(9)
- ht\mathbf{h}_tht:当前 token 的输入向量(维度 ddd)
- WDKVW^{DKV}WDKV:下投影矩阵(维度 dc×dd_c \times ddc×d),dc≪dd_c \ll ddc≪d
- ctKV\mathbf{c}_t^{KV}ctKV:压缩后的潜向量(维度 dcd_cdc),只需缓存它
物理意义:
将高维输入 ht\mathbf{h}_tht 通过线性变换压缩到低维潜空间 dcd_cdc(例如 d=4096→dc=1024d=4096 \rightarrow d_c=1024d=4096→dc=1024)。
步骤 2:从潜向量重建键值(Key/Value Decompression)
公式 (10) & (11)
ktC=WUKctKV,vtC=WUVctKV(10,11) \mathbf{k}_t^C = W^{UK} \mathbf{c}_t^{KV}, \quad \mathbf{v}_t^C = W^{UV} \mathbf{c}_t^{KV} \quad \text{(10,11)} ktC=WUKctKV,vtC=WUVctKV(10,11)
- WUK,WUVW^{UK}, W^{UV}WUK,WUV:上投影矩阵(维度 nhdh×dcn_h d_h \times d_cnhdh×dc)
- ktC,vtC\mathbf{k}_t^C, \mathbf{v}_t^CktC,vtC:重建后的 Key/Value(维度 nhdhn_h d_hnhdh)
物理意义:
用两个独立矩阵将潜向量 ctKV\mathbf{c}_t^{KV}ctKV 分别解压为 Key 和 Value,用于后续注意力计算。
三、为什么能大幅减少 KV Cache?
✅ 推理阶段只需缓存 ctKV\mathbf{c}_t^{KV}ctKV
- 传统方法需缓存 原始 K/V(大小 2×nh×dh2 \times n_h \times d_h2×nh×dh 每 token)
- MLA 仅需缓存 压缩向量 ctKV\mathbf{c}_t^{KV}ctKV(大小 dcd_cdc 每 token)
- 压缩比:$ \frac{d_c}{2 n_h d_h} $
- 典型值:dc=1024d_c=1024dc=1024, nh=32n_h=32nh=32, dh=128d_h=128dh=128 → $ \frac{1024}{2 \times 32 \times 128} = \frac{1}{8} $
- KV Cache 直接减少 87.5%!
✅ 上投影矩阵可合并(进一步优化)
文中关键说明:
“During inference, since WUKW^{UK}WUK can be absorbed into WQW^QWQ, and WUVW^{UV}WUV can be absorbed into WOW^OWO, we even do not need to compute keys and values out for attention.”技术细节:
- 注意力计算本质是:$ \text{Attention}(Q,K,V) = \text{softmax}(QK^T/\sqrt{d_k}) V $
- 由于 K=WUKcKVK = W^{UK} \mathbf{c}^{KV}K=WUKcKV, V=WUVcKVV = W^{UV} \mathbf{c}^{KV}V=WUVcKV,可改写为:
Attention=softmax(Q(WUKcKV)T/dk)(WUVcKV) \text{Attention} = \text{softmax}\left( Q (W^{UK} \mathbf{c}^{KV})^T / \sqrt{d_k} \right) (W^{UV} \mathbf{c}^{KV}) Attention=softmax(Q(WUKcKV)T/dk)(WUVcKV)- WUKW^{UK}WUK 可合并到 QQQ 的计算中(QQQ 本身也需线性变换),WUVW^{UV}WUV 可合并到输出投影 WOW^OWO 中
- 结果:推理时完全不需要显式计算 K/V,只需缓存 cKV\mathbf{c}^{KV}cKV 并直接用于注意力运算。
四、查询压缩(Query Compression)的补充说明
公式 (12) & (13)
ctQ=WDQht,qtC=WUQctQ \mathbf{c}_t^{Q} = W^{DQ} \mathbf{h}_t, \quad \mathbf{q}_t^C = W^{UQ} \mathbf{c}_t^{Q} ctQ=WDQht,qtC=WUQctQ
- 目的:减少训练时的 激活内存(activation memory),不影响 KV Cache
- 原理:
将 Query 也压缩到低维 ctQ\mathbf{c}_t^{Q}ctQ(维度 dc′d_c'dc′),再解压为 qtC\mathbf{q}_t^CqtC。
- 训练时中间激活值减少 → 显存占用降低
- 推理时仍需计算完整 Query(因 QQQ 无法被吸收)
为什么 Query 压缩不能减少 KV Cache?
因为 KV Cache 仅存储历史 token 的 K/V,而 Query 是当前 token 的输入,无需缓存。
五、技术价值总结
| 传统 MHA | DeepSeek-V2 的 MLA |
|---|---|
| 缓存对象 | 原始 Key/Value (2×nh×dh2 \times n_h \times d_h2×nh×dh) |
| 32K token KV Cache | ~256 MB |
| 推理速度 | 受限于显存带宽 |
| 训练显存 | 高(需存储全 K/V) |
六、直观示意图(对应 Figure 3)
传统 MHA 的 KV Cache:
[ K₁, V₁ ] → [ K₂, V₂ ] → ... → [ Kₙ, Vₙ ] // 每个框占 2×n_h×d_h
DeepSeek-V2 的 MLA:
[ c₁ ] → [ c₂ ] → ... → [ cₙ ] // 每个框仅占 d_c
↓ ↓
K₁,V₁ K₂,V₂ // 仅在需要时解压(且可被吸收)
关键结论
- KV 压缩的本质:
用 低秩潜向量 cKV\mathbf{c}^{KV}cKV 作为“中间表示”,替代高维 K/V 的存储和传输。 - 工程突破:
- 推理时 只缓存 cKV\mathbf{c}^{KV}cKV → KV Cache 降低 8×
- 上投影矩阵可吸收 → 避免显式解压 K/V,进一步加速计算
- 适用场景:
长文本生成(>8K tokens)、边缘设备部署、高吞吐推理服务。
💡 为什么 DeepSeek-V2 能支持 128K 上下文?
传统模型在 32K 时 KV Cache 已占满显存,而 MLA 使 KV Cache 随长度线性增长的斜率降低 8 倍,128K 时显存占用仍低于传统模型 16K 的水平。
如果需要进一步探讨 压缩维度 dcd_cdc 的选择 或 与 MoE 的协同优化,可以继续深入!
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)