Lazy loaded image
记录-为什么模型推理时,显存占用分析只需要KV-Catch而没有Q-Catch
字数 1886阅读时长 5 分钟
2025-6-26
2025-9-6
AI智能摘要
GPT
这里是萌新AI,这篇文章介绍了为什么在模型推理时,显存占用分析通常只关注 KV-Cache 而忽略 Q-Cache。作者首先以自注意力机制为例,用拼音和声调的比喻解释了 Q、K、V 的含义,并指出从计算公式看,Q、K、V 的生成方式类似。关键在于推理过程中,Q 是实时根据当前输入计算的,无需缓存;而 K 和 V 需要保留以供后续序列使用,因此显存占用主要来自 KV-Cache。
URL
type
status
date
slug
summary
tags
category
icon
password
😀
今天主要记录学习过程中解决为什么只分析KV-Catch而没有Q-Catch的疑惑!
 

📝 注意力机制

Tips
理解为什么?需要大家首先理解注意力机制Q,K,V的含义以及计算公式!!
Transformer在深度学习模型中如雷贯耳。学习过Transformer的伙伴们,一定知道注意力机制(Attention)。随着大佬们研究,Attention也从自注意力机制——>多头注意力机制(MHA)——>多查询注意力(MQA)——>分组查询注意力机制(GQA)——>多头局部注意力机制(MLA)。
今天,我们不会讲各种注意力机制具体细节,仅仅以自注意力机制的Q,K,V为例。
  • 含义(个人理解,仅仅便于理解:以新华字典为例)
    • Q(3,3):可以理解为不带声调的拼音。eg:xue。
    • K(3,3):可以理解为拼音 xue 的声调。
    • V(3,3):可以理解为拼音 xue 带声调的汉字。eg:学,血,靴,穴。
    • QK:拼音和声调组成权重。eg:xue 一声 w=0.1,xue 二声 w=0.5, xue 三声 w=0.2, xue 四声 w=0.2。
eg:句子:不爱吃香菜的萌新,喜欢骑摩托车,爱好是研究。假设将该句子分割成Token:不爱吃|香菜的|萌新, 喜欢|骑|摩托车, 爱好|是|研究。则与input矩阵对应:不爱吃-1,香菜的-2,萌新-3,喜欢-4,骑-5,摩托车-6,爱好-7,是-8,研究-9。
将”不爱吃香菜的萌新”通过Token字典转换成x=[1, 2, 3](还有embading操作)后,x分别与Q,K,V的weight进行矩阵相乘计算得到相应Q,K,V。
notion image
notion image
从计算公式上来看,Q,K,V是一样的(抛开权重)。
根据上述图标和计算公式,则Q,K,V值分别等于:
上述Q,K,V矩阵元素值中可以发现:
  • (以第一行为例)代表Seq中的token以不同权重组合得到的值。
  • (以第一列为例)代表不同Seq中的token以相同权重组合得到的值。
  • 个人理解:矩阵中的元素值代表了Seq中哪个token比较重要。eg:”不爱吃香菜的萌新”这句话的核心token是“萌新”,则“不爱吃”,“香菜的”token是形容词,用于修饰“萌新”。那么,矩阵每个元素从整体上看已经是完整的Seq,只是“偏向”不同Token的Seq。
接着,计算“权重”:
为了方便,博主将Q,K公式简化,并去掉了放缩操作:
上述矩阵相乘计算中,可以发现Q,K得到的权重值是针对Seq与Seq之间计算得到的。
再接着,计算”最终“值:
为了方便,博主将V公式简化:
上诉矩阵相乘计算中,可以发现μ对不同的Seq进行权重相加。矩阵O的每个元素值都包含所有Seq。
  • 结构图(简单)
notion image
  • 总结:以上便是Transformer中attention注意力机制的主要内容。接下来分析在模型推理中,显存占用为什么只需要计算KV-Catch,而不是Q-Catch。

🤗分析原因

这里博主将上诉两个公式摘抄下来:
首先分析QK^T矩阵:
  • 首先从矩阵行分析(以第一行为例,其他行同理):
    • Q矩阵:使用了Q_1=[q_1,q_2,q_3]行向量信息,也就是说矩阵第一行只使用了第一个Seq的信息(”不爱吃香菜的萌新“)。
    • K^T矩阵:使用了整个矩阵信息。
  • 接着从矩阵列分析(以第一列为例,其他列同理):
    • Q矩阵:使用了整个矩阵信息。
    • K^T矩阵:使用了K_1=[k_1,k_2,k_3].T列向量信息,也就是说矩阵第一列只使用了第一个Seq的信息(”不爱吃香菜的萌新“)。
  • 总结:在计算过程中,矩阵Q在前,矩阵K在后。因此,计算过程中矩阵Q只需要关注行向量(也可以理解为Seq,既后一个Seq不需要前一个Seq的信息。eg:”喜欢骑摩托车”-Q_2不需要关注”不爱吃香菜的萌新”-Q_1的信息),而,计算过程中矩阵K需要关注整个信息
接着,分析QK^TV矩阵:
  • 按照上诉分析原理,可以发现矩阵V也需要关注整个信息。所以,在分析显存占用情况中,只需要分析KV-Catch,不需要分析Q-Catch。
最后,上述分析的是Encode部分。其分析原理,也可以用在Decode中。Decode相较于Encode多了一个下三角的Mask矩阵。Decode的最终输出结果为:
  • 依据上述Decode公式,再结合Encode的分析原理,依然可以发现:在分析显存占用情况中,只需要分析KV-Catch,不需要分析Q-Catch。

📎 参考文章

💡
以上便是为什么只需KV-Catch,而不需Q-Catch的学习记录分享,欢迎您在底部评论区留言,一起交流~
上一篇
记录-NotionNext博客添加Twikoo评论插件
下一篇
Paper-Attention Is All You Need

评论
Loading...