砍掉70%内存!陈丹琦团队破解LLM长文本瓶颈


砍掉70%内存!陈丹琦团队破解LLM长文本瓶颈

仅用于站内搜索,没有排版格式,具体信息请跳转上方微信公众号内链接

大型语言模型(如GPT-4、Llama3)能总结整本书、分析数万行代码,但这种能力需要“记忆”大量上下文信息。想象你在读一本小说:若要理解结局,可能需要反复翻看前面的关键情节。模型同样如此——它通过一种叫KV缓存的机制存储已读内容(Key-Value键值对),以便生成后续文本时快速查询。
问题在于,KV缓存占用内存巨大。例如,Llama3处理12万字的输入(约一本书),KV缓存就需42GB显存!现有优化方法如“丢弃不重要的键值对”存在局限:
比较不公平:有的优化编码阶段,有的优化解码阶段;
指标不统一:有的看注意力稀疏度,有的看缓存大小;
忽略时间成本:未考虑内存占用的持续时间。
陈丹琦团队提出KV足迹(KVfootprint)作为统一标尺,并推出两项突破性技术:分块驱逐与PruLong训练,在128K长文本任务中最高降低70%内存,性能损失仅10%。
论文:CacheMeIfYouCan:HowManyKVsDoYouNeedforEffectiveLong-ContextLMs?
链接:https ://arxiv. org/pdf/2506. 17121
代码:https ://github. com/princeton-pli/PruLong
传统方法仅关注某一时刻的缓存大小(如“峰值内存”),但实际推理包含多阶段:
预填充:一次性编码整个输入(如100K词提示语),需存全部KV;
解码:逐词生成输出,逐步读取/更新缓存;
分块预填充:超长文本需分批处理(如每次读8K词)。
KV足迹的创新在于引入时间维度:
将每个KV条目在内存中的存活时间累加,再除以标准模型的缓存总量(图1示例)。
公式本质:所有时刻未丢弃的数量标准模型总数意义:如同计算“内存占用的总租金”,早丢弃条目就能省更多钱。
关键KV足迹更实用:它找到性能≥90%全缓存时的最小足迹值(红线阈值)。例如足迹46%表示:只需46%的内存成本,就能获得90%+的原始性能。
论文将现有技术分为四类:
代表方法
优点
缺点
动态稀疏
MoBA,NSA
减少计算量
预填充稀疏
MInference
加速编码
不减少内存,解码无效
StreamingLLM
内存固定,兼容分块
可能遗忘远距信息
PyramidKV
解码期内存低
填充后驱逐(如PyramidKV)的致命伤:
它们在预填充阶段需保留全部KV(如100K条),直到最后才丢弃部分条目。这导致短生成任务(如问答)的“内存足迹”接近100%——因为昂贵的内存已在预填充期支付。
分块驱逐技术破局:
核心思想:每处理完一个文本块(如8K词),立即丢弃该块中“不重要”的KV,而非等到最后。
技术升级:
注意力分数聚合:对多查询头(如Llama的GQA)计算平均注意力,避免重复存储;
补丁机制:跨块计算全局重要性(如用末尾64词评估),解决局部短视问题。效果:峰值内存降低8倍,足迹从>90%降至35%。
近期性驱逐(如StreamingLLM)只关注最近1K词+开头“锚点词”,但某些注意力头需全局检索(如查找分散的线索)。DuoAttention的启示:
将注意力头分为两类:
检索头:查看全文(需保留全部KV)
流式头:只看局部(可丢弃远距KV)
DuoAttention的混合注意力机制,z∈[0,1]控制头类型
用合成数据(如“大海捞针”任务)训练,忽略真实文本复杂性;
使用连续门控变量,但推理时需离散化(0或1),导致训练偏差。
PruLong的三大突破:
目标函数对齐生成任务:直接优化下一词预测损失(非隐藏状态重建),更契合实际应用;
生成损失
通过拉格朗日约束控制稀疏度t。HardConcrete分布实现梯度流通
自然长文本训练:使用代码库、书籍等数据,捕捉真实长期依赖。
评估框架:
任务:8类21数据集(HELMET+LongProc),覆盖召回、RAG、推理等;
输入/输出长度:输入最长128K词,输出最长10K词;
模型:Llama-3. 1-8B-Instruct;
对比方法:DuoAttention、PyramidKV(分块驱逐)、SnapKV。
核心发现:
PruLong统治召回任务:在“大海捞针”式检索中,关键足迹仅46%,比DuoAttention低12%。
分块驱逐称霸RAG/ICL:补丁版PyramidKV在RAG任务足迹<34%,因可精准保留检索关键信息。
预填充分块大小敏感:
PruLong在32K分块下性能稳健,8K分块时性能可能下降20%(左);
但小分块可进一步降低足迹(右),需权衡取舍。
自然数据至关重要:PruLong用自然文本训练后,召回率91. 4%,远超合成数据版本。
训练阶段的选择:
若在指令微调前应用PruLong(基座模型),可能更适配训练配置(如128词窗口),但对推理分块更敏感;
指令微调后应用更稳健,但依赖模型已有长文本能力。
本文系统解决了长上下文模型的KV缓存膨胀问题:
提出KV足迹:首个兼顾内存量与持有时间的评估指标,破解方法对比困局;
革新分块驱逐:改造PyramidKV等填充后方法,预填充期即时丢弃KV,峰值内存降8倍;
推出PruLong:通过自然文本端到端训练,让注意力头“专业化分工”,召回任务内存降低12%。
实验证明,两类技术各有所长:PruLong擅长度量召回与结构化任务,分块驱逐称霸RAG与少样本学习。未来需提升方法鲁棒性,并探索与量化、架构设计的协同优化。
进技术交流群请添加AINLP小助手微信(id:ainlp2)
请备注具体方向+所用到的相关技术点
关于AINLP
AINLP是一个有趣有AI的自然语言处理社区,专注于AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括LLM、预训练模型、自动生成、文本摘要、智能问答、聊天机器人、机器翻译、知识图谱、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLP小助手微信(id:ainlp2),备注工作/研究方向+加群目的。


文章作者: ZejunCao
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ZejunCao !
  目录