2.5%KV缓存保执大模子90%性能,大模子金字塔式信息集聚格式探秘|开源
用KV缓存加快大模子的显存瓶颈,终于迎来糟蹋。
北大、威斯康辛-麦迪逊、微软等合资团队提议了全新的缓存分派决议,只用2.5%的KV cache,就能保执大模子90%的性能。
这下再也无谓惦念KV占用的显存容量过高,导致显卡不够用了。
该程序名为PyramidKV,顾名想义,在KV缓存压缩的经过中融入了金字塔型的信息集聚样貌。
在内存受限的情况下,PyramidKV推崇颠倒出色,既保留了长高下文领略智商,又显贵减少了内存使用。
目下,PyramidKV关连代码一经在GitHub开源。
引入金字塔信息集聚样貌
跟着模子尺寸的增大,推理需要的时期越来越多。KV cache四肢推理加快的要津时期,通过缓存之前的解码要领入网算出的Transformer的K和V矩阵减少后续解码时期。
可是,跟着序列长度增大,需要缓存的KV cache会快速增长,占用多量显存。针对这一问题,之前的使命设策略略是对KV cache进行压缩。
骨子上,长文本的推理加快和显存从简四肢一个蹙迫的话题,这波及到平庸的大模子卑鄙利用,比如检索增强生成(Retrieval-Augmented Generation)、高下体裁习(In-Context Learning)受到平庸情切。
KV cache及KV cache的压缩能否灵验帮生长文本罢了推理加快成为广受情切的接洽标的。
罗致均一压缩策略,是最好决议吗?
传统压缩程序的一个共同性格是,均对每个Transformer层使用相似的KV cache压缩配置,使用相似的程序压缩到相似的长度。
但PyramidKV团队发现,对KV cache进行极致压缩情况下上述程序的推崇,发现当超长文本压缩到极致小的KV大小时(从32k 长度压缩到64,即保留0.2%的KV cache长度)时,会面对严重的性能平缓。
于是作家提议了疑问:对每个Transformer层将KV cache压缩到相似的大小是否为最优决议?
为了回话上述问题,接洽团队对大模子进行检索增强生成的机制进行深化分析。
作家接洽了Llama模子进行多文档问答的逐层重见解争,发现了重见解层中的金字塔形信息集聚格式(Pyramidal Information Funneling)的存在:
在模子的低层(举例第0层)中,重见解得分呈现雷同均匀漫衍,这标明模子在较低层时从统共可用内容中全局团员信息,而不会优先情切特定的段落。
当编码信息进行到中间层(6-18)时,逐渐改革为聚焦在段落里面的重见解格式 (Localized Attention)。在这个阶段,重见解主要磋商在归并文档内的Token上,标明模子在单个段落内进行了段落里面的信息团员。
这种趋势在表层(24-30)不息并加强,本文不雅察到了“Attention Sink”和“Massive Activation”满足。
在这些层中,重见解机制极地面磋商在少数几个要津Token上,因此只需要保留这些要津Token就能让输出保执一致况且减少显存占用。
这种重见解分派格式,即极高的重见解得分,标明模子已将信息团员到这些要津记号中。
这种重见解满足裸露了大模子对多量复杂的信息的进行编码的机制,最终得到生成准确谜底所需的最要津信息。
字据以上的发现,作家合计之前的使命对统共Transformer层和洽处理是低效的,因此不同Transformer层的重见解荒芜进度并不相通。在低层能不雅察到绝顶郁勃的重见解,而在较高层则不错不雅察到颠倒荒芜的重见解。
因此,在不同层之间使用固定的 KV 缓存大小可能会导致性能欠安。这些程序可能在较高层的荒芜重见解中保留很多不蹙迫的 tokens,而忽略了较低层密集重见解中的很多蹙迫的 tokens。
每层重见解性格不同,分层施策才是正解
于是,作家聘请了通过基于重见解格式动态分派缓存预算来擢升压缩遵守。
具体而言,PyramidKV在信息愈加分散的较低层分派更多的KV cache缓存,而在信息磋商于少数要津tokens的较高层减少KV cache缓存。
一朝为每一层细目了KV缓存预算,PyramidKV在每一个Transformer层中聘请字据重见解聘请要缓存的KV。
临了的部分Token的KV缓存,即Instruction Token,会在统共Transformer层中保留。
字据UIUC、普林斯顿等提议的SnapKV程序,剩余的KV的聘请由从这些Instruction Token中获取的对其他的Token重见解分数来趋奉——
禁受到更高重见解分数的Token被合计与生成经过更关连,因此其KV现象优先保存在GPU缓存中。
2.5%的KV cache,保执90%模子性能
为了评估PyramidKV的推崇,作家使用最新的开源大模子Llama-3-8B-Instruct和Mistral-7B-Instruct,来对PyramidKV和其他程序进行对比。
测试示例以生成体式进行评估,统共任务的谜底均通过预备解码生成,并使用 LongBench来评估PyramidKV在处理长高下文输入任务中的推崇。
LongBench是一个悉心假想的基准测试套件,用于测试话语模子处理长文档和复杂信息序列的智商。
该基准测试旨在对长高下文输入进行多任务评估,包括17个数据集,涵盖单文档问答、多文档问答、选录生成、少样本学习、合成数据和代码生成等任务。
数据集的平均输入长度从1235个到18409个tokens不等,需要多量的内存来解决KV缓存。
关于统共这些任务,作家皆苦守 LongBench推选的圭臬主见。
国法,在64、96、128、256和512个KV cache缓存大小的设定下,PyramidKV在LongBench中均取得了优于baseline的成果。
在此基础上,作家还接洽了两种不同的操作场景——从简内存场景(Memory-Efficient Scenario)和保执性能场景(Performance-Preserving Scenario),诀别用于在内存和模子性能之间进行量度。
PyramidKV在Longbench的多个任务和平均得分上均取得了优于baseline的成果。
值得珍藏的是,PyramidKV在size为128的设定下,在TREC任务(高下体裁习问答挑战)中推崇出显贵优胜的性能,相较于baseline,擢升了20.的ACC国法。
总体而言,PyramidKV仅用12%的KV缓存就能保执完好的性能,况且在各式KV缓存大小的设定下和不同骨干模子中永恒优于其他程序,绝顶是在仅保留约128(0.7%)KV cache缓存的从简内存场景中,其性能上风尤为昭彰。
在具体任务的检查中,PyramidKV在TREC任务(高下体裁习问答挑战)中推崇出显贵优胜的性能,只是使用64的KV cache缓存大小(原始输入是5k长度)就能达到90%的性能。
这标明模子灵验地团员了样本中的任务信息,稀少了在高下体裁习任务上进一步接洽的后劲。
底下的表则展示了PyramidKV使KV缓存的占用减少的情况。作家评估了Llama-3-8B-Instruct的内存阔绰。
具体来说,作家发目下固定批量大小为1、输入长度为8192、模子权重为fp16体式的情况下,PyramidKV在不同缓存大小下显贵减少了KV缓存的内存,还一定进度上保留了任务性能。
为了进一步领略PyramidKV在LongBench上的性能,作家还进行了“大海捞针”推行,将PyramidKV与SnapKV进行比较,况且对比128大小的KV缓存和完好的KV缓存。
在输入序列长度在2000到4000之间的中等高下文情况下,SnapKV在“大海捞针”测试中产生了越来越多的失实案例。
在输入序列长度着手6000的长高下文情况下,SnapKV显贵镌汰了LLMs在评估中的性能。
比较之下,PyramidKV在大多数情况下减轻了这种弱化效应。下图展示了定量国法。分数越高、颜料越浅,默示着检索智商越强。
在该任务的平均得分中,完好KV得分为65.0,PyramidKV得分为62.6,而SnapKV得分为57.3。
此外,作家的推行标明,PyramidKV在高下体裁习(In-Context Learning)的少样本学习任务中显贵优于其他程序。
这标明KV cache缓存压缩在高下体裁习中的利用出路精深,这种程序有可能在受限的内存条目下罢了更各样本的引入。