一句话定义:多重查询注意力(Multi-Query Attention,MQA)是一种注意力结构变体——查询(Query,Q)仍然是每个头各自一套,但键(Key,K)和值(Value,V)全模型只保留一套,所有注意力头共用。
它省的到底是什么
标准的多头注意力(AI 词典:Multi-Head Attention">Multi-Head Attention,MHA)里,如果模型有 32 个注意力头,就有 32 组 Q、K、V 投影。生成式模型逐字往外吐 token 时,每生成一个 token 都要回看之前所有 token 的 K 和 V,于是把它们缓存下来反复读取,这就是 KV 缓存(KV cache)。头数越多,缓存越大——32 个头就是 32 份。
打个比方:一场发布会上,32 位记者各自带着不同的问题(Q),但要反复查阅同一本资料手册。MHA 的做法是每人复印一本、各自做标记;MQA 的做法是大家共用同一本。问题依旧各不相同,只是"查的资料"被统一了。
效果是 KV 缓存直接缩到原来的约 1/32(按 32 头算)。解码阶段经常卡在"搬运数据"而不是"算力"上,缓存变小,每步要读的数据变少,生成更快;同样的显存也能塞下更大的批(batch),长上下文场景尤其明显。
和相邻概念的区别
三者只差在 K、V 有几个副本:
不少模型的配置里会写明"键值头数量"(各框架的字段名不同,以所用框架官方文档为准):它等于注意力头数就是 MHA,等于 1 就是 MQA,介于两者之间就是 GQA。
代价与实际意义
K/V 一旦共享,各个头就没法再用各自不同的"视角"去表示上下文,注意力头的多样性被削弱,效果通常不如 MHA,训练也更不容易稳定。GQA 之所以流行,正是因为它在这两端之间取了中间点。
对从业者:做大并发、长上下文推理时,先看 KV 缓存占用;挑模型或配部署参数时,"几个 KV 头"往往比"几个 Q 头"更直接决定显存和吞吐。
对普通人:你感觉同一个模型响应变快了、能同时服务更多人,背后常常就是这类不起眼的结构取舍。
