为什么LLM推理加速有KV Cache而没有Q Cache?

        简单来说,LLM在decoding阶段的每次推理只会用到当前的Q,这次用的Q下次不会用到,所以不用Cache Q;

        但是每次都要用到当前和过去所有的KV,这次用到的KV下次马上就要再用一次,所以Cache KV可以加速推理。

下面说明原因:

        观察Attention公式,这个K和Q怎么看都很对称,为什么只Cache K而不Cache Q?

把KQV写成分块的形式,像这样:

然后Q和K转置的矩阵乘就变成了这样:

        直到这一步,K和Q看上去都很对称。轮换一下K和Q对结果没有本质影响。

        V的引入破坏了这一对称性。忽略 𝑑𝑘 系数,第i行的softmax简写成 𝑆𝑖 ,attention操作的结果变成了这样:

这是没有Causal Mask(因果掩码)的情况。加入Causal Mask会变成这样:

可以写一下结果的通项,没有Causal Mask:

有Causal Mask:

        无论有没有Causal Mask,Q和K在结果中都是不对称的。

        在序列的t位置,Q只有当前位置的 𝑞𝑡q_t 参与了计算,而K和V多个位置参与了计算,所以需要KV Cache,而不需要Q Cache。

        在没有Causal Mask时,计算t位置的Attention需要未来的KV,这在实际进行自回归推理时无法得到;加上Causal Mask之后,只需要1,2,…,t位置的KV就可以进行推理。

### KV-Cache 技术在大型语言模型中的实现与优化 #### 背景介绍 缓存技术是现代计算架构中可或缺的一部分,尤其是在高性能处理器设计中。例如,在Nehalem核心结构中,L1缓存被分为指令缓存和数据缓存两部分[^1]。这种分离的设计可以有效减少访问冲突并提高性能。然而,对于大规模语言模型(LLMs),KV-Cache 的作用更为复杂且重要。 #### 大型语言模型中的 KV-Cache 原理 在 LLMs 中,KV-Cache 是一种用于加速推理过程的技术。具体来说,它通过存储先前生成 token 对应的键值对来避免重复计算注意力机制的结果。这一方法显著降低了计算开销,特别是在处理长序列时效果尤为明显。 - **Key 和 Value 的定义**: 在 Transformer 架构下,输入经过多头自注意层后会生成 Keys 和 Values。这些中间结果会被保存到 KV 缓冲区以便后续使用。 - **工作流程**: - 当前时刻 t 的新输入仅需与其自身的 Key 进行比较以及利用之前所有时间步共享的 Value 向量即可完成上下文理解。 - 此外,在解码阶段每新增一个词元,则更新一次对应的 K/V pair 并追加至已有列表末端形成滑动窗口形式管理历史记录。 ```python class KeyValueCache: def __init__(self, max_length): self.keys = [] self.values = [] self.max_length = max_length def append(self, key, value): if len(self.keys) >= self.max_length: self.keys.pop(0) self.values.pop(0) self.keys.append(key) self.values.append(value) def get_cache(self): return torch.stack(self.keys), torch.stack(self.values) ``` 上述代码片段展示了一个简单的 KV 缓存类实现方式[^4]。其中 `append` 方法负责向队列末尾增加新的键值对;而当达到预设最大长度限制时则移除最早加入的那一组数据项以维持固定大小范围内的高效检索操作特性。 #### 实现细节与优化策略 为了进一步提升效率还可以采取如下措施: - **分片存储**: 将整个缓存划分为多个较小的部分分别驻留在同物理位置上从而降低单点负载压力同时增强并发能力。 - **压缩算法应用**: 针对某些特定场景可考虑采用无损压缩手段缩减实际占用空间进而间接改善整体表现水平。 关于大数据框架资源汇总方面也有专门整理好的清单可供参考学习[^2]。另外如果涉及到超大 XML 文件解析任务也可以借鉴相关经验技巧来进行流式加载处理[^3]。 #### 总结 综上所述,通过对 Large Language Models 应用合适的 KV-Caching 方案仅能够带来明显的速度增益而且有助于控制内存消耗成本使之更加适合部署于生产环境中长期稳定运行下去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值