【NeurIPS 2023】H2O:重型命中者预言机——大模型高效生成式推理的 KV Cache 驱逐策略|从大模型推理系统优化视角

摘要

本文解读 NeurIPS 2023 论文《H2O: Heavy-Hitter Oracle for Efficient Generative Inference of Large Language Models 》。该论文提出H2O(重型命中者预言机)KV Cache 驱逐策略 ,通过融合注意力稀疏性观测累加注意力分数幂律分布动态子模最大化理论 ,只保留重型命中者和最近 token,即可用 20% 的 KV 缓存预算 实现 5--10 倍内存缩减、最高 29 倍吞吐提升,且精度与全缓存持平甚至反超。实验覆盖 OPT(6.7B--175B)、LLaMA、GPT-NeoX 三族模型,并证明 H2O 可增强其它稀疏注意力基线、兼容 4-bit 量化、支持 400 万 token 流式输入,为 KV Cache 管理这一长上下文推理核心问题提供了奠基性方案。

视频讲解点击观看 B 站视频

论文基本信息

项目 内容
标题(英文) H2O: Heavy-Hitter Oracle for Efficient Generative Inference of Large Language Models
标题(中文) H2O:重型命中者预言机------大模型高效生成式推理的 KV Cache 驱逐策略
作者 Zhenyu Zhang, Ying Sheng, Tianyi Zhou, Tianlong Chen, Lianmin Zheng, Ruisi Cai, Zhao Song, Yuandong Tian, Christopher Ré, Clark Barrett, Zhangyang Wang, Beidi Chen
机构 德克萨斯大学奥斯汀分校 · 斯坦福大学 · 加州大学 · Meta AI (FAIR) · 卡内基梅隆大学
会议 NeurIPS 2023
arXiv https://arxiv.org/abs/2306.14048
项目网站 https://github.com/FMInference/H2O

背景与动机:KV Cache 为什么成为 LLM 生成的第一内存瓶颈

大语言模型的部署成本长期被三个瓶颈主导:模型参数量、注意力计算的二次方复杂度,以及生成阶段的 KV Cache 显存占用 。前两个被广泛研究,而 KV Cache 的问题在长序列、大 batch 场景下尤为尖锐:一个 300 亿参数的模型,输入 batch 为 128、序列长度 1024 时,KV Cache 就要消耗 180GB 显存------比模型权重本身还大,且随序列长度和 batch 大小线性膨胀。

已有的稀疏注意力方法(Reformer、Performer)主要解决训练/预填充阶段的计算复杂度,缓存依然很大;Sparse Transformer、Multi-Query Attention 虽然能缩小缓存,但直接套用到预训练 LLM 上会显著掉精度;模型压缩路线(SparseGPT、GPTQ)解决的是参数瓶颈,与 KV Cache 是两条独立的线。因此「生成阶段能否只保留一小部分 KV 而保住全部精度」成为一个开放问题。

H2O 的回答来自一条结构洞察:注意力矩阵在推理时超过 95% 稀疏 ,且 token 的累加注意力分数服从幂律分布 ------少数被称为重型命中者(Heavy Hitters)的 token 贡献了绝大部分注意力价值。基于此,H2O 把「驱逐哪些 KV」重新表述为动态子模最大化问题,用贪心驱逐策略在零训练成本下保住精度,并能与量化、offloading 等正交优化叠加。从技术脉络看,H2O 是 KV Cache 驱逐这一研究线的起点:它之后是 StreamingLLM(注意力汇)、SnapKV(逐头投票聚合)、PyramidKV(跨层预算再分配),KV 管理由此成为长上下文推理的标配组件,并进入智能体记忆系统(Agent Memory Survey 将 H2O 归入 Latent Memory-Transform 类)。

研究主线:从问题到结论

图 8:H2O 研究主线(Mermaid 流程图):问题 → 稀疏性/幂律观测 → 重型命中者设计 → 动态子模理论 → 实验验证 → 29× 吞吐结论。

基准/方法设计:H2O 的两条经验观测

