电源连接器

2.5%KV缓存保执大模子90%性能,大模子金字塔式信息集聚格式探秘|开源

发布日期:2024-06-24 20:31    点击次数:105

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缓存压缩在高下体裁习中的利用出路精深,这种程序有可能在受限的内存条目下罢了更各样本的引入。