玩转大语言模型:深入理解 KV-Cache - 大模型推理的核心加速技术
随着大语言模型(LLM)规模不断增长,推理成本也随之飙升。为了让模型在响应用户请求时更快、更经济地运行,各类优化技术不断涌现。其中,**KV-Cache(Key-Value Cache)**是目前最关键、影响最深远的推理加速机制之一,被所有主流的推理框架(如 vLLM、TensorRT-LLM、LLama.cpp、llm-d、OpenAI Triton Transformer Engine 等)广泛使用。 这篇文章将全面介绍什么是 KV-Cache、它如何工作、为什么它能极大提升推理效率、它对行业带来了什么影响,以及在实际使用中的最佳实践。 KV-Cache 是什么? 首先,其工作原理架构图如下: 理解起来非常简单,单其中细节结合复杂度计算还是略有抽象。 KV-Cache,全称 Key-Value Cache,是在 LLM 推理过程中对 Transformer 解码器中**自注意力层(Self-Attention)**的中间结果进行缓存的一种方法。 Transformer 的自回归生成方式决定了: 每生成一个新 token,就需要重新计算它与全部历史 token 的注意力关系。 如果每次都把过去所有 token 的 Key 和 Value 重新计算一遍,其计算量是: 推理时间复杂度:O(n²) (n 为上下文长度) 为了避免重复计算,KV-Cache 会在每步生成 token 时,将计算后的 Key(K) 和 Value(V) 保存下来,这样之后再生成下一步 token 时就能直接引用过去的 Key/Value,而无需重新计算历史部分。 这让时间复杂度大幅下降为: 推理时间复杂度:O(n) 所以简单总结一下,KV-Cache 是在自回归解码中缓存历史 token 的 Key/Value,让后续生成直接复用过去的注意力结果,从而把时间复杂度从 O(n²) 降到 O(n),节省的成本非常巨大。 KV-Cache 是如何工作的? 以当前主流的解码流程为例,我们以是否使用 KV-Cache 来做一个简单的对比。 如果没有 KV-Cache 每次生成新 token 时需要做: 重新对全部历史序列做 embedding 通过所有 Transformer 层重新计算 K/V 根据新 token 与整个序列做自注意力 得到新 token 并输出 具体流程图示如下:...