VeriCache: Turning Lossy KV Cache into Lossless LLM Inference — 有损压缩草稿,无损输出验收
待复核VeriCache 是一套 LLM 推理框架:允许你用有损的 KV cache 压缩(丢 token、量化)去快速草稿下一串 token,再用完整 KV cache 验收;验收不过就改掉,最终输出与「全程用满血 KV」一致(论文在 greedy / 温度 0 下定义 identical)。
日常类比:考试时先用缩印小抄飞快写草稿,再用原版教材逐行核对——小抄错了就改,交卷内容必须和教材一致。小抄省时间,教材保正确。
它建在 vllm 与 LMCache 上,覆盖长上下文 decode 与远程前缀缓存;统一 compressor 接口可挂多种丢 token / 量化方法,也可与传统投机解码叠用。相对满血 KV,吞吐最高约 4×(长上下文)/ 2×(远程前缀),输出不变。
读者只需记住一句话:压缩负责快,满血负责对;GPU 上常驻的是小抄,原版教材大多放在 CPU/远端,验收时才搬进来。
不理解 VeriCache,下面这些事会对不上:
- 为什么「压缩后 F1 还行」却在代码生成 / tool calling 里功能正确率崩盘——偏差会随解码步数累积
- 为什么只靠有损 KV 服务长输出,会悄悄写出语法错、参数错的「看起来通顺」的答案
- 为什么「像投机解码」还不够:满血 KV 若一直占 GPU,压缩省下的显存与带宽就吐回去了
- 为什么草稿走 HBM、验收走 PCIe/网络时,错峰调度能把两条瓶颈叠在一起跑
- 为什么同一套调度能挂七种压缩器:接口统一后,换 KVzip / TurboQuant 不必重写验收流水线
-
有损草稿 + 满血验收:类比小抄写、教材改。用
KV_comp自回归草稿x个 token,再对这x个位置做一次满血前向;第一个不一致处起改用满血预测,后面草稿作废。压缩方法只当加速器,不当最终裁判。 -
跨资源错峰(cross-resource staggering):类比厨房一边炖汤一边洗碗——草稿吃 HBM 带宽,验收吃互联带宽 + 算力。请求别齐步「全体草稿再全体验收」,而是有人草稿、有人验收,资源互补。
-
拉长验收周期:压缩 KV 与满血同权重、注意力模式接近,一轮常能接受 25–40 个 token(传统小模型草稿往往只有 2–3)。验收越稀,满血 KV 换入次数越少,压缩收益才站得住。
把三点串起来:算法上是「投机式正确性」;系统上是「别让满血 KV 常驻 GPU」;调度上是「用长接受串摊薄换入」。
案例 1:草稿–验收–接受循环(概念)
Section titled “案例 1:草稿–验收–接受循环(概念)”# 伪代码:同一模型权重,两份 KVdraft = []while need_more_tokens: for i in 1..x: # 用压缩 KV 在 GPU 上草稿 draft.append(next_token(KV_comp)) # 并行:从 CPU/远端把 KV_full 换入 preds = verify_forward(KV_full, draft) # 一次前向核对 x 个位置 accept_prefix_until_first_mismatch(draft, preds) resume_from_last_accepted()逐部分解释:
KV_comp常驻 GPU,负责快;KV_full多在 CPU/存储,验收时才换入- 不一致处用满血 token 纠正,保证与满血 greedy 轨迹对齐
- 若
x个全对,还可收下满血给出的「多一个」bonus token,再继续草稿 x越大,越能摊薄每次换入成本,但拒收多了会浪费草稿
案例 2:长上下文——满血 KV 放 CPU
Section titled “案例 2:长上下文——满血 KV 放 CPU”# 每请求:GPU 上只留压缩 KV;满血 KV 在 host DRAMGPU: KV_comp = compress(KV_full) # 例如 1/4 体积CPU: KV_full# 调度:batch 里错开谁在 verify,避免 PCIe 上同时搬多份满血 KV# 直觉:10 个请求、x=30 → 大约每 3 轮草稿才轮到 1 个请求验收逐部分解释:HBM 留给更多请求的压缩 KV,提高 batch;验收时再短暂装入满血 KV。论文例子:草稿吃 HBM,验收吃 PCIe,错峰后峰值显存与链路都不易被「齐步验收」打爆。齐步若一次搬 10 份满血 KV,互联会堵、HBM 会尖峰。
案例 3:远程前缀缓存——慢链路只传压缩 KV
Section titled “案例 3:远程前缀缓存——慢链路只传压缩 KV”# 存储侧有本地 GPU 做验收;远端 serving GPU 只拿压缩 KV 草稿slow_link.send(KV_comp) -> remote_drafterfast_link.load(KV_full) -> local_verifier# 每 x 个草稿 token:远端草稿 ∥ 本地预取满血 KV,再本地 verify# 远端等验收结果时,可切去给 batch 里别的请求继续草稿逐部分解释:瓶颈在慢存储链路时,先传小体积压缩 KV 就能开写;满血 KV 走快链路给本地验收。启动可快约压缩比 c 倍,整体吞吐论文报告最高约 2×。关键是草稿与验收落在不同硬件,天然可流水线。
- 把有损 KV 的输出直接当最终答案:短答可能「看起来还行」,长代码 / 结构化调用里错误会指数级放大。
- 齐步投机(全体草稿再全体验收):PCIe/网络瞬间挤满,满血 KV 在 HBM 里排队空等,压缩收益被吃光。
- 验收周期太短:每 2–3 token 就换入满血 KV,等于没享受「长接受串」;应随接受率拉长
x。 - 只看 token 级指标(F1/ROUGE):功能正确率可能已接近 0,指标仍漂亮——验收任务要用语法/参数级度量。
- 把 VeriCache 当成「又一个压缩算法」:它不替代压缩,而是给已有压缩器加一层无损外壳;没有 compressor,它无从草稿。
适用 vs 不适用
Section titled “适用 vs 不适用”适用:
- 长上下文 decode,显存/HBM 带宽被满血 KV 卡住,又能接受「CPU 存满血、GPU 跑压缩」
- 远程前缀缓存,慢链路传全量 KV 太贵,想先传压缩稿再本地验收
- 代码生成、tool calling、结构化输出等必须与满血轨迹一致的场景
- 已有丢 token / 量化压缩器,想通过统一接口变成「无损加速层」
不适用:
- 短输出、开放生成,且能接受有损分布——直接压缩可能更简单
- 无法把满血 KV 放 host/远端、或互联极慢导致验收永远盖不住草稿
- 需要与满血采样分布在非 greedy 设定下「感觉一样」但又不做标准拒绝采样扩展时(论文主声明在 greedy identical)
- 压缩器与满血注意力差极大、接受率极低——长草稿窗口会变成频繁拒收
历史小故事(可跳过)
Section titled “历史小故事(可跳过)”- KV 变大:上下文冲到十万~百万 token,单请求带宽与多请求 batch 都被 KV 体积卡住。
- 有损压缩潮:丢 token(H2O、SnapKV、DuoAttention、KVzip…)与量化(KIVI、KVQuant、TurboQuant、CacheGen…)把体积砍到约 2–5×,但输出会漂。
- 投机解码近亲:MagicDec / QuantSpec / SparseSpec 等用稀疏或压缩 KV 草稿,但常把满血 KV 留在 GPU,压缩的系统收益有限。
- VeriCache(2026):把满血 KV 挪出 GPU、错峰换入,并统一多种压缩器;基于 vLLM + LMCache 做出「吞吐上去、输出不变」。
- 对照记忆:若你只记得「投机解码」,请再加一条——这里的草稿与验收共用同一套权重,系统收益来自资源错峰,不只来自「小模型猜、大模型改」。
- 压缩可以当草稿引擎,不必当最终分布——正确性交给满血验收
- 系统瓶颈要配对:HBM-bound 草稿 ∥ 互联-bound 验收,比齐步投机更吃得开硬件
- 接受串长度是杠杆:同模型压缩草稿能拉到几十 token,才摊得起满血换入
- 指标要对齐任务:功能正确率崩了,F1 高也没用
- 接口比单点算法更值钱:统一 compressor 后,新压缩方法可以「即插即加速」而不改调度
- 论文 HTML:VeriCache arXiv:2605.17613
- Microsoft Research 介绍页:VeriCache publication
- Hugging Face Papers:paper page
- 相关系统:vllm —— VeriCache 的 serving 底座之一
- 相关笔记:paged-attention —— KV 分页与显存管理的前序
- 相关笔记:oscar-int2-kv —— 另一路「把 KV 压得很狠」的量化思路
- 相关笔记:eagle —— 传统投机解码(小模型/头草稿)对照阅读
- vllm —— VeriCache 实现所基于的高吞吐推理引擎
- paged-attention —— 分页 KV 如何让长上下文装进 GPU
- paged-attention-vllm —— vLLM 侧 PagedAttention 工程落地
- oscar-int2-kv —— INT2 KV 量化;可想象成 VeriCache 可挂的一类 compressor
- kv-fold —— 另一条长上下文路线:不压缩,而把 KV 当 fold 累加器
- eagle —— 投机解码家族;VeriCache 借用「草稿+验收」但系统约束不同
- prefix-cache-policy-2026 —— 前缀缓存策略;与远程 prefix 场景对照
(暂无反向链接)