KVarN:华为推出的原生 vLLM KV 缓存量化后端

Hacker News Top 工具

摘要

华为 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ɑːɳ/ · 名词(瑞典语)

  1. 一种将物质研磨成更小颗粒或粉末的装置,特别用于谷物、种子、香料、咖啡豆、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 缓存进行量化,每个分块依次经过以下四个阶段:

  1. 原始缓存:直接来自注意力计算的原始 fp16 KV 分块(通道 × token)。
  2. 旋转缓存:沿通道维度进行 Hadamard 旋转,将各通道混合,使逐通道异常值得以分散,从而更易于量化。由于旋转是正交归一的,注意力分数得以保留。
  3. 归一化缓存迭代方差归一化(类 Sinkhorn 方式)在对数空间中交替进行列向和行向标准差归一化,在量化舍入之前均衡分块内的方差,缩小量化误差。
  4. 量化缓存:在低比特宽度下进行非对称四舍五入,读取时将缩放因子还原(键按通道,值按 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

相似文章