KVBoost: 基于偏差引导重计算的块级键值缓存重用,用于高效大语言模型推理

arXiv cs.AI 论文

摘要

KVBoost 是一个块级键值缓存重用系统,用于高效大语言模型推理。它通过双哈希键控和偏差引导的重计算,实现高缓存命中率和首 token 时间的显著加速,且不损失质量。

arXiv:2608.21362v1 公告类型:新 摘要:基于 Transformer 的大语言模型(LLMs)由于每个请求都必须重新计算键值(KV)张量,因此预填充延迟较高。现有的前缀缓存系统降低了这一成本,但要求提示词共享一个领先的连续前缀,当共享内容出现在任意位置时效果有限。我们提出了 KVBoost,一个用于 HuggingFace 兼容解码器模型的块级 KV 缓存重用系统,无论内容位置如何,都能实现重用。KVBoost 引入了双哈希键控方案,将位置身份(前缀哈希)与内容身份(内容哈希)分离,支持精确和近似缓存匹配。为了处理独立缓存块引起的注意力边界错误,KVBoost 采用了两种修复策略:SelectiveRecompute,重新编码边界区域;以及 CacheBlendRecompute,在探测通过后识别并重计算高偏差 token。系统进一步结合了非对称 KV 量化(int8/int4)、自适应块边界分割,以及在固定内存预算下的重要性加权淘汰。在 Qwen/Qwen2.5-3B 上使用超过 1,000 个错误定位样本进行评估,KVBoost 实现了首 token 时间减少 4.49 倍(142.4 ms vs. 639.1 ms),比前缀缓存高出 16%,且准确率没有损失(99.2% vs. 99.1%)。KVBoost 提供了一个实用的、内存受限的推理加速层,兼容基于 RoPE 的模型,无需架构修改。
查看原文
查看缓存全文

缓存时间: 2026/08/25 04:10

# 1 引言
来源:https://arxiv.org/html/2608.21362
KVBoost:基于偏差引导重计算的块级键值缓存复用,实现高效大语言模型推理

Srihari Unnikrishnan 独立研究 srihari\.unnikrishnan@gmail\.com

###### 摘要

基于Transformer的大语言模型在处理长序列或频繁共享的提示前缀时,会产生显著的预填充延迟,因为每次请求都必须完整重计算键值张量。现有前缀缓存系统减轻了此开销,但要求提示必须共享一个*前导*连续前缀,这在共享文本可能出现在任意位置的实际部署场景中限制了缓存命中率。我们提出KVBoost,一个面向HuggingFace兼容解码器模型的块级KV缓存复用系统,能够实现高缓存命中率,无论共享内容在提示中出现的位置如何。KVBoost引入了双哈希键控方案,将*位置身份*(前缀哈希)与*内容身份*(内容哈希)分离,支持精确和近似缓存匹配。为纠正独立缓存块拼接时产生的注意力边界误差,KVBoost实现了两种重计算策略:*选择性重计算*,在每个块接缝处重新编码固定窗口的词元;以及*缓存混合重计算*,在初始前向传播后测量每词元的余弦偏差,并仅重计算偏差最大的词元(约占提示的15%)。该系统还增强了非对称KIVI式KV量化(int8/int4)、可选的磁盘层溢出缓存、自适应块边界分割、重叠和注意力汇聚词元注入,以及重要性加权LRU淘汰策略。在基于Qwen/Qwen2\.5\-3B模型、使用来自缺陷定位基准的1,000个样本进行评估时,KVBoost实现了相对于完整重计算4\.49倍的首词元时间平均加速(142\.4毫秒 vs. 639\.1毫秒),且比vLLM前缀缓存快16%(165\.5毫秒),同时输出质量无退化(99\.2% vs. 99\.1% 精确匹配准确率)。综上所述,KVBoost提供了一个生产就绪、内存受限的推理加速层,可与任何基于RoPE的HuggingFace模型集成,无需模型修改。

关键词:键值缓存,LLM推理,前缀缓存,块级复用,接缝修复,偏差引导重计算,KV量化,RoPE

