先这样答
Multi-Head Attention 的主要问题有两个。第一,KV Cache 会随头数线性增长,推理时需要更多显存,也需要搬运更多数据。第二,不同注意力头之间存在冗余,很多头不一定需要各自保存一套 K 和 V。
先看显存账。自回归推理时,历史 token 的 K 和 V 会进入 KV Cache。MHA 为每个头分别保存 K 和 V,所以头数增加,缓存规模也随之增加。缓存越大,推理占用的显存越多,读取缓存时需要的带宽也越高。面试中要把这笔账说清楚,不能只说计算量变大。
改进方案主要有三种。MQA 让所有头共享一组 K 和 V,可以直接减少 KV Cache,但会牺牲精度。GQA 把头分成若干组,同组共享 K 和 V,在缓存规模和效果之间折中,是主流方案。MLA 则把 K 和 V 压缩到潜在空间中,再利用压缩表示服务注意力计算,这是 DeepSeek 的路线。它不只是简单地让多个头共享同一组 KV,而是从表示压缩角度减少缓存开销。
面试官会怎么追问
-
「为什么 KV Cache 会随头数线性增长?」 每个头都需要保存自己的 K 和 V。历史 token 越多,需要保存的缓存越多。头数增加后,缓存中的对应内容也会增加,所以显存占用和缓存读取带宽都会随之增长。
-
「MQA 既然能减少缓存,为什么不全部使用 MQA?」 MQA 让所有头共享一组 K 和 V。它能减少 KV Cache,但会牺牲精度。不同头失去各自的 K 和 V 后,表达能力会受到影响,所以工程上需要在缓存开销和效果之间取舍。
-
「GQA 和 MQA 的区别是什么?」 MQA 让所有头共享一组 K 和 V。GQA 则把头分成多组,每组内部共享一组 K 和 V。GQA 的共享程度低于 MQA,因此通常能在缓存规模和精度之间取得折中。
回答的坑
-
只说 MHA 计算量大,却没有说明 KV Cache 随头数线性增长,以及它带来的显存和带宽开销。
-
把 GQA 说成完全共享 KV,或者把 MLA 说成简单的分组共享,都会混淆三种方案的核心区别。
同系列的题
这家公司的面经实录
相关深度笔记