在开始之前,给大家出几个“高频面试题”,看看你能答上来吗?
1. 举例说明 KV Cache 的计算过程
2.为什么要用 KV Cache?它能解决什么问题,代价又是什么?
3. vLLM 里 KV Cache 形影不离的搭档是谁?
还记得之前那篇
大语言模型推理,用动画一看就懂!
的文章吗?是的!我们再次用动画来演示大语言模型的推理过程!几乎所有的大语言模型(LLM)都基于 Transformer 架构,它依赖于之前生成的 token 来预测下一个字符。而自注意力机制(self-attention)则是模型推理的核心:它不仅需要当前 token,还要每次“回顾”之前的所有 token。
动画演示 KV Cache
为了更加形象理解上面提到的自注意力机制的“回顾机制”,下面我画了一张图。它是
大语言模型推理,用动画一看就懂!
中那个文本生成步骤的第四步,其中计算 self-attention 时所需的 Key 和 Value 的示意图。
注意:Prompt 是 "The future of AI is" 有五个 token,第一步推理时模型输入的是整个 prompt,会计算出每个 prompt token 对应的 key 值和 value 值,为了清晰起见图里仅用 K1 和 V1 来代表它们。
接下来的动画演示了每一步计算自注意力的过程,清晰起见去掉了其他算子。
从图里看到每一步计算时,当前的 Qi 都需要和之前的 Kj 进行矩阵乘法计算,然后再和之前的 Vj 进行矩阵乘法。那么为了节省算力,我们可以把之前的 Kj、Vj 的结果“缓存”起来,这样每次只需要做增量计算。这个缓存机制就是 KV Cache ,简单却非常有效!来看看加上 KV Cache,推理过程变得多轻松吧!
从上面的动画可以看到除了第一步,其他步骤都可以通过缓存复用之前步骤产生的 Ki 和 Vi。这些步骤在计算 self attention 时只有一个 query,因此叫做 single query attention。
KV Cache 有多大?
一条文本所需的 KV Cache 计算公式如下:
KV Cache Bytes = 2 * 2 * Sequence Length *
Number of Layers * Hidden Size
举个实际的例子,Qwen2 7B 这个国产大模型,在 4 K 序列长度下,KV Cache 大小是 1.6 GB!这是什么概念呢?要知道很多人的显卡也就 8GB 或者 16GB。
KV Cache 的代价