KV Cache Transform Coding for Compact Storage in LLM Inference
KV Cache Transform Coding for Compact Storage in LLM Inference
发表时间: 2026-04 · arXiv:2511.01815 (ICLR 2026)
原文: https://arxiv.org/abs/2511.01815
Konrad Staniszewski, Adrian Łancucki (NVIDIA, 华沙大学)
速读
一句话结论 本文提出了一种名为 kvtc 的免微调大语言模型 KV Cache 压缩算法,通过全局主成分分析、动态位宽量化与熵编码的组合,在几乎不损失模型推理精度的前提下实现了 20 倍至 40 倍的缓存压缩率,大幅降低了多轮对话与长上下文场景下的存储和跨节点传输开销。
要解决什么问题 在大语言模型的多轮对话和长上下文推理中,随着序列变长,KV Cache 的体积会迅速膨胀至数 GB。为了保证后续对话的首 token 延迟,系统通常需要保留这些历史缓存。然而,将闲置缓存驻留在 GPU 显存中会严重挤压并发用户的可用空间;若将其卸载至 CPU 内存、磁盘,或在分离式部署架构下跨节点传输,又会遭遇严重的 PCIe 或网络带宽瓶颈;若直接丢弃,则在用户发起新对话时必须承受复杂度为 $\mathcal{O}(n^2)$ 的注意力机制重计算延迟。现有的缓解方案存在明显缺陷:基于 token 驱逐的方法(如 TOVA、H2O)和传统的低比特量化方法(如 KIVI、GEAR)在追求高压缩率时会导致模型精度严重崩塌,而基于奇异值分解的低秩压缩方法(如 xKV)通常需要为每个新提示词实时计算分解矩阵,带来了不可接受的计算开销。系统亟需一种既能实现极高压缩比,又无需实时计算复杂矩阵分解,且能保持长文本检索能力的静态压缩方案。
怎么做的 kvtc 的核心思路借鉴了经典图像与视频压缩中的变换编码范式,通过离线寻找一个全局共享的低维正交子空间,将原本高维且高度相关的 KV Cache 投影到该空间中进行去相关,随后对不同维度的特征分配不同的量化位宽并进行无损压缩。这种做法用一次性的离线校准取代了昂贵的实时矩阵分解,从而彻底绕开了推理时的计算卡点。该方法由三个关键部件构成。首先是特征去相关,在离线阶段,算法在一个包含长短文本的校准集上提取 KV Cache,消除位置编码的影响后,在层和注意力头维度上进行拼接,通过随机奇异值分解计算出全局投影矩阵 $V$ 和特征均值 $\mu$。在推理阶段,模型生成的高维缓存 $X$ 会被投影为低维表示 $D$:
$$D = (X - \mu)V$$其次是自适应量化,由于主成分分析天然按方差大小对特征排序,kvtc 使用动态规划算法在给定的总比特预算下,最小化 Frobenius 重构误差:
效果如何 实验在单节点 8 张 H100 GPU 上进行,评估了 Llama 3(8B、70B)、Mistral NeMo 12B 以及推理模型 Qwen 2.5 R1(1.5B、7B)。对比基线涵盖了三大技术路线:基于低比特量化的 KIVI 和 GEAR、基于 token 驱逐的 TOVA 和 H2O,以及基于交叉层奇异值分解的 xKV。量化结果表明,在 GSM8K(数学)、MMLU(知识)以及 RULER(长上下文变量追踪)等测试中,kvtc 在实现约 20 倍压缩率时,各项指标与全精度基线的差距均保持在 1 个百分点以内。例如在 Llama 3.1 8B 上,全精度 GSM8K 准确率为 56.8%,kvtc 在 18 至 22 倍压缩下得分为 56.9%;在 Qwen 2.5 R1 7B 的 AIME25 复杂数学推理测试中,18 至 21 倍压缩仅使准确率从 40.8% 微降至 38.3%。在 8K 上下文的端到端延迟测试中,解压 kvtc 缓存的首 token 延迟比从头重计算快了近 8 倍,证明了其作为存储介质的实用性。该方法的代价是引入了额外的编解码计算延迟,且高度依赖离线校准数据的分布质量;此外,作者承认在追求 64 倍以上的极限压缩率时,模型在长上下文精确检索任务上的准确率会出现严重衰退。
主要贡献
在大规模服务大型语言模型(LLMs)时,高效的键值(KV)缓存管理是必不可少的。在迭代代码编辑和聊天中,通过共享前缀提示可以在对话轮次之间复用KV缓存。然而,滞留在芯片上的旧缓存会消耗稀缺的GPU内存,引发卸载开销,或迫使模型重新计算,这在生产系统中造成了延迟与吞吐量之间的两难困境。
本文提出了一种轻量级的变换编码器(Transform Coder)——kvtc,旨在压缩KV缓存以实现紧凑的GPU内和GPU外存储。借鉴经典媒体压缩技术,kvtc结合了基于主成分分析(PCA)的特征去相关、自适应量化以及熵编码。该方法仅需要短暂的初始校准,且不改变任何模型参数。通过利用KV缓存中的冗余,kvtc在保持推理和长上下文准确性的同时,实现了高达 $20\times$ 的压缩率,在特定用例中甚至可达 $40\times$ 或更高。作者在Llama 3、Mistral NeMo和R1-Qwen 2.5模型上,跨AIME25、GSM8K、LiveCodeBench、LongBench、MATH-500、MMLU、Qasper和RULER等基准测试对kvtc进行了评估。结果表明,它始终优于推理时的基准方法(如Token驱逐、量化和基于SVD的方法),并实现了更高的压缩率。这些结果证明了kvtc是构建内存高效且支持KV缓存复用的LLM服务系统的实用基础模块。
背景知识与设计原则
KV缓存结构。在具有多头自注意力的自回归Transformer解码过程中,为每个处理过的Token生成的键(Key)和值(Value)会被缓存以避免重新计算。这些张量的集合即为KV缓存。对于 $l$ 层、 $h$ 个注意力头、头部维度为 $d_{\mathrm{head}}$ 且序列长度为 $t$ 的模型,16位精度的KV缓存占用 $(4lhd_{\mathrm{head}}t)$ 字节。
跨注意力头对齐。受跨层KV缓存共享和压缩研究的启发【Reducing transformer key-value cache size with cross-layer attention + 2024 + NeurIPS】【xKV: Cross-layer SVD for KV-cache compression + 2025 + arXiv】,作者探究了来自不同注意力头的键(或值)是否处于共享的潜在空间中。具体而言,对于模型中的每对注意力头 $h_i, h_j$,尝试通过求解普氏问题(Procrustes problem)找到正交映射来对齐它们的缓存 $K_i, K_j \in \mathbb{R}^{t \times d_{\mathrm{head}}}$:
在对齐前,跨头的余弦相似度通常低于0.2;但在正交对齐后,键的相似度大幅增加,值的相似度适度增加。这种模式表明,键头在很大程度上同处于一个由正交变换决定的公共子空间中,对齐前的差异可能源于键值投影矩阵的随机初始化。这也为选择PCA作为降维方法提供了理论动机:如果 $k$ 个方向足以解释矩阵 $A$ 的所有方差,那么 $k$ 个方向也足以解释 $B = [A, AR]$ 的所有方差。
高效注意力算子动机。另一个动机来自高效注意力算子的研究【MInference 1.0: Accelerating pre-filling for long-context LLMs via dynamic sparse attention + 2024 + NeurIPS】。研究观察到不同的注意力头表现出相似的注意力模式。在没有RoPE的简化设置中,根据Gram实现的唯一性,键空间在正交变换下是相等的。
滑动窗口与Sink Token。由于最新生成的 $w$ 个Token和最旧的 $s$ 个Token(注意力Sink)对典型注意力模式的贡献不成比例地高,作者避免对它们进行压缩。在视觉和音频的变换编码中,比特分配旨在使量化引起的感知失真最小化。类似地,分配给Token的注意力权重可以被视为其重要性的代理。此外,当使用PCA降低键和值的维度时,初始Token会产生更高的重建误差。作者选择 $w = 128$ 和 $s = 4$ 进行评估,消融实验证实,压缩这些Token会显著降低甚至完全破坏高压缩率下的准确性。
多轮对话结构。对话可表示为有序序列 $\mathcal{C} = ((x_0, y_0), (x_1, y_1), \dots)$,其中 $x_t$ 为输入, $y_t$ 为回复。生成 $y_t$ 包含Prefill(预填充)阶段(为所有先前Token生成KV缓存)和迭代解码阶段。
缓存复用优势。当接收到新的用户提示时,如果前缀匹配,可以复用现有的KV缓存,只需将新增的Token通过模型前向传播,从而减少计算量并降低首字延迟(TTFT)。如果缓存被删除,模型必须将整个对话作为提示重新处理,导致呈二次方增长的注意力重新计算开销。
服务中的KV缓存管理。高效的LLM部署通常将预填充和解码分配到不同的节点上。预填充节点生成KV缓存并通过高速网络(如RDMA)传输到解码节点。两个节点都维护分层的KV缓存(GPU HBM、CPU DRAM、NVMe/SSD)。系统在选择节点时,通常取决于是否已经持有匹配前缀的KV缓存。在此类设置中,KV缓存传输通常是跨节点流量的瓶颈。
压缩的必要性。在预填充或解码阶段之后压缩KV缓存具有双重优势:(i) 延长KV缓存的生命周期。压缩按比例扩展了缓存数据库的有效容量,增加了高层级存储(HBM/DRAM)的命中率,避免了长前缀提示的重新计算。例如, $20\times$ 的寿命延长可能决定了一个缓存是保持可用还是需要从头计算。(ii) 减少网络流量。预填充时间随提示长度呈 $\mathcal{O}(n^2)$ 扩展,当网络带宽饱和成为瓶颈时,KV缓存压缩能按压缩率成比例地减少内存流量。
方法细节
kvtc核心框架。键值变换编码器(kvtc)建立在变换编码框架【Discrete cosine transform + 1974 + IEEE Transactions on Computers】之上,该框架广泛应用于JPEG等图像压缩算法。kvtc通过投影到由中心化校准数据的奇异值分解(SVD/PCA)获得的正交基矩阵 $V$ 上来应用特征去相关。随后,使用动态规划算法选择量化参数,并将生成的符号通过DEFLATE算法进行熵编码。kvtc具有三种操作模式:(1) 校准(Calibration):每种模型和压缩率仅执行一次,计算PCA并使用动态规划分配最优比特;(2) 压缩(Compression):在推理阶段之间(如解码后)独立压缩键和值,可用于存储或传输;(3) 解压(Decompression):逆向执行压缩步骤,最耗时的逆投影操作可以逐层进行以尽早开始生成。
特征去相关。与先前为每个提示单独计算SVD分解的方法【SVDq: 1.25-bit and 410x key cache compression for LLM attention + 2025 + arXiv】【xKV: Cross-layer SVD for KV-cache compression + 2025 + arXiv】不同,kvtc使用校准数据集 $\mathcal{C}$ 计算一次KV缓存投影矩阵,并在推理时跨所有请求复用。准备通用矩阵 $V$ 基于三个观察:首先,必须在大型代表性样本上计算SVD;其次,排除最新Token和注意力Sink可提高压缩率;第三,位置编码会扭曲键的低秩结构,应在压缩前移除【ShadowKV: KV cache in shadows for high-throughput long-context LLM inference + 2025 + arXiv】。
校准数据准备。在校准期间,将数据集 $\mathcal{C}$ 中的所有序列通过模型并收集其KV缓存。对于每个序列,缓存条目在时间维度上拼接。然后从该全局池中采样 $n$ 个Token位置(排除Sink)。对于每个采样位置,提取 $l$ 层和 $h$ 头的对应键(或值),撤销位置旋转,并沿隐藏维度 $d_{\mathrm{head}}$ 拼接。这产生了一个数据矩阵 $C \in \mathbb{R}^{n \times p}$,其中 $p = lhd_{\mathrm{head}}$。
SVD计算与截断。设 $\boldsymbol{\mu} \in \mathbb{R}^p$ 为 $C$ 的每特征均值。计算中心化矩阵的SVD:$\boldsymbol{C} - \boldsymbol{\mu} = \boldsymbol{U}\boldsymbol{\Sigma}\boldsymbol{V}^{\intercal}$。对于任何输入 $\boldsymbol{X} \in \mathbb{R}^{m \times p}$,去相关表示及其逆表示为 $D = (X - \mu)V$ 和 $X = DV^{\top} + \mu$。当截断基矩阵到目标秩 $r < p$ 时,$\boldsymbol{X} \approx \boldsymbol{D}\boldsymbol{V}^{\intercal} + \boldsymbol{\mu}$。为实现可扩展性,在GPU上使用随机化SVD【Finding structure with randomness: Probabilistic algorithms for constructing approximate matrix decompositions + 2011 + SIAM Review】计算目标秩 $r < p$,大幅减少了运行时间和内存。
量化目标。PCA按解释方差对主成分进行排序。kvtc利用这种排序在PCA坐标上分配固定的比特预算,使得高方差成分获得更多比特。将 $D$ 逐坐标量化为 $D^{q_1, \dots, q_d}$,其中 $q_i$ 是分配给第 $i$ 个主成分的位宽。在全局比特预算下,目标是最小化Frobenius重建误差 $\|DV^{\top} - D^{q_1, \dots, q_k}V^{\top}\|_F^2$。由于右乘正交矩阵保留了Frobenius范数,该误差等价于 $\|D - D^{q_1, \dots, q_k}\|_F^2$。因此,可以直接在去相关域中找到最优比特分配。
动态规划分配算法。通过简单的动态规划(DP)算法解决受限分配问题。该算法维护两个表:(1) 在 $b$ 比特有效载荷下,使用前 $i$ 个主成分可实现的最小重建误差;(2) 存储最优局部决策的回溯指针。受Microscaling数据格式【Microscaling data formats for deep learning + 2023 + arXiv】启发,kvtc将后续的PCA坐标分组量化,每组共享16位的偏移和缩放因子。DP优化每组的位宽和组大小,组大小限制为 $\{1, 16, 64, 256, 1024\}$ 个成分。总预算等于所有坐标的有效载荷比特与每组偏移和缩放因子之和。
比特分配结果。如校准图所示,学习到的位宽对于后续的主成分单调递减。至关重要的是,DP为大量尾部主成分分配了零比特。这一观察结果促使在计算PCA的早期降低维度,从而降低校准成本,并修剪 $V$ 以仅保留具有非零位宽的维度,从而在推理期间加快压缩和解压速度。
熵编码。最后,量化值被打包到单个字节数组中,并使用DEFLATE算法【Deflate compression algorithm + 2017 + US Patent】进一步压缩。至关重要的是,kvtc利用了nvCOMP库【nvCOMP + 2020 + NVIDIA】,使其能够直接在GPU上并行运行。此步骤是无损的,但增加的压缩率取决于具体内容。
实验环境
- 模型架构:Llama 3(8B, 70B Instruct)、Mistral NeMo 12B、MN-Minitron 8B、R1-Qwen 2.5(1.5B, 7B)。涵盖了基础模型、指令微调模型和推理模型(参数量1.5B至70B)。
-
数据集:
- 数学与知识:GSM8K(8-shot CoT),MMLU(4-shot CoT)。
- 长上下文:Lost in the Middle (LITM) 键值检索,RULER Variable Tracking (RULER-VT),Qasper。
- 复杂推理与代码:AIME 2024-2025,LiveCodeBench,MATH-500。
- 校准数据:FineWeb 和 OpenR1Math 的 1:1 混合,包含短文档(1-8K)和长文档(8-32K)。
-
硬件配置:8 × NVIDIA H100 80GB GPUs。
- 软件与基准方法:对比方法包括 KIVI、GEAR、FP8 量化、TOVA、$\mathrm{H_2O}$、xKV 以及 DMS。评估框架使用 LM Evaluation Harness 和 RULER。
实验结果
通用基础模型表现。在8-12B规模的模型(Llama 3.1 8B, MN-Minitron 8B, Mistral NeMo 12B)上,kvtc在 $32\times$ 和 $64\times$ 的高压缩率下仍能保持高准确率。相比之下,量化方法(GEAR, KIVI)在 $5\times$ 压缩率下在GSM8K和LITM任务上出现性能下降;缓存驱逐方法($\mathrm{H_2O}$, TOVA)作为通用压缩器表现不佳;xKV在多数任务上表现良好,但在Qasper上表现欠佳。在 $16\times$ 压缩率(DEFLATE后约 $20\times$)下,kvtc始终保持与原始模型差异小于1分的成绩(见Table 2)。
推理模型表现。在复杂的数学(AIME)和代码(LiveCodeBench)任务中测试R1蒸馏模型。对于1.5B模型,$\mathrm{kvtc}_{8\times}$ 在代码任务上仅有 $0.3\mathrm{pp}$ 的下降,将原本 29 KiB/token 的缓存压缩至 3.2 KiB/token。与当前最先进的自回归KV缓存驱逐方法DMS相比,kvtc取得了极具竞争力的结果(见Table 3)。
多GPU推理。在Llama 3.3 70B上评估流水线并行(跨4张GPU)的kvtc表现。在MATH-500任务中, $10\times$ 压缩导致准确率下降 $1.2\mathrm{pp}$, $20\times$ 压缩导致下降 $3.0\mathrm{pp}$,误差均在合理范围内(见Table 4)。
延迟分析。在Mistral NeMo 12B模型上,相比于重新计算8K上下文的KV缓存,$\mathrm{kvtc}_{16\times}$ 的解压操作可将首字延迟(TTFT)降低高达 $8\times$(见Table 5)。
结论
本文提出了kvtc,一种能够将KV缓存压缩高达 $20\times$ 且质量下降微乎其微的方法,在特定用例中甚至可达到 $40\times$ 或更高的压缩率。实验表明,键值缓存存在大量冗余,kvtc通过简单的变换编码管道(线性降维、动态规划位宽分配、熵编码)成功利用了这些冗余。该方法在1.5B至70B的常规模型和推理模型上均证明了其有效性。kvtc为更高效的LLM部署铺平了道路,显著降低了LLM辅助的迭代工作流的成本。未来的工作包括探索直接在主成分空间中进行推理,以及将kvtc扩展到更大规模的模型和更长的校准数据。
补充细节
在线压缩与组合性。kvtc专为高效存储和减少首字延迟而设计。拥有单一可泛化的PCA矩阵,使得进一步探索直接在主成分空间进行推理成为可能。kvtc不改变KV缓存的结构或注意力计算方式,因此它与Token驱逐方法(如TOVA)直接兼容,可结合使用以进一步降低内存占用。此外,kvtc还可用于压缩多头潜在注意力(MLA)中的潜在状态。
可扩展性与泛化限制。当前评估基于模拟的多轮对话基准测试,可能无法完全反映真实的生产内容分布。校准过程目前在单张H100 GPU上处理约20万个Token,仅需数分钟即可完成。扩展到更大的校准集主要取决于PCA计算的扩展。此外,使用Frobenius范数重建误差作为下游任务准确性的代理虽然方便,但需要进一步系统性研究其在不同任务中的预测能力。
相关工作 - 量化与SVD。免微调量化(如KIVI、KVQuant)分别对键和值采用不同的量化策略,而kvtc是在SVD变换后的空间中应用量化,并通过动态规划优化精度。与基于微调的量化(如LLM-QAT、BitDistiller)不同,kvtc无需修改模型参数。在SVD方法中,GEAR改进了量化,LoRC直接降低了秩,xKV跨层聚合缓存;而kvtc的不同之处在于:(i) 对非相邻层进行跨层拼接;(ii) 在压缩预算下通过动态规划选择秩和位宽;(iii) 应用了熵编码。
相关工作 - 稀疏注意力与系统。稀疏机制(如$\mathrm{H_2O}$、TOVA、Quest)通过选择性丢弃键值来管理序列长度。kvtc作为正交方法,可与这些动态内存压缩策略结合。在缓存管理系统方面,PagedAttention和CacheGen优化了内存分配和分布式管理,kvtc通过集成细粒度的压缩能力扩展了这些系统。
附录
评估细节。GSM8K使用8-shot CoT,MMLU使用4-shot CoT。Lost in the Middle采用0-shot 100-keys设置。Variable Tracking(RULER)采用1-shot,上下文8K。Needle in a Haystack(NIAH)采用0-shot,Llama 70B上下文100K,其他8K。AIME和LiveCodeBench限制生成长度分别为30K和16K Token,并使用Math-Verify验证答案。MATH-500限制生成5120 Tokens,滑动窗口 $w=256$。
kvtc超参数。对于8-12B模型,使用160K校准Token,维度截止为10K。Qwen模型使用200K校准Token和8K维度降低。所有模型默认使用FineWeb和OpenR1Math的50/50混合数据。对给定模型,所有压缩率使用相同的PCA矩阵,仅通过动态规划自动调整精度分配。
KV缓存属性。Llama 3.1 8B、Mistral-Nemo 12B和Qwen 2.5 R1的相对通道激活分析表明,所有模型的键和值都显示出降维和量化的潜力(绝对激活和方差较低)。
排除Sink Token。比较了排除前四个Token压缩($\mathrm{kvtc}^{\mathrm{b}4}$)和压缩所有Token($\mathrm{kvtc}^{\mathrm{b}0}$)的设置。在高压缩率($64\times$)下,压缩Sink Token会导致Llama 3.1 8B的下游任务得分急剧下降,并在长上下文任务中引发退化。
键与值的可压缩性。独立调整键和值的压缩率表明,对于长上下文检索任务,值缓存可以比键缓存压缩得更多。这是因为精确关注缓存中选定的Token依赖于键向量的高准确性。然而,对值的更强压缩会导致GSM8K和MMLU任务性能明显下降。
校准数据量。增加校准数据量明显有利于 $256\times$ 的极高压缩率,而对 $32\times$ 和 $64\times$ 的回报较为温和。40K Token的预算已能为 $64\times$ 压缩率带来极具竞争力的结果。160K Token的PCA校准可在1.5分钟内完成,DP计算可在8分钟内完成。
校准数据领域。使用OpenR1Math校准数据在较高压缩率下比FineWeb更好地保持了MMLU和键值检索得分。在强领域偏移测试中,使用StarCoder的Python、C或Assembly代码进行校准会导致GSM8K性能下降,但模型仍保留了上下文检索能力(LITM, RULER-VT)。
滑动窗口大小。增加未压缩最近Token的滑动窗口长度可提高下游性能,滑动窗口 $\le 16$ 和 $\ge 64$ 之间的差异最为明显。
无损压缩算法。消融实验表明,DEFLATE可以轻松被针对GPU优化的GDeflate替代,压缩率差异 $\le 0.1$。ANS、DEFLATE、GDeflate和Zstandard在所有测试情况下均显著优于无额外压缩的基线。
DP量化的优势。与不使用DP量化而是直接移除最不重要主成分的变体(-DPQ)相比,省略DP量化会导致长上下文任务性能显著下降,且阻碍了向更大压缩率的扩展。
跨层PCA的优势。在不使用DP量化的情况下测试拼接不同层数进行PCA的效果。结果支持了键/值头之间存在跨层相似性的假设:用于校准拼接的层数越多,下游性能越好。键从全局拼接中获益更多,而值在拼接层数从8增加到16时表现出显著提升。
逐提示词PCA。模拟逐提示词计算PCA会导致压缩率显著降低,因为需要存储每个提示的投影矩阵 $V^{\top}$。此外,逐提示词的 $V^{\top}$ 泛化能力差,无法有效压缩对话的后续部分。
PCA矩阵大小。通过算法计算出的PCA投影矩阵 $V$ 的参数量仅占模型参数的一小部分(例如,Llama 3.3 70B的PCA矩阵占2.4%),并且可以根据所需的压缩率由DP算法进一步缩减。
端到端延迟测试。在简化的多用户场景中(vLLM + LMCache),当并发客户端达到12个或更多时,分配的主机内存(128GiB/GPU)不足以容纳KV缓存,导致重新计算和延迟激增。在 $16\times$ 压缩下,系统能支持更多客户端而不触发重新计算。
动态规划算法伪代码。算法遍历预算内前 $i$ 个特征量化可能结束的所有量化块。其渐进时间复杂度为 $\mathcal{O}(\text{特征数} \times \text{最大比特预算} \times \text{批次大小})$。
💬 评论讨论
欢迎在这里分享您的想法和见解!