Transformer注意力机制\[11 (https://arxiv.org/html/2608.21362#bib.bib11)\]要求为上下文中的每个词元实例化键值张量。在*预填充*阶段(即模型在开始自回归解码前处理完整提示的阶段),该计算复杂度随序列长度平方增长,是长提示的主要延迟来源。在生产环境中,许多请求共享大量文本:系统提示、检索到的文档块、少样本示例或对话历史。每次请求都为此共享文本重计算KV张量是浪费的。

*前缀缓存*(如vLLM\[3 (https://arxiv.org/html/2608.21362#bib.bib3)\]和SGLang\[15 (https://arxiv.org/html/2608.21362#bib.bib15)\]中的实现)消除了共享*公共前导前缀*提示的这种冗余。这是一个重要的实际限制。真实世界的提示经常包含与每个请求内容交错的共享内容——例如检索到的文档后跟唯一查询,或者系统提示并非总是从第一个词元开始。当从前导位置开始的词元级别前缀不共享时,前缀缓存无法提供任何收益。

KVBoost通过在*块*级别而非词元级别操作来解决此限制。提示被分割为固定大小的词元块(默认128个词元),每个块由双哈希键标识,匹配的块对应的缓存KV张量会被复用,无论它们在提示中的位置如何。这种方法使得当共享内容出现在输入中的任意位置时(而不仅限于前导位置),都能实现缓存命中。

块级复用的核心技术挑战是*接缝误差*:当两个独立缓存的块被连接时,在缓存时,块边界的词元仅关注其块内上下文,因此缺少跨块的注意力贡献。KVBoost实现了两种策略来修复接缝误差,而无需完整重计算:一种是空间*选择性重计算*策略,重新编码固定宽度的边界窗口;另一种是偏差引导的*缓存混合重计算*策略(受CacheBlend\[9 (https://arxiv.org/html/2608.21362#bib.bib9)\]启发),仅识别并修复KV张量变化最显著的词元。

第二个挑战源于旋转位置编码\[10 (https://arxiv.org/html/2608.21362#bib.bib10)\]。缓存在位置0–128的块的KV张量包含了绑定到这些绝对位置的RoPE旋转的键和值。将这些张量复用于位置1000–1128将产生错误的注意力得分。KVBoost的双哈希方案通过区分前缀哈希(编码位置相关的上下文链)和内容哈希(与位置无关),并在实时前向传播中注入修正后的位置ID来解决此问题。

本文做出以下贡献:

1. 1\.双哈希块键控,将位置身份与内容身份分离,实现精确复用(通过前缀哈希)和需强制修复的近似复用(通过内容哈希)。
2. 2\.两种接缝修复策略:固定窗口选择性重计算和偏差引导缓存混合重计算。
3. 3\.在硬性内存预算下的重要性加权LRU淘汰,使用每块KV张量的l2\ell\_{2}范数作为重要性代理。
4. 4\.非对称KIVI式量化,采用逐通道键量化和逐词元值量化。
5. 5\.自适应块边界分割,将块边界调整至自然语言接缝处。
6. 6\.重叠和注意力汇聚词元注入,以提高缓存填充时边界词元的保真度。
7. 7\.两层存储架构,结合内存热存储和可选的内存映射磁盘溢出。
8. 8\.

## 2 相关工作

### 2\.1LLM服务中的KV缓存管理

vLLM\[3 (https://arxiv.org/html/2608.21362#bib.bib3)\]引入了PagedAttention,将KV缓存视为分页虚拟内存系统,以消除碎片化并实现高效的内存批处理。vLLM中的前缀缓存将此扩展到复用共享前导前缀的KV页。这两个系统都在*页*级别操作,并要求提示共享一个连续前缀。KVBoost在*块*级别操作,并取消了连续性约束。

SGLang\[15 (https://arxiv.org/html/2608.21362#bib.bib15)\]实现了RadixAttention,它维护一个缓存KV块的基数树并执行最长前缀匹配。虽然比扁平前缀缓存更灵活,RadixAttention仍然需要前缀级共享。KVBoost的内容哈希层为出现在不同请求中不同位置的块提供了复用能力。

### 2\.2CacheBlend

CacheBlend\[9 (https://arxiv.org/html/2608.21362#bib.bib9)\]是与KVBoost重计算策略最接近的先前工作。CacheBlend指出,在从预缓存块组装提示后,某些词元的KV张量与完整上下文前向传播产生的张量存在显著偏差。它提出通过使用组装好的KV缓存进行前向传播来测量此偏差,并仅重计算高偏差词元。KVBoost的CacheBlendRecompute策略直接实现了此洞察,并将其与更广泛的双哈希缓存架构集成。

### 2\.3KV缓存量化

KIVI\[6 (https://arxiv.org/html/2608.21362#bib.bib6)\]证明,通过利用键和值张量中不同的异常值分布(键显示出随通道维度变化的异常值,而值显示出随词元位置变化的异常值),KV缓存可以量化到2位精度且质量损失极小。KVBoost将KIVI非对称量化方案实现为int8和int4精度的可选内存缩减层,应用于缓存的块张量。

### 2\.4提示压缩与长上下文推理

互补的方法在缓存前减少输入长度。LLMLingua\[2 (https://arxiv.org/html/2608.21362#bib.bib2)\]通过选择性丢弃低困惑度词元来压缩提示。SnapKV\[5 (https://arxiv.org/html/2608.21362#bib.bib5)\]和PyramidKV\[14 (https://arxiv.org/html/2608.21362#bib.bib14)\]在生成过程中通过修剪注意力头或层来减少KV缓存大小。KVBoost与这些方法正交:它操作的是*检索*缓存的KV张量,而非压缩输入。

RAG系统\[4 (https://arxiv.org/html/2608.21362#bib.bib4)\]检索相关文档,然后将其前置到提示中,这为块级KV复用创造了天然的工作负载。KVBoost的warm\(\) API旨在用这些共享文档预填充缓存,以便后续查询可以直接检索其KV张量。

## 3 背景

### 3\.1Transformer KV缓存

一个具有L层、H个注意力头和头维度d的仅解码器Transformer\[1 (https://arxiv.org/html/2608.21362#bib.bib1)\],为位置t的每个输入词元计算:

kt\(l,h\)=WK\(l,h\)xt,vt\(l,h\)=WV\(l,h\)xtk\_\{t\}^\{\(l,h\)\}=W\_\{K\}^\{\(l,h\)\}x\_\{t\},\\quad v\_\{t\}^\{\(l,h\)\}=W\_\{V\}^\{\(l,h\)\}x\_\{t\}\(1\)位置t的查询的注意力基于所有位置≤t\\leq t计算:

Attn\(qt,K≤t,V≤t\)=softmax\(qtK≤t⊤d\)V≤t\\text\{Attn\}\(q\_\{t\},K\_\{\\leq t\},V\_\{\\leq t\}\)=\\text\{softmax\}\\\!\\left\(\\frac\{q\_\{t\}K\_\{\\leq t\}^\{\\top\}\}\{\\sqrt\{d\}\}\\right\)V\_\{\\leq t\}\(2\)*KV缓存*存储\{ki\(l,h\),vi\(l,h\)\}\\\{k\_\{i\}^\{\(l,h\)\},v\_\{i\}^\{\(l,h\)\}\\\}对于所有i≤ti\\leq t,这样解码步骤t\+1t\{\+\}1就无需为位置0,...,t0,\\ldots,t重新计算键和值。在*预填充*期间,所有T个提示词元并行处理,产生形状为\[L,2,T,H,d\]\[L,2,T,H,d\]的KV张量。对于长提示,这是主要的推理成本。

### 3\.2旋转位置编码

RoPE\[10 (https://arxiv.org/html/2608.21362#bib.bib10)\]通过旋转查询和键向量来编码位置:

qt′=Rθtqt,kt′=Rθtktq\_\{t\}^\{\\prime\}=R\_\{\\theta\}^\{t\}\\,q\_\{t\},\\quad k\_\{t\}^\{\\prime\}=R\_\{\\theta\}^\{t\}\\,k\_\{t\}\(3\)其中RθtR\_\{\\theta\}^\{t\}是由位置t和基础频率θ\\theta参数化的旋转矩阵。内积qs′⋅kt′=qs⊤Rθt−sktq\_\{s\}^\{\\prime\}\\cdot k\_\{t\}^\{\\prime\}=q\_\{s\}^\{\\top\}R\_\{\\theta\}^\{t\-s\}k\_\{t\}仅取决于*相对*偏移t−st\-s,这使得RoPE与任意上下文长度兼容。关键是,KV缓存中存储的键向量嵌入了旋转RθtR\_\{\\theta\}^\{t\}。在位置t=50t=50缓存的键无法直接复用于位置t=1050t=1050,除非应用旋转校正Rθ1000R\_\{\\theta\}^\{1000\}。这是KVBoost双哈希方案必须处理的*RoPE位置冲突问题*。

### 3\.3块级复用中的接缝误差

假设提示P被分割成块C1,C2,C3C\_\{1\},C\_\{2\},C\_\{3\}。块C2C\_\{2\}在处理不同提示P′P^\{\\prime\}时曾被缓存,在该提示中C2C\_\{2\}跟在一个不同的C1′C\_\{1\}^\{\\prime\}之后。当KVBoost在P中复用缓存的C2C\_\{2\}的KV张量时,C2C\_\{2\}中的词元具有反映在\[C1′,C2\]\[C\_\{1\}^\{\\prime\},C\_\{2\}\]上注意力的KV张量,而不是\[C1,C2\]\[C\_\{1\},C\_\{2\}\]。对于靠近C2C\_\{2\}开头的词元(在因果模型中,这些词元会关注C1′C\_\{1\}^\{\\prime\}),差异最大,而对于C2C\_\{2\}末尾的词元,由于注意力分数随距离衰减,差异逐渐减小。接缝误差是块级复用的主要质量风险,并促使了第4节中描述的修复机制。

## 4 KVBoost系统设计

KVBoost组织为一个七阶段流水线:(1)分块,(2)缓存查找,(3)提示组装,(4)接缝修复,(5)前向传播,(6)缓存填充,(7)解码。图1 (https://arxiv.org/html/2608.21362#S4.F1)展示了完整系统。

提示块注册表缓存管理器提示组装器KV量化磁盘层接缝修复推理引擎生成结果图1:KVBoost系统架构。虚线箭头表示磁盘层缓存升级回热存储。### 4\.1词元化与分块

ChunkRegistry将词元化后的提示分割成固定大小的C个词元的块(默认C=128C=128)。支持三种策略:

- •FIXED:在精确的词元偏移\{0,C,2C,...\}\\\{0,C,2C,\\ldots\\\}处分割。可预测且为默认策略。
- •SEMANTIC:优先在段落或句子边界处分割。减少接缝处的语言距离。
- •DOCUMENT:将整个输入视为单个块。用于通过warm\(\)缓存完整的参考文档。

自适应边界分割由chunk\_boundary\_window参数ww控制。当w>0w>0时,每个名义分割点pp会调整为\[p−w,p+w\]\[p\-w,p+w\]范围内最近的标点符号词元。这种调整产生了语言上更连贯的块,同时不改变用于哈希的名义边界。

重叠词元(kkoverlap,默认为0):在缓存填充期间,块CiC\_\{i\}的最后k个词元会被前置到块Ci+1C\_\{i+1}中,以便边界词元能关注到真实的前驱上下文。注意力汇聚词元(sssinks,默认为0):提示的前s个词元总是包含在实时词元集中,因为许多注意力头会对最开始的词元分配不成比例的权重\[13 (https://arxiv.org/html/2608.21362#bib.bib13)\]。

### 4\.2双哈希键控

KVBoost为每个块分配两个哈希标识符:

前缀哈希(位置+上下文):

hprefix\(Ci\)=SHA256\(hprefix\(Ci−1\)∥bytes\(Ci\.token\_ids\)\)h\_\{\\text\{prefix\}\}\(C\_\{i\}\)=\\text\{SHA256\}\\\!\\bigl\(h\_\{\\text\{prefix\}\}\(C\_\{i\-1\}\)\\;\\\|\\;\\text\{bytes\}\(C\_\{i\}\.\\text\{token\\\_ids\}\)\\bigr\)\(4\)其中hprefix\(C0\)=SHA256\(bytes\(C0\.token\_ids\)\)h\_\{\\text\{prefix\}\}\(C\_\{0\}\)=\\text\{SHA256\}\(\\text\{bytes\}\(C\_\{0\}\.\\text\{token\\\_ids\}\)\)。具有相同前缀哈希的两个块保证具有相同的词元内容*以及*相同的前驱上下文,这使得它们的RoPE旋转键张量对于精确复用是有效的。

内容哈希(位置无关):

hcontent\(Ci\)=SHA256\(bytes\(Ci\.token\_ids\)\)h\_\{\\text\{content\}\}\(C\_\{i\}\)=\\text\{SHA256\}\(\\text\{bytes\}\(C\_\{i\}\.\\text\{token\\\_ids\}\)\)\(5\)内容哈希识别具有相同词元序列的块,无论其位置或前驱上下文如何。通过内容哈希匹配的KV张量复用是一个*近似*操作:缓存的键携带了原始缓存位置的RoPE旋转。此类匹配会被标记为需要强制执行缓存混合重计算。

#### 4\.2\.1 查找级联

对于查询提示中的每个块,缓存管理器执行:

1. 1\.在精确匹配存储中查找hprefix\(Ci\)h\_\{\\text\{prefix\}\}\(C\_\{i\}\)→\\toEXACT。
2. 2\.在近似存储中查找hcontent\(Ci\)h\_\{\\text\{content\}\}\(C\_\{i\}\)→\\toAPPROXIMATE(强制缓存混合重计算)。
3. 3\.否则:MISS;将词元添加到实时集。

### 4\.3提示组装

PromptAssembler将查找结果合并为一个AssembledPrompt结构,包含合并的KV张量、实时(未缓存)的词元ID列表及其绝对position\_ids、用于接缝修复的块边界位置、缓存命中率,以及是否存在近似匹配的标志。

支持两种组装模式。PREFIX\_ONLY仅接受领先的连续缓存块(语义上等同于前缀缓存)。CHUNK\_REUSE(默认)接受任何匹配的块。

相似文章

为扩散语言模型启用共享前缀的KV缓存

arXiv cs.LG

本文提出BiCache,一种面向扩散语言模型共享前缀的新型KV缓存技术,通过动态重用浅层中缓存的键和值来避免精度崩溃,并实现36.3%–98.3%的吞吐量提升。

KV缓存压缩比TurboQuant与逐向量香农极限高出900000倍

Hacker News Top

一篇新论文提出了一种基于概率语言Trie树和预测差分编码的顺序KV缓存压缩方法。该方法通过利用语言模型Token的序列结构而非对向量进行独立处理,实现了超越TurboQuant约91.4万倍的理论压缩比。