KVarN:华为推出的原生 vLLM KV 缓存量化后端
摘要
华为 CSL 发布 KVarN,这是一个原生 vLLM 注意力后端,专为 KV 缓存量化设计。它无需校准即可实现 3-5 倍的 KV 缓存容量提升,以及高达约 1.3 倍于 FP16 的吞吐量。在 Qwen3-32B 等模型上,其吞吐量最高可达 TurboQuant 的约 2.4 倍,同时保持与 FP16 相当的精度。
查看缓存全文
缓存时间: 2026/06/05 02:11
huawei-csl/KVarN 来源:https://github.com/huawei-csl/KVarN 基于 vLLM(https://github.com/vllm-project/vllm)构建 许可证(https://opensource.org/licenses/Apache-2.0) arXiv(https://arxiv.org/abs/2606.03458) hf-space(https://huggingface.co/huawei-csl) GitHub stars(https://github.com/huawei-csl/KVarN/stargazers)
⚡️ 专为智能体与长上下文工作负载而生。 💡 KVarN 在 FP16 精度级别下,提供 3-5 倍的 KV 缓存容量 和 约 1.3 倍的吞吐量,让你能够支持更长的上下文和更多并发请求。 🔌 无需校准,即插即用,完美兼容 vLLM。 作为原生 vLLM 注意力后端,只需添加一个参数,无需修改模型,无需校准。 🥊 吞吐量最高可达 TurboQuant 的约 2.4 倍,容量相同,精度更高。
为什么选择 KVarN(方差归一化 KV 缓存)?
kvarn /kvɑːɳ/ · 名词(瑞典语)
- 一种将物质研磨成更小颗粒或粉末的装置,特别用于谷物、种子、香料、咖啡豆、KV 缓存。
KV 缓存量化通常存在一定的代价。正如 vLLM TurboQuant 博客(https://vllm.ai/blog/2026-05-11-turboquant)所示,现有方法在获得额外 KV 缓存容量的同时,会牺牲吞吐量(TurboQuant 报告显示,在 2.3-3.7 倍容量下,吞吐量降低了 40 至 52%),而激进的低比特量化也往往会损失精度。速度和质量双双下降,正是 KV 缓存量化在生产环境中鲜少启用的主要原因。
KVarN 的目标就是两者兼顾。 在 Qwen3-32B(AIME25,16K 上下文突发,TP=2)上,KVarN 达到了 FP16 的精度,并在 吞吐量上超越 FP16 的同时,提供约 4 倍的 KV 缓存容量:
KVarN 始终处于博客中其他方法无法触及的右上角区域:FP16 级别的精度、不低于 FP16 的吞吐量,以及数倍的上下文容量。
快速上手
KVarN 以 vLLM 的 fork 形式发布。安装方式与 vLLM 相同,然后选择 KVarN 的 KV 缓存数据类型即可。
# 1. 克隆仓库
git clone https://github.com/huawei-csl/KVarN.git
cd KVarN
# 2. 安装(使用上游预编译的 wheel;KVarN 内核基于 Triton,在运行时 JIT 编译)
VLLM_USE_PRECOMPILED=1 pip install -e .
from vllm import LLM, SamplingParams
llm = LLM(
model="Qwen/Qwen3-32B",
dtype="float16", # KVarN 在 float16 下运行
kv_cache_dtype="kvarn_k4v2_g128", # 启用 KVarN
block_size=128, # KVarN 分块大小
)
print(llm.generate("Explain KV-cache quantization in one sentence.", SamplingParams(max_tokens=64))[0].outputs[0].text)
服务部署方式相同:
vllm serve Qwen/Qwen3-32B --dtype float16 --kv-cache-dtype kvarn_k4v2_g128 --block-size 128
注意: KVarN 在
float16计算模式下运行。分块 / 页面大小目前固定为 128(一个 vLLM block = 一个 KVarN tile);其他页面大小支持即将推出。 提示(容量): 当有足够空间来摊销少量固定解码工作区时,KVarN 才能充分发挥其 KV 缓存容量。在多 GPU 或较宽松的--gpu-memory-utilization配置下,这一过程是自动完成的。在单 GPU 资源紧张的情况下,vLLM 的 CUDA 图内存分析器可能会过度预留并压缩 KV 缓存池;可通过设置VLLM_MEMORY_PROFILER_ESTIMATE_CUDAGRAPHS=0(和/或提高--gpu-memory-utilization)来恢复完整容量。
KVarN 的工作原理
KVarN 以固定大小的 token 分块为单位对 KV 缓存进行量化,每个分块依次经过以下四个阶段:
- 原始缓存:直接来自注意力计算的原始 fp16 KV 分块(通道 × token)。
- 旋转缓存:沿通道维度进行 Hadamard 旋转,将各通道混合,使逐通道异常值得以分散,从而更易于量化。由于旋转是正交归一的,注意力分数得以保留。
- 归一化缓存:迭代方差归一化(类 Sinkhorn 方式)在对数空间中交替进行列向和行向标准差归一化,在量化舍入之前均衡分块内的方差,缩小量化误差。
- 量化缓存:在低比特宽度下进行非对称四舍五入,读取时将缩放因子还原(键按通道,值按 token)。
预设配置对键分配更多比特,对值分配更少比特(kvarn_k4v2_g128:4 位键,2 位值)。我们选择发布此配置,是因为它在满足最严格精度要求(与 FP16 持平)的同时,仍能实现超越 FP16 的吞吐量,能够满足生产部署和 vLLM 的最高标准。
引用
KVarN 是我们论文的官方 vLLM 实现:
📄 KVarN: Variance-Normalized KV-Cache Quantization Mitigates Error Accumulation in Reasoning Tasks(arXiv:2606.03458(https://arxiv.org/abs/2606.03458))
如果您使用了 KVarN,请引用:
@misc{muller2026kvarn,
title={KVarN: Variance-Normalized KV-Cache Quantization Mitigates Error Accumulation in Reasoning Tasks},
author={Lorenz K. Muller and Philippe Bich and Chiara Boretti and Hyun-Min Chang and Jiawei Zhuang and Lukas Cavigelli},
year={2026},
eprint={2606.03458},
archivePrefix={arXiv},
primaryClass={cs.LG},
url={http://arxiv.org/abs/2606.03458}
}
许可证与致谢
KVarN 基于 vLLM(https://github.com/vllm-project/vllm)(v0.22.0)构建,遵循 Apache 2.0 许可证发布。原始 vLLM README 保存为 README_vLLM.md。
相似文章
KVarN:方差归一化的KV缓存量化减轻推理任务中的错误累积
KVarN是一个免校准的KV缓存量化器,它使用哈达玛旋转和双缩放方差归一化来减少大型语言模型自回归解码过程中的错误累积,在推理基准上实现了最先进的2位精度。
@JakeKAllDay: 华为发布了一篇关于一种名为KVarN的新型KV压缩方法的论文:它证明了低至 *2 bit* 量化时损失极小…
华为发布了一篇关于KVarN的论文,这是一种新型KV缓存压缩方法,在2位量化下与FP16相比实现了极小损失,优于TurboQuant和KIVI等方法,且几乎不引入推理延迟。
这是我的KV缓存量化基准测试:TurboQuant被高估但被TCQ拯救,q5值得更多关注,对称q8可能浪费显存
一项详细的基准测试,使用PPL和KLD指标在Qwen 3.6 27B上比较KV缓存量化方法(TurboQuant、TCQ、q4、q5、q8),发现TCQ改进了低位量化,不对称KV在相同大小下优于对称KV,且q8通常过于夸张。包含分析和数据,见链接文章。
在sm120上使用NVFP4 KV缓存量化将使32GB VRAM系统变得非常强大
在sm120上使用NVFP4 KV缓存量化显著提高了大语言模型的内存效率,使32GB VRAM系统在196k上下文大小下使用Qwen3.6-27B实现约60 tok/秒的推理速度。
@anirudhbv_ce: 介绍 SpectralQuant.. 来拯救您的 KV 缓存 :)
SpectralQuant 是一种新的 KV 缓存量化技术,在 Mistral 7B 上实现了 5.95 倍压缩,仅带来 7.5% 的困惑度开销,显著优于 TurboQuant,且每个模型只需 15 秒校准。