H2O 的设计建立在两条可复现的观测上。观测一(稀疏性) :尽管模型是密集训练的,推理时各层注意力矩阵超过 95% 的位置都接近零,这意味着生成下一个 token 不需要访问全部历史 KV。观测二(幂律) :把每个 token 在所有注意力头收到的分数累加,分布服从幂律,少数重型命中者承担绝大部分价值;把它们从注意力中移除,模型精度断崖式下跌(OPT-30B 的 COPA 从 85.00 掉到接近随机水平)。更关键的发现是:局部统计 = 全局统计------只用历史 token 的注意力累加分数选择重型命中者,效果与「看到未来」的全局贪心一致,这让在线驱逐成为可能。

图 1:H2O 框架总览。上排为不同 KV Cache 策略下的注意力图符号示意;左下为 H2O 系统框架;右下为精度-内存权衡曲线,H2O 在 5--10 倍内存缩减下精度几乎不掉。

分类全景:KV Cache 优化策略的三种思路

图 9:KV Cache 优化策略分类(Mermaid 分类图):全缓存基线、稀疏注意力近似(掉点最高 35%)、仅最近 token(同样掉点),H2O 用重型命中者+最近 token 在 20% 预算下持平全缓存。

方法细节:贪心驱逐算法与动态子模理论

H2O 的核心算法非常朴素:缓存预算 k 均分为两部分,一部分放重型命中者、一部分放最近 token;每一步最多驱逐一个 KV。设 S_{i-1} 为当前缓存集合,价值函数 F_{\\mathrm{score}}(T) := \\sum_{s \\in T} o_so_s 为 token s 的累加注意力分数),新 token i 到来时按 u \\gets \\arg\\max_{v} F_{\\mathrm{score}}(S_{i-1} \\cup {i} \\setminus {v}) 驱逐价值最低者。被驱逐的 KV 在后续解码步中不可再访问------这正是驱逐必须谨慎的原因。

图 2:四条关键观测。(a) 各层注意力 >95% 稀疏;(b) 累加注意力分数(红点)呈幂律且与词共现次数(灰线)相关;(c) 移除重型命中者精度崩坏;(d) 局部/全局 H2O 在 20% 预算下均匹配全缓存,仅留最近 token 的 Local 策略大幅退化。

论文把带预算的生成过程形式化为动态子模最大化 (每个时间步价值函数相对当前缓存集合是子模的),并证明贪心构造的集合满足 f(\\tilde{S}*i) \\geq (1-\\alpha)(1-1/e)\\max*{\|S\|=k} f(S) - \\beta------这是经典的 (1-1/e) 型近似保证,为后续所有 KV 驱逐算法提供了统一分析语言。系统实现上,H2O 基于 FlexGen:缓存内存预分配,前 K 槽放重型命中者、后 K 槽放最近 token(循环队列更新),驱逐时直接覆写、零内存搬运;预填充阶段序列长度 \\geq 2K 时即完成首次筛选。

图 3:驱逐算法执行示意。第 4 步生成时新 token 进入候选集合,累加注意力分数最低的第 3 个 token 被驱逐,其 KV 在后续步骤不可再访问。

实验设计与结果:三族模型、八个任务、四种预算

实验覆盖 OPT(6.7B/13B/30B/66B/175B)、LLaMA(7B/13B)、GPT-NeoX-20B,在单张 A100-80GB 上评测;任务横跨 HELM(XSUM、CNN/Daily Mail 摘要)与 lm-eval-harness(COPA、MathQA、OpenBookQA、PiQA、RTE、Winogrande),KV 预算从 4% 扫到 100%。基线包括全缓存、仅最近 token 的 Local 策略、strided/fixed 两种 Sparse Transformer,以及 DeepSpeed ZeRO-Inference、Hugging Face Accelerate、FlexGen 三个推理系统。

主精度结果(OPT-30B,5-shot,20% 预算):

方法 PiQA COPA OpenBookQA Winogrande
Full(全缓存) 80.09 81.00 44.80 71.51
Local(仅最近 20%) 57.94 56.00 28.40 51.30
H2O(20% 预算) 79.22 85.00 43.80 71.67
0-shot Full 78.89 76.00 41.40 70.00

H2O 在 20% 预算下与全缓存差距全部在 1 个百分点以内 ,COPA 甚至反超 4 个点(正则化效应);Local 策略最多掉 37 个百分点 。系统吞吐上,T4 平台 H2O 相比 FlexGen、DeepSpeed、Accelerate 分别提升 3×、29×、29×;A100 上同批量延迟降低 1.1--1.9 倍:

