MLA 深度解析:DeepSeek 把 KV Cache 压掉 93% 的算法全貌

大模型推理的显存账本里,最大的固定支出不是模型权重,而是 KV cache:每生成一个 token,都要把全部历史 token 的键值对读一遍,上下文越长、模型越大,这笔支出越夸张。压缩 KV cache 因此成了各家的必答题,而 DeepSeek 在 V2 论文中给出的答案——多头潜在注意力(MLA)——是其中最激进也最有影响力的一个:KV cache 只有完整多头注意力的约 1.8%,官方口径下质量反而强于 MHA。这篇深度解析拆开 MLA 的三个核心设计——低秩联合压缩、矩阵吸收、解耦 RoPE——再看它扩散到 Kimi K2 的过程与真实的工程代价。

一、KV Cache 问题的两难:MQA 太省但掉分,GQA 折中

先看问题的形状。标准多头注意力(MHA)下,推理时每个 token 每层要缓存全部头的 K 和 V,共 2·n_h·d_h 个元素。以 DeepSeek-V2 的配置(128 个头、每头 128 维)计算,每层是 32768 个元素,60 层叠起来就是天文数字,而且这个量随上下文长度线性增长、随并发请求数成倍放大——显存带宽很快成为解码速度的瓶颈。

此前的压缩思路是「共享」:Shazeer 2019 年的 MQA 让所有头共用一组 K/V,缓存降到 2·d_h,但质量有损;Google 2023 年的 GQA 折中为分组共享,质量接近 MHA,缓存取决于组数。这条路线的取舍是线性的:组越少越省、越掉分。

MLA 换了一个思路:不共享头,而是假设 K/V 的信息量本身是低秩的——把所有头的 K/V 联合压缩进一个低维潜在向量,需要时再解压。这样省出的空间不依赖牺牲头数,理论上不丢表达能力。

低秩假设并非拍脑袋:注意力各头的 K/V 存在大量跨头冗余,这意味着完整解压出的 K/V 张量可以用一个低维基底近似张成。2025 年的 TransMLA 从另一面验证了这一点——它给出了一套等参数量的变换,可以把 GQA 模型转换为 MLA 并保持表达能力,等于学界正面承认了潜在压缩的表达力上限不弱于主流方案。

小结:MQA/GQA 用「共享头」换缓存,MLA 用「低秩压缩」换缓存——前者在质量与缓存之间做线性取舍,后者试图绕开这个取舍。

二、低秩联合压缩:只缓存一个 512 维向量

MLA 的核心公式链条是这样的(以 DeepSeek-V2 为例):把隐藏态 h_t 用一个下投影矩阵压进 512 维潜在空间,得到 c_KV = W_DKV·h_t;再用两个上投影矩阵解压出内容部分的内积用量:k_C = W_UK·c_KV、v = W_UV·c_KV。推理时每 token 只需缓存 c_KV 这一个 512 维向量——K 和 V 都从它派生,所以叫「联合压缩」。

Q 侧也做了同样的低秩压缩(1536 维),但目的不同:Q 是每步现算的、不进缓存,压缩 Q 省的是训练时的激活内存。这就是「latent」的含义——把注意力的大头计算都搬到一个小空间里进行。

缓存收益直接算得出来。V2 论文给出了四种方案的每层缓存公式:

方案 每 token 每层缓存 V2 配置下数值 相对 MHA
MHA 2·n_h·d_h 32768 1x
MQA 2·d_h 256 0.8%
GQA(g 组) 2·g·d_h g×256 g/128
MLA d_c + d_R 512 + 64 = 576 约 1.8%

MLA 的 576 恰好等于「2.25 组 GQA」的缓存量(V2 论文的官方类比),官方报告给出的端到端口径是:相对 DeepSeek 67B 稠密基座,KV cache 减少 93.3%、生成吞吐提升 5.76 倍,同时性能强于 MHA。缓存省了 98% 量级而官方质量口径不掉反升,这在 MQA/GQA 的线性取舍框架里是解释不了的——关键在下一个设计。

