Wink Pings

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