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 ddcd
  • ctKV\mathbf{c}_t^{KV}ctKV:压缩后的潜向量(维度 dcd_cdc),只需缓存它

物理意义
将高维输入 ht\mathbf{h}_tht 通过线性变换压缩到低维潜空间 dcd_cdc(例如 d=4096→dc=1024d=4096 \rightarrow d_c=1024d=4096dc=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₂  // 仅在需要时解压(且可被吸收)

关键结论

  1. KV 压缩的本质
    低秩潜向量 cKV\mathbf{c}^{KV}cKV 作为“中间表示”,替代高维 K/V 的存储和传输。
  2. 工程突破
    • 推理时 只缓存 cKV\mathbf{c}^{KV}cKV → KV Cache 降低 8×
    • 上投影矩阵可吸收 → 避免显式解压 K/V,进一步加速计算
  3. 适用场景
    长文本生成(>8K tokens)、边缘设备部署、高吞吐推理服务。

💡 为什么 DeepSeek-V2 能支持 128K 上下文?
传统模型在 32K 时 KV Cache 已占满显存,而 MLA 使 KV Cache 随长度线性增长的斜率降低 8 倍,128K 时显存占用仍低于传统模型 16K 的水平。

如果需要进一步探讨 压缩维度 dcd_cdc 的选择与 MoE 的协同优化,可以继续深入!

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