13种注意力机制,按名字背不如按瓶颈分
KV cache、可见范围、计算开销、serving 吞吐,四类瓶颈各管一段。原文把MHA、MQA、GQA、MLA、FlashAttention、PagedAttention放进同一张图,混着聊就容易乱。
注意力机制的名字经常被堆成一张清单。MHA、MQA、GQA、MLA、FlashAttention、PagedAttention 排在一起,看着像同一层的东西,各自卡在不同的地方。Daily Dose of Data Science 列了13种,按瓶颈分成四类。这个分法比按论文时间背有用。
评论区有人补了一句:KV cache 和 masking 最容易混。这个分类正好把两件事拆开。
1. KV cache 大小是瓶颈
生成时模型会缓存键值状态,避免每一步重复计算。缓存越大,显存越紧。
- MHA:每个查询头配自己的键值头。灵活,缓存最大。
- MQA:所有查询头共用一个键值头。缓存变小。
- GQA:查询头分组,每组共用一个键值头。内存和模型质量之间取平衡。
- MLA:缓存前把键和值压到更小的潜表示,继续省 KV 内存。
2. 模型能看哪些 token 是瓶颈
- Causal attention:每个 token 只能往前看。自回归生成用这个。
- Bidirectional attention:两个方向都能看,适合一次性理解完整输入。
- Sliding Window Attention:每个 token 只看附近上下文,不跨整个序列。
- StreamingLLM:保留少量锚点 token 加最近上下文,让生成在有限内存里继续。
3. attention 计算本身贵
- FlashAttention:把精确 attention 切成小块,放进片上快速内存算,减少昂贵的显存搬运。
- Sparse Attention:跳过部分 token 到 token 的连接,少算一些 attention。
4. 线上 serving 吞吐是瓶颈
- PagedAttention:KV cache 按需分块存,减少 GPU 内存浪费和碎片。
- RadixAttention:组织共享前缀,让多个请求复用 KV 状态,不用重算。
- Prefix Caching:重复前缀如 system prompt 的 KV 块直接复用,减少重复 prefill。
原文强调这些技术互补。一个 LLM 可以同时用 GQA 缩小 KV cache,用 FlashAttention 高效算 attention,用 Sliding Window Attention 限制上下文交互,再用 PagedAttention 管理生产环境里的缓存。按瓶颈分完,13个名字不再像一堆论文标签。
视频和完整拆解来自 Daily Dose of Data Science 的推文,Akshay 写了更长的文章:原文推文,Akshay 的文章,引用推文。
发布时间: 2026-10-31 00:45