设置(Seq+模型) 指标 FlexGen H2O(20%)
7000+1024, OPT-30B, bs=1 延迟 (s) 57.0 50.4
5000+5000, OPT-13B, bs=4 延迟 (s) 214.2 155.4
2048+2048, OPT-6.7B, bs=24 延迟 (s) 99.5 53.5
2048+2048, OPT-6.7B, bs=24 吞吐 (tok/s) 494.1 918.9
2048+2048, OPT-6.7B, bs=64 吞吐 (tok/s) OOM 1161.0

省下的显存把 batch 从 24 推到 64(FlexGen 已 OOM),吞吐翻倍以上。

图 4:主结果曲线。H2O 在 20% 预算附近与全缓存几乎重合;Local 在 60% 预算以下塌缩(LLaMA-13B@XSUM、LLaMA-7B@CNN/Daily Mail 尤其明显)。

附录中的扩展实验进一步证明 H2O 的鲁棒性:无限长输入 上 H2O 可流式处理 400 万 token (PG-19 困惑度优于 StreamLLM,因为重型命中者保住了中段关键信息,而 StreamLLM 只保首 token 和局部窗口);4-bit 量化 兼容实验中 H2O+Quant 精度不降反升(COPA 84.00、PiQA 78.80),T4 吞吐从 52.1 再涨到 62.3 token/s;TopK 基线增强 实验中叠加 H2 后最高再涨 2 个百分点;生成多样性上 Self-BLEU 从 0.0057 降到 0.0051(LLaMA-7B,XSUM 100 样本),重复更少、更富创造力。

图 5:(上)H2O 流式处理 4M token 输入;(下)PG-19 首个样本上 H2O 困惑度始终低于 StreamLLM。

图 6:生成质量示例。全缓存模型重复冗余句式,Local 策略在极端预算下退化为重复标点,H2O 生成更连贯、更多样的文本。

图 7:零样本与一样本推理下 H2O 在 20% 预算匹配全缓存,Local 显著退化;短序列(100--300 token)任务需 30--40% 预算。

结果对比总结

图 10:结果对比总结(Mermaid 流程图):H2O 相比 DeepSpeed/Accelerate 提升 29×、相比 FlexGen 提升 3×,20% 预算与全缓存差 <1pp,Local 策略掉 37pp。

关键发现

  • 20% 预算即顶满性能:H2O 在 20% KV 预算下 8 个任务与全缓存差距 <1pp,COPA 反超 4 个点,实现 5--10 倍内存缩减。
  • 最高 29 倍吞吐:相比 DeepSpeed ZeRO-Inference 与 Hugging Face Accelerate 提升 29 倍、相比 FlexGen 提升 3 倍(OPT-6.7B/30B,T4);同批量延迟低 1.1--1.9 倍。
  • 更大 batch:省出的显存把 OPT-6.7B 的 batch 从 24 推到 64,吞吐 494.1 → 1161.0 token/s(FlexGen 在该配置 OOM)。
  • 增强而非替代:strided/fixed Sparse Transformer 在 20% 预算下掉点最高 35%,叠加 H2 后全部回升至与全缓存持平;TopK 基线叠加 H2 最高再涨 2pp。
  • 理论保证:KV 驱逐被形式化为动态子模最大化,贪心算法获得 (1-\\alpha)(1-1/e)\\max - \\beta 型近似界,实测局部贪心 = 全局贪心。
  • Oral 信号(ResearchStudio-Idea 框架):命中 P6 重新表述为可解对象(最干净 Oral 信号 \\Delta_{\\mathrm{OR}}=+2.9pp)、P10 异构分解差异化处理(NeurIPS 偏好 +4.7pp)、P2 替换算子三个模式------理论、结构洞察、系统执行三线闭环。

局限性

  • 参数瓶颈未解决:生成吞吐仍受 MLP 权重加载制约,仅优化 KV Cache 收益有上限;作者展望利用重型命中者在 MLP 块中同样存在的规律设计参数 offloading。
  • 重要性偏差:累加注意力分数天然偏向更早的 token,作者用平均分数替代的实验反而掉点。
  • 驱逐不可逆:一旦误驱逐关键 KV,后续生成无法恢复;短序列、高信息密度任务需要 30--40% 预算才能完全保精度。

