一句话定义:多头潜在注意力(Multi-head Latent Attention,MLA)是一种注意力机制,它不把每个头的键(Key)和值(Value)原样存进 KV 缓存,而是先压成一个低维的"潜在向量"存起来,等要用的时候再还原回去,从而在省显存的同时尽量保留AI 词典:多头注意力">多头注意力的表达能力。
先说说 KV 缓存为什么费显存。大模型生成文字是一个字一个字往外蹦的,每蹦一个字,都要回头"看"前面所有字。为了避免每步都重算,推理框架会把每个历史字对应的 K、V 存下来,这就是 KV 缓存。它的大小大致等于:2 × 层数 × 头数 × 每个头的维度 × 序列长度 × 数值精度。序列越长、头越多,这块缓存就越像一间越堆越满的仓库,最后把显存吃光。
打个比方:MHA(Multi-Head Attention)像是给每一位读者都复印一整本说明书,每个头一份,内容各不相同,记得最全,但复印费最贵。MQA(Multi-Query Attention)干脆只印一本,所有人传着看,最省,但每个人都只能看到同一份内容。GQA(Grouped-Query Attention)折中——几个人合看一本。
MLA 的路子不太一样:它把说明书先扫成一个压缩包,只存压缩包,谁要看的时候现场解压出自己要的那部分。这个"压缩包"就是低维潜在向量,解压的过程由一组上投影矩阵完成。因为解压出来的 K、V 仍然是按头分开的,各头之间的差异被保留了下来,表达能力不像 MQA 那样被摊平。
| 方案 | 缓存里存什么 | 显存占用 | 头之间的差异 |
|---|---|---|---|
| MHA | 每个头各自的完整 K/V | 最高 | 各头完全独立 |
| MQA | 所有头共用一份 K/V | 最低 | 基本被抹平 |
| GQA | 每组头共用一份 K/V | 较低 | 组内相同、组间不同 |
| MLA | 一个低维潜在向量,用时还原 | 较低 | 各头仍有独立投影 |
对做工程的人,MLA 的实际意义很直接:同样一张显卡,能塞下更长的上下文或更大的并发批次;在长文档问答、代码库级理解、多轮长对话这类"上下文很长"的场景里,它把省下来的显存换成了可用长度和吞吐。代价是实现上多了一层投影算子,推理框架需要专门支持,否则拿不到收益;它和旋转位置编码等已有组件的配合方式,也常是工程落地时的细活。
对普通人来说,它的体感是:模型能记住更长的对话,你贴一篇长文进去,它不容易"忘了开头";同时响应速度不会因为上下文变长而明显变慢。至于哪些模型、哪些推理框架已经支持,以各家官方页面为准。