三、矩阵吸收:在压缩空间里直接打分

看到这里应该有个疑问:既然 K/V 要从 c_KV 解压出来,计算时不是还得先付出解压的开销吗?MLA 的回答是:解压可以完全省掉。

利用矩阵乘法的结合律,两个相邻投影可以预先合并:

# 朴素视角:解压出 K 再打分(每步都要做矩阵乘)
k_j = W_UK @ c_kv[j]
score_j = q @ k_j.T

# 吸收视角:W_UK 合并进 Q 侧投影(预计算一次),直接在压缩空间打分
W_eff = W_UQ.T @ W_UK          # 形状 (d_c_q, d_c_kv),可离线合并
score_j = (W_eff @ c_q) @ c_kv[j]   # 不再出现解压后的 k_j

这就是论文原文所说的「将 W_UK 吸收进 W_UQ,将 W_UV 吸收进 W_O」:注意力打分直接对缓存的 512 维潜在向量进行,V 的加权求和同样吸收进输出投影。解压矩阵在推理路径上消失了——MLA 在缓存上等效于 MQA 式的极简结构,在表达能力上保留 MHA 的完整头结构,这正是「缓存小、质量不掉」的数学来源。代价是每步计算量的重新分配:等效头维度从 128 变成 576(512 内容 + 64 位置),属于「以计算换显存」的设计。

小结:低秩压缩决定缓存大小,矩阵吸收决定计算路径——两者合起来才构成 MLA「省而不损」的完整承诺。

四、解耦 RoPE:一个不得不加的补丁

吸收技巧有一个致命冲突:RoPE。旋转位置编码要作用在 Q 和 K 上,而旋转矩阵与 token 的绝对位置相关——如果对解压后的 k_C 施加 RoPE,位置旋转矩阵就会卡在 W_UQ 与 W_UK 的合并路径中间。V2 论文的原话一针见血:矩阵乘法不满足交换律,与当前生成 token 相关的 RoPE 矩阵会楔在两个吸收矩阵之间,迫使推理时对所有前缀 token 重算 key,推理效率大幅受损。

MLA 的解法是把「位置」与「内容」拆成两条独立通道:内容通道(上面的压缩-吸收路径)完全不带位置信息;位置通道单独用一个小的投影 k_R = RoPE(W_KR·h_t) 生成 64 维共享 RoPE 键,Q 侧同样拆出一个 64 维 RoPE 查询。打分时两段拼接:内容部分在压缩空间算,位置部分在 64 维小空间算,互不干扰。社区分析(如苏剑林的推导文章)把这一结构理解为「部分 RoPE」的极端形式——位置信息只占很小一部分维度,其余维度全部让位给可吸收的内容通道。

这条补丁的账单是:每 token 额外缓存一个 64 维的 k_R(上表中的 d_R),且 RoPE 通道不能享受吸收——但它换回了整条压缩-吸收主路径的成立。DeepSeek-V3 完整沿用了这套设计,超参数与 V2 一致(kv_lora_rank 512、qk_rope_head_dim 64、q_lora_rank 1536),只是模型本体更大(隐藏维 7168、61 层)。

graph LR
    H["隐藏态 h_t"] -->|"W_DKV 低秩压缩"| C["c_KV(512 维)"]
    H -->|"W_KR + RoPE"| R["k_R(64 维)"]
    H -->|"W_DQ + W_UQ"| Q["内容查询"]
    Q -.->|"吸收 W_UK"| S["打分:压缩空间点积 + RoPE 小空间点积"]
    C --> S
    R --> S

小结:解耦 RoPE 是理解 MLA 的钥匙——它解释了为什么缓存里除了 c_KV 还有 64 维的位置键,也解释了这个架构为什么必须配专用 Kernel。

五、工程代价:省下的显存,要用 Kernel 与兼容性偿还

