问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

大语言模型KV缓存压缩策略详解:从Streaming LLM到PyramidKV

创作时间:
作者:
@小白创作中心

大语言模型KV缓存压缩策略详解:从Streaming LLM到PyramidKV

引用
CSDN
1.
https://blog.csdn.net/weixin_46878020/article/details/141065191

随着大语言模型的不断发展,如何处理长文本和多轮对话成为了一个重要问题。本文介绍了几种主流的KV缓存压缩策略,包括Streaming LLM、SnapKV、H2O和PyramidKV等方法,并对比了它们的优缺点。这些策略在保证模型性能的同时,有效地解决了显存不足的问题,为大语言模型的进一步发展提供了重要参考。

一、Streaming LLM(LCLR 2024)

1.问题

现有的大语言模型无法处理长度过长的文本,比如较长的QA,多轮对话等等。主要的原因有以下两个:

(1)KV会随着文本长度的变长会变得越来越大,GPU的显存是存不了太多的KV;

(2)由于LLM在预训练的时候,文本窗口是有限的(e.g. 每次只能输出4096个token),所以如果输出的内容太长,是进行不下去的。

2.重要性

类似于长文本生成、多轮对话的应用现有的LLM没有一个很好的解决方案

3.现有的解决方案以及局限性

(a)没有任何改变,当文本过长时,会出现显存爆炸的错误;

(b)只保存最后L个token的KV状态,这样虽然能够处理长文本,但是一但初始token的KV被剔除后,性能下降的很厉害;

(c)最后L个token的KV重新算,虽然保证了性能,但是计算很慢。

4.创新方法

文章观察到了attention sink的现象,就是说attention值比较大的都集中在了初始的几个token上面,所以一旦把初始的token剔除掉后,会导致softmax的时候数值的分布发生较大的变化,所以streaming llm采取以下策略:缓存初始4个tokens的KV,再加上最后L个tokens的KV,中间的KV全部剔除。

5.实验结果

与重新计算相比,streaming llm能够提高22倍的性能

6.局限性

streaming llm虽然能够处理很长的文本,但是这个文本的上下文依赖不能很强,如果文本有着很强的上下文依赖关系,很有可能把前面文本的KV剔除掉,从而导致生成文本的正确性收到较大的影响,streaming llm是不具备记忆性的长文本输出系统。

二、SnapKV(2024)

1.问题

现有的一些KV压缩策略都是针对生成部分的内容进行压缩,但prompt的长度往往更长

2.创新方法

prompt可以分为两个部分:前缀部分和观察窗口部分,文章认为,观察窗口对于KV的压缩非常关键,即使前缀部分完全相同,但是观察窗口不同,也会导致attention在prefix中的分布不同。

首先,使用观察窗口中的q和所有k作attention操作,仅对观测窗口作mask操作,然后进行softmax。将前缀部分进行聚集操作,即把他们相加起来,然后再进行一个池化操作,这是为了更好的关注上下文,然后找到前k个值最大的sum_attn所在位置。

最后,将这些位置对应的KV取出,和观测窗口的KV一起构成新的KV

3.实验结果

3.1 Needle-in-a-Haystack

3.2 Decoding Speed and Memory Bound

3.3 Ablation Study of Effectiveness of Pooling

4.局限性

仅对prompts进行了KV压缩,未考虑生成部分的,而且无法处理过长的prompts

三、H2O(2023 NeurIPS)

1.问题

KV太大,显存成了瓶颈

2.创新方法

文章中的两个观察:

  • Q-K的相乘矩阵是一个稀疏矩阵,有95%左右的数据都基本为0,是一个稀疏矩阵;

  • Q-K矩阵中有用的值集中在一个地方

H2O和snapKV基本差不多,都是用后面一部分Q-K矩阵来选择应该保留哪些KV,与snapKV不同的是没有池化这一步

H2O保留的KV主要有两个部分:最后tokens的KV,和前面一些比较重要token的KV。

3.实验结果:

文章用吞吐量来进行衡量实验结果,即每秒钟能够产生多少个tokens

四、PyramidKV(2024)

1.创新方法

文章的一个观察:

较低层的Q-K矩阵数值分布的比较均有,越往上面,数值就越集中,数据出现了聚集现象,这就说明了底层需要的KV cache比较多,顶层需要的比较少,因此每一层的KV cache出现了金字塔分布情况。

PyramidKV仍然完整保留最后一部分tokens的KV cache,对于前面的tokens也是选择最重要的tokens所对应的KV,选择方法与前面方法基本相同,唯一不一样的是每一层的KV cache大小不一样,呈现金字塔分布。

2.实验结果

目前的KV压缩方法,PyramidKV取得的效果最好

总结

前面的4中KV压缩方法,都有一个特点都是完整保留最后一部分tokens的KV值,然后对于前面tokens的KV,不同的方法去选择他们认为比较重要tokens的KV,把这两部分的KV拼接起来便压缩了KV。

最近tokens的KV所有方法都保留了,虽然每种方法都有自己的说法,说明了最近tokens KV的重要性。

共享KV权重

共享权重KV的4个工作

  • Multi-Query Attention(MQA 2019' CoRR)

  • Grouped-Query Attention(GQA 2023' EMNLP)

  • You Only Cache Once(YOCO 2024'CoRR)

  • Cross Layer Attention(CLA 2024'CoRR)

MQA与GQA采用了层内KV共享方法,在多头注意力机制中,每个头的Q都独立使用一对KV,不同头之间的KV权重不共享,MQA则只保留了一个头的KV,所有头的Q都共享一个头的KV,不同头之间的差异只通过Q来反映;GQA则采取一种折中的方法,首先对不同头的Q进行分组,然后每一组Q共享一组KV,如果分组数量为1,则对应的就是MQA,如果分组数量为注意力头数,则对应原始的transformer。

YOCO

CLA

YOCO和CLA都是采用层间共享的方法来对KV进行压缩,YOCO在前1/2层采用了self-attention,这一部分的计算是用来产生KV的,后1/2层采用了cross-attention,不再产生KV,而是使用前1/2产生的KV,CLA并不是选择固定的前几层来产生KV Cache(比如YOCO,使用的是前L/2层),而是将产生KV Cache的层交替分布在模型不同深度的层,然后邻近层复用附近层产生的KV Cache进行Attention计算。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号