动态

MEPPP 热点收录 @meppp_hot
收录
AI 翻译
KV缓存为什么存储K和V向量而不是Q?(一个流行的技术LLM面试问题)LLMs是自回归的,因此每个令牌都是从它之前的每个令牌中预测出来的,逐个预测。这种自回归特性在模型内部直接产生影响。经过 <n> 个 token 的前向传递产生 <n> 个隐藏状态,但仅将最后一个状态投影到 logits 并且是必需的。为了理解为什么KV缓存只存储K和V向量,我们必须回溯,看看它是如何工作的。1) 预填:所有10个令牌在一次前向传播中通过模型,平行(使用因果掩码),因为整个提示是已经众所周知。在每一层中,每个位置都会产生一个查询、一个键和一个值向量,以及注意力。每个位置都与所有高于它的位置进行比较。

这个操作是计算密集型的,这也是为什么第一个令牌需要花费。明显比后面的短。TTFT基本上是预填充的。为了生成第11个令牌,只需要第10个令牌的隐藏状态即可。因此,这是从隐藏维度投影到词汇维度,然后生成词汇的 logits。然后这些对数的值通过softmax和采样生成第11个token。

3) 回溯隐藏状态:最后一个隐藏状态是前向块输出的最后一行。前向块是位置感知的(它对每一行独立应用),因此行来自最后一个行。4) 注意力矩阵:对于一个包含10个令牌的提示(QKᵀ),将生成一个10×10的矩阵。

第i行(Row i)将包含查询(Query i)与每个密钥(Key)的点积。因此,第10行是Q₁₀·K₁,Q₁₀·K₂,一直到Q₁₀·K₁₀。可以看出,只有Q₁₀出现在其中。Q₁到Q₉仅属于它们对应的第1-9行,并且我们已经因为这些行的隐藏状态而丢弃了它们。他们从来不需要。

最后一行的注意通过softmax并乘以全栈值向量。V₁到V₁₀,以生成注意力输出的最后一行。因此,最后一个隐藏状态取决于三个因素:Q₁₀、每个键和每个值。第11个令牌被添加了,这次我们需要使用第11行的隐藏状态来生成第12个令牌。数学上,注意力操作最终表现为Q₁₁对K₁的乘积,然后乘以V₁对V₁₁。K₁至K₁₁以及V₁至V₁₁是补全+第一个令牌产生的完全相同的内容,由于因果掩码。这个令牌的键和值取决于这个令牌及其之前的令牌,而不是任何之后的令牌,因此不能将令牌11附加到它。6) 缓存状态:

总体来说,这表明你只需要保留键。在每个解码步骤中计算每个位置的新 Q、K 和 V。每个解码步骤都需要一个查询向量,这个向量从不被再次使用,因此它们不会在解码过程中被缓存。下面的视觉说明了整个过程。

然而,KV缓存只是四个独立缓存中的一个。在 LLM 栈中,还有三个部分。

另外三个是服务器上的前缀缓存、由提供商收费的提示缓存,以及一个完全分解了所有四个缓存的全篇详解,包括LLM服务中的四个缓存。作为一名AI工程师,每个部分都有代码。
查看原文
原帖正文 Why KV cache stores K and V vectors but never Q? (a popular technical LLM interview question) LLMs are autoregressive so each token is predicted from every token before it, one at a time. This autoregressive nature has a direct consequence inside the model. A forward pass… https://t.co/9QeBohqAwj pic.twitter.com/io7XW3n1Rq
引用自 X 原作者:Avi Chawla 原帖地址:https://x.com/_avichawla/status/2093962020962083139 原帖: 本站媒体副本
LLM中的KV、前缀、提示和语义缓存,已清楚说明
查看引用原文
https://t.co/sLoULsUfEt
引用自 X 原作者:Avi Chawla https://x.com/_avichawla/status/2093265776266637739

0 条评论

还没有评论。第一条认真回应会很重要。