MLA (Multi-Head Latent Attention,多头潜在注意力)是 DeepSeek-V2/V3 系列最具标志性的架构创新,它并非简单的注意力变体,而是对 Transformer 推理瓶颈的结构性重构 ------用低秩压缩替代显式存储完整 KV Cache,在保持 MHA 性能的同时,将推理内存占用压缩至 GQA/MQA 级别。
一、背景:为什么需要 MLA?
标准 Transformer 的多头注意力(MHA)在自回归推理时,需要为每个 Token 缓存完整的 Key 和 Value 矩阵。随着序列长度增长,KV Cache 成为内存带宽瓶颈:
- MHA :每头独立 K/V,Cache 大小 ∝
n_heads × d_head × seq_len - GQA/MQA:共享 K/V 减少 Cache,但注意力容量下降,性能受损
DeepSeek 的核心洞察:K 和 V 矩阵存在大量冗余,可通过低秩投影压缩到潜在空间,推理时只存压缩向量,计算时实时解压。
二、核心原理:低秩联合压缩 + 解耦 RoPE
MLA 包含两个正交设计:
1. 低秩联合压缩(Low-Rank Joint Compression)
将 Key 和 Value 共同压缩 到一个低维潜在向量 c_t^KV,而非分别存储:
| 操作 | 公式 | 维度说明 |
|---|---|---|
| KV 压缩 | c_t^KV = W^DKV · h_t |
c_t^KV ∈ R^(d_c),d_c << d_h × n_h |
| Key 解压 | k_t^C = W^UK · c_t^KV |
恢复多头维度 |
| Value 解压 | v_t^C = W^UV · c_t^KV |
同上 |
关键 :W^DKV 是下投影(降维),W^UK / W^UV 是上投影(升维)。推理时只需缓存小小的 c_t^KV 向量,而非完整的 k_t 和 v_t。
2. 解耦 RoPE(Decoupled Rotary Positional Embedding)
RoPE(旋转位置编码)与低秩压缩不兼容------如果对压缩后的向量加 RoPE,位置信息会在低维空间中纠缠。
MLA 的解决方案:将内容信息与位置信息物理分离:
- 内容部分 :
k_t,i^C和q_t,i^C通过低秩压缩传递语义信息 - 位置部分 :单独维护一小段携带 RoPE 的向量
k_t^R和q_t,i^R
最终拼接:
k_t,i = [k_t,i^C; k_t^R] # 内容 + 位置
q_t,i = [q_t,i^C; q_t,i^R] # 内容 + 位置
推理时只需缓存:
c_t^KV(压缩的 KV 内容,蓝色框)k_t^R(携带 RoPE 的位置键,蓝色框)
相比 MHA 缓存完整的 K 和 V 矩阵,MLA 的 Cache 体积减少高达 93.3%。
三、完整数学公式(DeepSeek-V3 技术报告版)
设 d 为嵌入维度,n_h 为头数,d_h 为每头维度,h_t 为第 t 个 Token 的输入:
KV 侧(推理必须缓存)
(1) c_t^KV = W^DKV · h_t # 压缩,W^DKV ∈ R^(d_c × d)
(2) [k_t,1^C; ...; k_t,nh^C] = W^UK · c_t^KV # Key 解压,W^UK ∈ R^(dh·nh × dc)
(3) k_t^R = RoPE(W^KR · h_t) # 位置键,W^KR ∈ R^(dhR × d),需缓存
(4) k_t,i = [k_t,i^C; k_t^R] # 拼接
(5) [v_t,1^C; ...; v_t,nh^C] = W^UV · c_t^KV # Value 解压,W^UV ∈ R^(dh·nh × dc)
Query 侧(训练时压缩激活内存,推理时实时计算)
(6) c_t^Q = W^DQ · h_t # Query 压缩
(7) [q_t,1^C; ...] = W^UQ · c_t^Q # 内容解压
(8) q_t^R = RoPE(W^QR · c_t^Q) # 位置部分
(9) q_t,i = [q_t,i^C; q_t,i^R] # 拼接
缓存对象 :仅 c_t^KV(维度 d_c)和 k_t^R(维度 d_h^R),合计远小于 MHA 的 2 × d_h × n_h。
四、两种工程实现:Naive vs Absorb
MLA 在硬件上有两种落地方式,直接影响 Kernel 设计:
| 模式 | 原理 | KV Cache 状态 | 计算特点 | 适用场景 |
|---|---|---|---|---|
| Naive | 先解压 KV 到完整维度,再做标准 Attention | 压缩存储,计算前解压 | 兼容现有 FlashAttention,但需显式上投影 | 通用 GPU,快速适配 |
| Absorb(权重吸收) | 利用矩阵乘法结合律,将 W^UK 吸收进 Q/O 投影,KV 全程保持压缩 |
全程压缩 | 需定制 Kernel(FlashMLA/ThunderMLA),Q 维度膨胀但避免解压开销 | 极致性能,生产环境 |
Absorb 的数学本质:
标准:Q·K^T = (W^UQ·c^Q)·(W^UK·c^KV)^T
吸收后:Q·K^T = W^UQ · (c^Q · c^KV^T) · W^UK,T
通过重排计算顺序,KV Cache 永远不需要解压回高维空间。
DeepSeek 官方开源的 FlashMLA 以及 TileKernels 中的 MLA 实现,均采用 Absorb 模式以达到硬件极限性能。
五、硬件性能分析
根据 KU Leuven 的硬件级研究:
| 指标 | MHA | MLA (Absorb) | 提升 |
|---|---|---|---|
| KV Cache 体积 | 基准 | 减少 93.3% | 内存带宽压力剧降 |
| Decode 阶段强度 | Memory-bound | Compute-bound | 更适合现代 GPU |
| 吞吐量 | 受限于 HBM 带宽 | 接近 Tensor Core 算力上限 | 长序列下 2-5× |
| 能耗效率 | 高带宽 = 高功耗 | 低带宽 = 低功耗 | 同性能下能耗显著降低 |
关键洞察:MLA 将 Attention 从"内存瓶颈"转变为"计算瓶颈",使 H100/B200 等计算密集型加速器得以充分发挥。
六、与 MHA / GQA / MQA 的对比
| 机制 | KV Cache 大小 | 注意力容量 | 性能损失 | 代表模型 |
|---|---|---|---|---|
| MHA | 2·n_h·d_h·L |
最高 | 无 | GPT-4, Llama 2 |
| GQA | 2·n_g·d_h·L |
中等 | 轻微 | Llama 3, Mistral |
| MQA | 2·d_h·L |
最低 | 明显 | PaLM, 早期推理优化 |
| MLA | (d_c + d_h^R)·L |
接近 MHA | 极小 | DeepSeek-V2/V3, Kimi K2, LongCat |
MLA 的巧妙之处在于:通过低秩解压恢复了 MHA 的表达能力,却只需 MQA 级别的缓存。GQA 是"硬砍头数",MLA 是"软压缩维度"。
七、开源实现
| 项目 | 地址 | 说明 |
|---|---|---|
| FlashMLA | deepseek-ai/FlashMLA | DeepSeek 官方开源的高效 MLA CUDA Kernel,Hopper 优化 |
| TileKernels (MLA) | deepseek-ai/TileKernels | 基于 TileLang 的 MLA 实现,80 行 Python 代码达到 CUTLASS 手写 CUDA 性能 |
| MHA2MLA | 论文开源 | 将现有 MHA 模型(如 Llama)微调转换为 MLA,仅需 0.3%-0.6% 数据 |
| TyphoonMLA | arxiv 论文 | 针对共享前缀优化的混合 Naive-Absorb Kernel |
八、后续演进:DeepSeek V4 的 MLA++
DeepSeek V4 在 MLA 基础上进一步压缩:
- 共享 K/V:Key 和 Value 完全共享同一份缓存,再省 2×
- c4a / c128a 压缩:将多个 Token 的 KV 加权融合为单个压缩 Token(1/4 或 1/128)
- 反向 RoPE:对 Attention 输出做逆 RoPE 修正,保证共享后的位置正确性
- DSA 稀疏注意力:在压缩后的 KV 上再做动态稀疏选择,百万级上下文可控
综合效果 :1M Token 上下文,V4 的缓存总量从 V3 的约 508 GiB 降至约 58 GiB(8.7× 节省)。
总结
MLA 的本质是"用矩阵分解替代显式存储":通过低秩投影将 K/V 压缩到潜在空间,同时用解耦 RoPE 保住位置精度,让 Transformer 推理从"内存搬运工"变回"计算密集型任务"。