压缩历史信息缓存,让长文本推理少占显存
模型处理长文本或生成较长推理过程时,需要保存越来越多的历史信息。这部分 KV Cache 会占用显存,限制上下文长度和并发数量;在某些配置下,其占用甚至超过模型权重。Google Research 的 TurboQuant、苹果与高校合作团队的 CommVQ、华为的 KVarN,都尝试用更少的比特保存缓存,同时控制精度损失。三者发布时间和测试设置不同:CommVQ 是 2025 年工作,TurboQuant 的研究博客和 KVarN 论文分别在 2026 年 3 月、6 月发布。比较它们,还需要看压缩后能否在实际推理框架里省内存、提速度。
上下文越长,历史 Key 和 Value 向量越占显存
采用完整因果注意力的 Transformer 在生成新 token 时,需要利用历史 token 的 Key 和 Value 向量;局部或稀疏注意力的访问范围则有所不同。为了避免每次重新计算,这些向量被缓存在 GPU 显存中——这就是 KV Cache。
在固定架构和精度下,KV Cache 大小随缓存序列长度和并发数量增长,还取决于层数、KV 头数及每头维度。NVIDIA 博客以 4-bit 权重量化的 Qwen3-32B 为例,指出它在一张 24 GB GPU 上生成约 24,000 token 后会出现显存不足(OOM);这属于特定配置的示例,运行时开销也会占用显存。对于采用常见分组查询注意力配置的某些 70B 模型,128K 上下文的 FP16 KV Cache 可达到约 40 GB,不能将这一数字直接套用到所有 70B 模型。
传统的注意力机制优化——如 FlashAttention、PagedAttention——解决的是计算速度和内存管理效率问题,但并未改变 KV Cache 本身的存储总量。随着测试时计算扩展(test-time scaling)和推理模型的普及,单次推理的 token 生成量正从几百膨胀到数万,压缩 KV Cache 因而成为降低长文本推理内存成本的一种办法。
三种量化方法,分别处理存储开销、解码计算和误差累积
TurboQuant 用低比特量化和残差修正保存向量
Google Research 在 2026 年 3 月的博客中介绍了 TurboQuant(ICLR 2026),其思路是先压缩向量,再修正残余误差:
第一阶段:旋转后量化。 Google 的介绍先将数据向量随机旋转,再对各个分量应用量化,以较少比特保留主要信息。博客还解释了相关方法 PolarQuant:把坐标转换为半径和角度,利用角度分布的集中性预先确定量化边界。传统方法为数据块保存量化常数,可能给每个数值增加 1–2 bit;这种设计则减少了相应的辅助存储开销。
第二阶段:QJL(Quantized Johnson-Lindenstrauss)。 对第一阶段留下的残差应用 Johnson-Lindenstrauss 变换,再将变换后向量中的每个数值压缩为一个符号位(+1 或 -1)。这种随机映射在相应的维度和误差条件下,可以近似保留向量间的距离关系。QJL 配合无偏估计器,修正计算注意力分数时的系统性偏差。
实验结果: Google 报告,在所测 Gemma、Mistral 等模型和长上下文任务中,TurboQuant 的 3 bit/元素配置保持了接近原始模型的任务表现;其“至少 6 倍”内存缩减和无精度损失描述对应博客所列实验,并非所有模型与任务的保证。在 H100 GPU 上,4-bit TurboQuant 的注意力 logit 计算速度相对 FP32 key 基线最高达到 8 倍;这是注意力分数计算的加速,不能直接等同于完整生成速度提升。方法完全数据无关(data-oblivious),无需校准数据或模型微调,有助于减少部署前的数据准备,但仍需适配运行内核。
CommVQ 让码本与位置编码配合,减少解码开销
苹果与高校研究者的 CommVQ 发表于 ICML 2025,苹果研究页面标注为 2025 年 7 月。它关注的是,如何把缓存解码与自注意力计算合并,减少额外计算。
CommVQ 的核心创新在于设计了一个与 RoPE(Rotary Position Embedding)可交换的码本。LLM 中的 RoPE 通过旋转变换将位置信息编码到 Query 和 Key 向量中。位置旋转与码本解码的计算次序,会影响能否把操作有效合并。普通旋转本身不必然放大误差,工程问题在于如何减少单独解压和数据搬运。
CommVQ 的解法:利用期望最大化(EM)算法训练一个与 RoPE 旋转操作可交换的码本。这意味着解压后的矩阵乘法可以直接嵌入自注意力计算图,减少单独执行解码的开销。具体而言,CommVQ 使用加法量化(additive quantization),通过轻量级编码器将 KV Cache 映射到码本空间,解压仅需一次矩阵乘法。
实验结果: 在 2-bit 量化下,CommVQ 将 FP16 KV Cache 大小缩减 87.5%,并在论文所测的长上下文基准和 GSM8K 上取得优于所比较方法的精度。论文还报告,CommVQ 在所测 1-bit 量化设置下仅出现较小的精度下降,这使得 LLaMA-3.1 8B 模型能够在 单张 RTX 4090(24 GB)上运行 128K 上下文,展示了低显存配置运行长上下文的可能性。
KVarN 调整缓存数值的尺度,减少长推理中的误差累积
华为于 2026 年 6 月发布 KVarN(arXiv:2606.03458),重点研究一个容易被静态压缩测试遗漏的问题:自回归解码中的量化误差累积。
KVarN 论文的核心洞察是:部分 KV Cache 量化方法的常用评估偏向「prefill 场景」——即一次性量化一个固定的长上下文。但在推理模型的实际自回归解码中,每生成一个 token 块(如 128 个 token),新产生的 K/V 向量就被量化后写入缓存,后续层的注意力计算将在「已经被量化的缓存」上进行。这导致量化误差在层与层之间、时间步与时间步之间逐级累积。
KVarN 提出了「伪解码」(pseudo-decode)评估协议来量化这种累积效应,并揭示了两个关键发现:
- 较大的异常误差主要与 token 幅度错误有关。论文将量化误差分解为幅度误差和方向误差,在所分析设置中观察到,前 5% 的最大异常误差大多来自 token 尺度缩放不准确。
- 仅靠 Hadamard 旋转(TurboQuant 中用于去相关的技术)不足以解决 token 尺度的异常值问题。
KVarN 的算法方案是 Hadamard 旋转与双尺度方差归一化。它先在通道维度应用 Hadamard 变换,缓解异常值集中于少数通道的问题,再在 token 和通道两个维度迭代归一化方差(Sinkhorn-Knopp 风格),调整量化前的数值尺度。在论文的 Qwen3-4B 测试中,归一化耗时相当于生成 128 个 token 时间的约 0.18%;这只衡量该项开销。
实验结果: 在 Qwen3-4B 上,KVarN 以 2.3 bit/元素的平均精度,在 AIME24 上达到 60.0%(FP16 基线为 61.1%),而 TurboQuant 在相同模型上仅达到 48.9%。在 Phi-4-14B 上,KVarN 在 AIME24 上达到 61.7%(FP16 为 62.2%),TurboQuant 为 52.2%。在 Phi-4-14B 的 MATH500 测试上,KVarN 接近 FP16 精度(84.8% vs 84.9%)。这些对比使用论文列出的实现,TurboQuant 一列来自 vLLM 实现,含辅助存储的平均位宽也不同。KVarN 以 Apache 2.0 协议开源,并提供基于 vLLM 的分支实现;安装该分支、选择支持的配置后,可通过缓存类型参数启用。
压缩倍数和加速数字,分别对应不同实验设置
| 维度 | TurboQuant (Google) | CommVQ (Apple) | KVarN (华为) |
|---|---|---|---|
| 公开时间 | 2026.03 研究博客 | 2025 年论文 | 2026.06 论文 |
| 学术会议 | ICLR 2026 | ICML 2025 | arXiv 预印本 |
| 核心技术 | 随机旋转后量化 + QJL 残差修正;博客另介绍 PolarQuant | RoPE 可交换码本 + 加法量化 | Hadamard 旋转 + 双尺度方差归一化 |
| 压缩相关结果 | 博客报告至少 6x,含 3 bit 测试 | FP16 到 2 bit 理论载荷 8x,1 bit 为 16x | 仓库报告上下文容量增至 3–5x;论文另测 2.3 bit/元素 |
| 速度相关结果 | H100 上 4-bit 注意力分数计算最高 8x,基线为 FP32 key | 强调降低解码开销 | 仓库报告指定测试吞吐高于 FP16;不直接与注意力内核倍数比较 |
| 是否校准无关 | 是 | 需码本训练 | 是 |
| 所测任务表现 | 长上下文实验表现较好;其他实现和推理任务可能退化 | 所测长上下文任务和 GSM8K 保持较好精度 | 在论文所测 AIME、MATH 等任务中接近基线 |
| 公开材料 | 论文与研究博客 | 论文与代码仓库 | Apache 2.0,提供 vLLM 分支 |
| 设计重点 | 减少量化辅助存储,改善内积估计 | 让码本解码与注意力计算配合 | 调整数值尺度,减轻误差累积 |
实际省下显存,还要处理注意力内核与缓存分页
NVIDIA 6 月的博客《KV Cache Compression and Its Infra Problems》讨论了缓存删除方法与实际推理框架之间的两个衔接问题:
问题一:FlashAttention 不暴露注意力分数。 生产环境中的推理引擎使用 FlashAttention 内核,它通过 SRAM 分块计算注意力,从不将完整的 N×N 注意力分数矩阵写入 HBM 主存。需要这些分数的缓存选择方法,不能直接读取默认内核没有输出的数据。H2O 的参考实现会退回显式计算注意力矩阵的方式,代价是性能损失;其他方案则需要定制内核、替代评分或不同的压缩时机。
问题二:PagedAttention 下的碎片化导致「已释放内存」实际无法回收。 vLLM 等生产框架使用分页注意力管理 KV Cache:GPU 显存被划分为固定大小的物理块(每块约 16 个 token),一个块只有在完全为空时才能被回收。当压缩算法逐 token 进行选择性驱逐时,幸存 token 会分散在几乎所有块中,可能出现“驱逐了 90% 的 token,却几乎没有整块可释放”的情况;此时还需要整理和压紧缓存,才能实际回收物理块。
NVIDIA 在博客中介绍的解决方案是 TriAttention:改变缓存重要性的判断方式,并通过压紧整理回收空间。对量化方案,同样需要检查低比特读写、解码内核、分页和工作区开销,才能把理论压缩率转成实际显存与吞吐收益。
后续比较要同时看精度、完整生成速度和显存占用
不同方法仍在解决不同问题,后续可从几项具体指标观察进展:
混合精度策略。 KVarN 论文以 Llama3.1-8B 和 KIVI 量化设置为例,发现最大的 5% 量化误差中,超过 98% 位于 K 矩阵。未来的最优方案可能对 K 和 V 采用不同的量化精度。
与注意力架构协同设计。 MiniMax M3 的 MSA(MiniMax Sparse Attention)和 DeepSeek 的 MLA(Multi-head Latent Attention)等新型注意力机制,本质上也试图降低 KV Cache 的内存占用。量化压缩与架构创新的结合,能否进一步省内存和提速度,需要在同一架构与工作负载下验证。
长推理中的质量与成本。 KVarN 的论文明确指出,其设计的核心场景是测试时计算扩展——推理模型生成越来越长的思维链。随着 o3/o4 系列和 DeepSeek R1 等模型的普及,KV Cache 压缩将直接影响推理模型的成本与质量取舍。
在实际系统里验证收益。 TurboQuant 提供低比特向量量化方案,KVarN 提供 vLLM 分支实现,CommVQ 展示了 RTX 4090 运行 LLaMA-3.1 8B、128K 上下文的实验。它们并不天然对应互斥的云端、开源和端侧路线。选择方法时,应同时比较任务质量、完整生成耗时、并发能力和实际显存峰值。
来源
- CommVQ:ICML 2025 代码仓库
- Google Research, "TurboQuant: Redefining AI efficiency with extreme compression," March 2026. 链接
- Apple Machine Learning Research, "CommVQ: Commutative Vector Quantization for KV Cache Compression," July 2025. 链接
- Lorenz K. Muller et al., "KVarN: Variance-Normalized KV-Cache Quantization Mitigates Error Accumulation in Reasoning Tasks," arXiv:2606.03458, June 2026. 链接
- NVIDIA Research, "KV Cache Compression and Its Infra Problems," June 2026. 链接
- Pasquale Pillitteri, "Google TurboQuant: 6x Less Memory for LLMs with Zero Accuracy Loss," 2026. 链接
- Huawei CSL, "KVarN: Native vLLM backend for KV-cache quantization," GitHub, June 2026. 链接


