← 返回信息流
AI 资讯Hacker News·2 小时前

华为发布KVarN:vLLM原生KV缓存量化后端

原标题:KVarN: Native vLLM KV-cache quantization back end by Huawei

速览

华为发布了KVarN,这是一个针对vLLM的原生KV缓存量化后端。该技术旨在优化大模型推理过程中的显存占用与计算效率。通过原生集成量化功能,KVarN有助于提升大模型部署的性能与经济性。

AI 深度解读

KVarN:华为推出的原生 vLLM KV-cache 量化后端,打破性能与精度的权衡

背景

在大型语言模型(LLM)的生产部署中,KV-cache(键值缓存)的量化一直是一个充满挑战的领域。KV-cache 用于存储注意力机制中计算过的键(Key)和值(Value)向量,以加速长上下文推理。然而,现有的 KV-cache 量化方法往往面临“鱼与熊掌不可兼得”的困境。

正如 vLLM 官方博客中提到的 TurboQuant 案例所示,传统的量化方法虽然能显著增加 KV-cache 的容量(例如提升 2.3 到 3.7 倍),但代价是吞吐量大幅下降(降低 40% 到 52%)。另一方面,激进的低位宽量化虽然能保持速度,却往往导致模型精度受损。这种“既损失速度又损失质量”的现状,是 KV-cache 量化技术在生产环境中极少被启用的主要原因。

为了解决这一痛点,华为推出了 KVarN(发音 /kvɑːɳ/,瑞典语意为“研磨机”,隐喻将数据细化处理),这是一个专为 Agent 工作和长上下文负载设计的原生 vLLM 注意力后端。KVarN 旨在实现 FP16 级别的精度,同时提供比 FP16 更高的吞吐量以及数倍的 KV-cache 容量。

核心内容

KVarN 的核心设计理念是“免校准、即插即用”。它作为 vLLM 的一个 Fork 版本发布,用户只需添加一个参数标志即可启用,无需修改模型结构,也无需进行繁琐的校准过程。

性能表现

在 Qwen3-32B 模型上的测试(AIME25 基准,16K 上下文突发,TP=2)显示,KVarN 能够保持与 FP16 相同的精度,同时吞吐量超过 FP16,并提供了约 4 倍的 KV-cache 容量。相比之下,TurboQuant 虽然提供了类似的容量提升,但其吞吐量显著低于 FP16。KVarN 在“精度-吞吐量-容量”的三维空间中占据了其他方法难以企及的右上角区域。

技术原理

KVarN 采用固定大小的 Token Tile(图块)对 KV-cache 进行量化,每个图块经过四个关键阶段处理:

  1. Cache(缓存):直接从注意力机制获取原始的 FP16 KV 图块(通道数 × 令牌数)。
  2. Rotated Cache(旋转缓存):沿通道维度进行 Hadamard 旋转。这一操作混合了通道数据,使每通道的异常值分散开来,从而降低量化难度。由于旋转是正交的,因此不会改变注意力分数。
  3. Normalized Cache(归一化缓存):采用迭代方差归一化(类似 Sinkhorn 算法)。在对数空间中交替进行列向和行向的标准差归一化,使图块内的方差趋于均衡,从而在舍入之前缩小量化误差。
  4. Quantized Cache(量化缓存):进行低位宽的非对称最近舍入。在读取时,将缩放因子(Scales)折叠回去:Keys 按通道缩放,Values 按令牌缩放。

配置与部署

目前发布的预设配置为 kvarn_k4v2_g128,即 4-bit Keys 和 2-bit Values。选择这一配置是因为它在满足最严格的生产部署精度要求(匹配 FP16)的同时,仍能保持高于 FP16 的吞吐量。

安装与使用示例:

# 1. 克隆仓库
git clone https://github.com/huawei-csl/KVarN.git
cd KVarN

# 2. 安装(使用上游预编译 wheel;KVarN 内核基于 Triton,运行时 JIT 编译)
VLLM_USE_PRECOMPILED=1 pip install -e .

Python 代码调用:

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 下进行计算。
  • 图块大小:当前的 Tile/Page 大小固定为 128(一个 vLLM block 对应一个 KVarN tile),其他页面大小即将推出。
  • 容量优化:KVarN 在有多余空间分摊小型固定解码工作区时能实现最大容量。在多 GPU 或设置了较大 --gpu-memory-utilization 的环境中,这是自动完成的。但在单 GPU 预算紧张时,vLLM 的 CUDA-graph 内存分析器可能会过度预留内存,从而缩小 KV 池。此时建议设置 VLLM_MEMORY_PROFILER_ESTIMATE_CUDAGRAPHS=0(或提高 --gpu-memory-utilization)以恢复完整容量。

关键要点

  • 性能突破:相比 FP16,KVarN 提供 3-5 倍 的 KV-cache 容量,吞吐量提升约 1.3 倍,且保持 FP16 级别的精度。
  • 对比 TurboQuant:相比 vLLM 的 TurboQuant,KVarN 在相同容量下,吞吐量提升约 2.4 倍,且精度更高。
  • 零门槛集成:作为 vLLM 的原生后端,无需模型修改,无需校准,仅需添加一个 Flag 即可启用。
  • 量化策略:采用 kvarn_k4v2_g128 预设,即 4-bit Keys 和 2-bit Values,通过 Hadamard 旋转和迭代方差归一化技术,有效缓解量化误差积累。
  • 适用场景:专为 Agentic(智能体)工作和长上下文负载优化,特别适合需要高并发和长上下文的推理服务。
  • 开源协议:基于 vLLM (v0.22.0) 构建,采用 Apache 2.0 许可证开源。
  • 学术支持:基于论文 KVarN: Variance-Normalized KV-Cache Quantization Mitigates Error Accumulation in Reasoning Tasks (arXiv:2606.03458)。

意义与影响

KVarN 的推出标志着 KV-cache 量化技术从“理论可行”向“生产就绪”迈出了关键一步。长期以来,量化技术往往需要在精度、速度和容量之间做出妥协,导致其在实际生产环境中难以大规模部署。KVarN 通过创新的方差归一化和旋转技术,成功打破了这一权衡,实现了高精度、高吞吐和高容量的“不可能三角”平衡。

对于 LLM 服务提供商和开发者而言,KVarN 意味着:

  1. 更低的硬件成本:通过增加 KV-cache 容量,可以在相同硬件资源下支持更长的上下文窗口或更多的并发请求,显著降低推理成本。
  2. 更高的服务效率:优于 FP16 的吞吐量意味着更快的响应速度和更高的系统利用率。
  3. 简化的部署流程:免校准、即插即用的特性降低了技术门槛,使得优化长上下文推理变得更加容易。

随着长上下文模型和 Agent 应用的普及,KVarN 为解决显存瓶颈和推理延迟问题提供了强有力的工程化方案,有望成为 vLLM 生态中重要的加速后端之一。

查看原文 →github.com