MLA 的工程落地成本常被低估,至少有四笔账:

**第一,专用 Kernel 是硬依赖。**吸收后的 MLA 计算形状与标准注意力 kernel(FlashAttention 系)不兼容,必须专门实现。DeepSeek 自己在 2025 年 2 月开源了 FlashMLA(H800 上内存带宽 3000 GB/s、算力 580 TFLOPS,为首发口径),vLLM、SGLang 等推理框架也专门适配。如果部署框架没有 MLA kernel,模型会退化成 MHA 方式运行,缓存开销暴涨 50 倍量级。而且这个依赖会跟着硬件走:FlashMLA 此后持续迭代(2025 年 4 月更新到 660 TFLOPS),2026 年的版本重心已转向 B200 与昇腾等新硬件——换一代硬件,专用 kernel 就要重做一轮。

**第二,前缀缓存与量化的兼容坑。**MLA 模型在 vLLM 上曾有前缀缓存与分块预填充组合触发运行时错误的问题记录;常见的 KV cache 量化路线对 MLA 也未必友好,因为缓存对象是压缩后的潜在向量而非标准 K/V。社区为此发展出朴素/吸收混合 Kernel 等针对性研究(共享前缀场景下朴素版反而占优,2025 年已有专门论文分析这个权衡)。

**第三,「省显存」不等于「更快」。**解码每步的注意力计算量反而增大(等效头维 576 对 128),短上下文、小 batch 场景下收益有限;MLA 的甜区是长上下文、高并发的服务端推理。

**第四,生态分化是隐性成本。**同一份 MLA 权重,在不同推理框架、不同硬件上的实际表现差异比 GQA 模型大得多——GQA 吃的是通用 kernel 红利,MLA 吃的是专用适配红利,红利的覆盖面天然更窄。

小结:MLA 把复杂度从「缓存空间」转移到了「Kernel 工程」——对能吃下专用 Kernel 的大规模服务是净赚,对小规模部署者未必。

六、扩散与演进:从 DeepSeek 独占到 Kimi K2 跟进

2025 年,MLA 从 DeepSeek 的私有设计变成了开源阵营的公共选项。月之暗面的 Kimi K2(1T 总参 / 32B 激活)技术报告明确采用与 DeepSeek-V3 同构的 MLA(头数从 128 减到 64);学术侧出现了 TransMLA 等工作,证明 GQA 模型可以等参转换为 MLA,等于学界承认了潜在压缩的表达力优势。

DeepSeek 自家的演进方向是在 MLA 之上叠加稀疏化:2025 年 9 月发布的 DeepSeek-V3.2 引入 DeepSeek Sparse Attention(DSA),用一个轻量 lightning indexer 对历史 token 打分、每个查询只选 top-k(k=2048)个 token 做注意力——注意 DSA 是在 MLA 的潜在向量上做稀疏选择,不是替代 MLA,两者叠加把长上下文的复杂度从 O(L²) 降到 O(L·k),官方口径 API 价格下调 50% 以上。KV 压缩(MLA)管「每 token 存多少」,稀疏选择(DSA)管「每步读多少」,两层优化正交叠加。

截至 2026-10-09 的格局:DeepSeek 系(V2/V3/R1/V3.2)与 Kimi K2 走 MLA,Llama/Qwen/Mistral 系仍以 GQA 为主,MiniMax 等则直接押注线性注意力。MLA 与 GQA 的路线之争还没有终局——GQA 胜在生态与 Kernel 兼容性,MLA 胜在缓存压缩率的量级优势。

小结:MLA 用「低秩假设 + 矩阵吸收 + 解耦 RoPE」三件套改写了 KV cache 的成本曲线,它的扩散过程说明:架构创新的成败,一半在数学,一半在工程生态。

参考资料

← 返回资讯列表

读者留言

COMMENTS 暂无
仅本站原创文章开放留言 · 请勿留下手机号、邮箱等个人信息

还没有留言,来说第一句?