常见问题(FAQ)

H2O 的全称和核心思想是什么?

H2O 全称 Heavy-Hitter Oracle(重型命中者预言机)。核心思想是:注意力分数服从幂律分布,少数「重型命中者」token 贡献绝大部分注意力价值,因此 KV Cache 只需保留重型命中者 + 最近 token,用 20% 预算即可匹配全缓存精度。

H2O 和 StreamingLLM 是什么关系?

两者同源(共享作者 Beidi Chen)但机制不同:StreamingLLM 固定保留首 token(注意力汇)+ 局部窗口,适合中段无关键信息的场景;H2O 动态按累加注意力分数识别重型命中者,能在关键信息分散于长文本中段时保住性能,流式实验(4M token)中困惑度优于 StreamLLM。

H2O 需要重新训练模型吗?

不需要。H2O 是纯推理期策略,直接作用在已训练模型的 KV Cache 上,零训练、零微调,可与量化、权重 offloading 等正交优化直接叠加。

为什么 Local(只留最近 token)策略会崩?

生成时当前 token 往往依赖早期出现的关键信息(如任务指令、实体定义),只留最近 token 会把这些信息驱逐;而重型命中者恰恰是历史上被高频注意的 token,保留它们相当于保留了「长期记忆」。

H2O 的理论贡献是什么?

论文把带预算的生成过程形式化为动态子模最大化问题,证明贪心驱逐达到 (1-\\alpha)(1-1/e)\\max_{\|S\|=k} f(S) - \\beta 的近似保证,为后续 KV 驱逐算法提供了统一分析框架。

H2O 的开源代码在哪里?

代码在 https://github.com/FMInference/H2O ,实现基于 FlexGen,可复现 OPT/LLaMA/GPT-NeoX 上的全部实验。

参考链接


给大家推荐一款自用写文献综述、无虚构文献的 AI:

🌟 复旦大学 FudanNLP 团队自研 切问学术

官网:qiewenpaper.com

覆盖 3.6 亿篇可溯源真实中英文文献,能自动整合文献观点生成规范综述

还能挖掘研究创新点、复现实验,配合视频教学,新手快速上手文献综述写作


🍀后记🍀

博客的关键词集中在编程、算法、机器人、人工智能、数学等等,持续高质量输出中。

🌸讨论QQ群白拾的小屋 (750365700)

⭐B站账号白拾的物理AI组会(活跃于知识区和动画区)

✨GitHub主页YhbCode000(工程文件)

相关推荐
thesky1234561 天前
27届大模型面试准备(二十九):长文本推理与高效注意力——FlashAttention、稀疏/线性注意力与推理侧长度外推
大模型·面试准备·flashattention·推理优化·稀疏注意力·长文本推理·长度外推
thesky1234566 天前
27届大模型面试准备(十九):模型量化全攻略——INT8/INT4、GPTQ、AWQ、SmoothQuant 与 KV Cache 量化
大模型·模型量化·gptq·awq·kv cache·smoothquant·int4
HyperAI超神经8 天前
在线教程|ProteinGym 第一名!VenusREM 用「检索增强」预测蛋白突变影响,加速蛋白质设计
人工智能·深度学习·生物信息学·大模型推理·生物医学
Token炼金师1 个月前
服务的骨架:网关、负载均衡、容灾、弹性与多机房 —— 推理系统架构五柱
人工智能·系统架构·llm·负载均衡·容灾·kv cache·prefix cache
Token炼金师1 个月前
幂律的预言:Kaplan 与 Chinchilla 的算力账本 —— Scaling Laws 与最优配比
人工智能·深度学习·大模型架构·kv cache·scaling laws
Soonyang Zhang2 个月前
vllm分析(八)——deepseek v4 Attention (SWA + CSA + HCA)
vllm·推理框架·kv cache
Soonyang Zhang2 个月前
FlexKV 分析(三)——缓存的异步读写操作
推理框架·kv cache
清风lsq3 个月前
大模型-vllm 自投机解码可行性分析
vllm·大模型推理
清风lsq3 个月前
大模型-解析vllm lora 模块
人工智能·vllm·大模型推理