NVIDIA开源KVzap:实现近无损2‑4倍KV缓存压缩的最新技术

背景:长上下文的缓存瓶颈
随着生成式模型的上下文长度从几千扩展到十万甚至更高,Transformer 解码器的 Key‑Value(KV)缓存 成为部署的主要阻力。以 Llama‑1 65B 为例,128k token 的缓存在 bfloat16 下已占用约 335 GB,直接限制了批次大小和首 token 延迟。
KVpress 与已有压缩手段
目前业界主要沿 head、value 维度压缩,如 Grouped‑Query Attention、Multi‑Head Latent Attention 等,它们能把缓存压缩 4‑16 倍,但 序列轴 并未被削减。稀疏/检索式 Attention 虽然只读取子集,却仍需为每个 token 分配内存。
KVpress 项目把二十余种剪枝方法统一到同一代码库,并在 Hugging Face 上公开排行榜,为 KV 缓存压缩提供统一评测平台。
KVzap 的核心原理
KVzap 直接借鉴 KVzip+ 的 oracle 评分机制,但用一个轻量的 代理模型 替代昂贵的前置提示评估。每层、每个序列位置的隐藏向量 (h_t) 被送入
- KVzap Linear:单层线性映射
- KVzap MLP:两层 GELU MLP,宽度为模型隐藏维的 (frac{1}{8})
模型输出每个 head 的对数重要度分数,低于阈值的 KV 对被裁剪;最近 128 token 始终保留(滑动窗口)。
训练与评估
- 数据来源:Nemotron 预训练数据集,筛选 27k 条 750‑1250 token 长度的 prompts。
- 采样方式:每条 prompt 随机抽取 500 个位置,每位置收集 1.2M 训练对(共约 1.2M × heads)。
- 监督信号:KVzip+ 生成的 oracle 分数。
- 相关性:MLP 版 Pearson² 在 0.63‑0.77 之间,线性版略低。
实际压缩效果与算力开销
| 模型 | 典型压缩率 | 任务分数损失 |
|---|---|---|
| Qwen‑3‑8B | 2.7‑3.5× | ≤ 0.2 分 |
| Llama‑3.1‑8B‑Instruct | 2.5‑3.3× | ≤ 0.3 分 |
| Qwen‑3‑32B | 2.8‑3.6× | 接近基线 |
在 RULER、LongBench、AIME25 三大长上下文基准上,KVzap 能在保持几乎完整精度的前提下实现 2‑4 倍压缩。额外 FLOPs 仅占注意力投影的 0.02%(线性)或 1.1%(MLP),在长序列场景下可视为微乎其微。
应用前景与获取方式
KVzap 只需在注意力计算后调用一次函数,即可得到压缩后的 KV 张量,几行 PyTorch 代码即可集成到现有服务栈。项目已在 kvpress 开源框架中提交,所有检查点、推理脚本均可在 Hugging Face 上免费下载。
要点回顾
- KVzap 用隐藏状态预测 KVzip+ 重要度,实现自适应阈值压缩。
- 在长上下文推理中可省掉 2‑4 倍显存,几乎不影响精度。
- 计算开销 < 1.2% ,易于在生产环境落地。
有兴趣的开发者可阅读原论文(arXiv:2601.07891),并访问 GitHub 仓库获取代码与模型。未来,随着更大上下文需求的普及,KVzap 有望成为 LLM 长文本服务的标准组件。