System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及计算机,尤其涉及一种基于循环缓存的滑动窗口注意力加速方法及装置。
技术介绍
1、随着人工智能技术的发展,特别是深度学习技术的进步,注意力机制(attentionmechanism),因其在处理长依赖关系上的优越性能而逐渐成为自然语言处理、语音识别等
的核心组件。传统的神经网络模型在处理长序列时存在梯度消失或梯度爆炸的问题,同时,随着序列长度的增长,模型计算的复杂度与序列长度的平方成线性关系,这使得大模型在长序列数据上的处理变得非常耗时。
2、近年来,transformer架构通过引入滑动窗口自注意力机制(sliding windowattention,swa),允许模型并行处理固定窗口大小的数据,从而显著提高了训练效率。
3、swa的计算过程如下:
4、
5、其中,为二维矩阵,n1为文本长度,h为隐藏层长度;dk为矩阵第二维度的长度h,kt为矩阵k的转置。在进行softmax处理之前乘以一个掩码(),sa的mask为下三角的矩阵,使得每个文本位置的token只注意到该位置及之前的文本内容。swa的mask与sa不同,存在一个窗口大小(window size),使得attention只关注窗口大小内的文本内容。
6、在大模型(large language model,llm)推理过程了为了减少模型的重复计算,一般会使用kv cache技术对attention中计算的k、v矩阵进行缓存,避免了新请求query推理计算时重复历史kv矩阵的计算,降低模型推理
7、然而现有的一些kv cache技术对于swa计算存在内存的利用率较低、存储效率低下的问题。
技术实现思路
1、本专利技术提供一种基于循环缓存的滑动窗口注意力加速方法及装置,以解决现有技术在滑动窗口注意力机制中内存存储效率较低,进而导致大模型对于序列处理速度慢的问题。
2、第一个方面,本专利技术提供了一种基于循环缓存的滑动窗口注意力加速方法,具体包括如下步骤:
3、步骤s1、获取大语言模型(large language model,llm)的参数;
4、步骤s2、根据所述llm的参数,在llm推理计算前为所述llm中的每个解码层(decoder layer)分别分配两个长度为n的环形缓存块(ring buffer cache block,rbcb)krcache和v rcache;
5、步骤s3、在llm输入数据准备阶段,根据输入数据token0,token1,...,tokenk和相应下标(在本申请中,所述“相应下标”表示,对于tokeni,其相应下标为i),为每个token分配k rcache和v rcache的环形缓存位置索引;
6、步骤s4、根据所有token的环形缓存位置索引,将llm推理过程中每个token的k矩阵和v矩阵分别存储在k rcache和v rcache对应(在本申请中,所述“对应”表示,对于tokeni,通过步骤s3为其分配的环形缓存位置索引为indexi,其k矩阵存储在k rcache的第indexi个位置,其v矩阵存储在v rcache的第indexi个位置)的环形缓存位置。
7、其中,n表示滑动窗口注意力(sliding window attention,swa)窗口的大小,n为正整数。
8、其中,rcache表示环形缓存(ring buffer cache)。
9、其中,i、k均为正整数,i大于等于1且i小于等于k。
10、优选地,步骤s2中,所述环形缓存块表示由n个块组成,用于存放k矩阵和v矩阵缓存的缓存块。
11、优选地,步骤s2中,每个解码层的k矩阵和v矩阵各自分配有一个环形缓存块,分别为[kc0,kc1,...,kcn-1]和[vc0,vc1,...,vcn-1]。
12、其中,在本申请中,因为llm生成是个循环推理的过程,每次推理前都需要进行一个输入数据准备或处理,故描述为在llm输入数据准备阶段。llm在循环推理的过程中,第一次推理称为prefill阶段,第二次推理直至结束推理称为decode阶段。
13、优选地,步骤s3中,在llm输入数据准备阶段,根据输入数据token0,token1,...,tokenk和相应下标,为每个token分配k rcache和v rcache索引位置,具体包括如下步骤:
14、步骤s301、在llm第一次推理时(或者可以表示为第一次推理prefill阶段前的数据准备阶段),输入k个token,当j小于等于n-1时,将tokeni的环形缓存位置索引分配为j,并将所述环形缓存位置索引输入索引队列qj;当j大于n-1时,将后n个token的k矩阵和v矩阵进行缓存,环形缓存位置索引分配为[0,1,...,n-1];
15、步骤s302、在llm自回归推理过程中(或者可以表示为decode阶段每次推理前的数据准备阶段),按照下标从小到大每次获取一个token,获取此时索引队列q的最后一个索引n,根据所述索引n重新分配当前token在环形缓存块中的环形缓存位置索引index并将所述环形缓存位置索引index添加到索引队列q中;
16、步骤s303、重复执行步骤s302,直至llm自回归生成结束;
17、其中,j为正整数,j大于等于1且j小于等于k。
18、优选地,步骤s302中,索引队列q长度与k rcache和v rcache长度均相同,所述环形缓存位置索引index的具体计算如下所示:
19、index=(n+1)%n;
20、其中,n为正整数,%表示取余;index为正整数。由上式可知,索引队列q中存储的索引最大为n-1,对应环形缓存的最后一个位置。随着n的增大,环形缓存位置索引index会从0~n-1循环,即新生成token的k矩阵和v矩阵从环形缓存块起始位置存储到缓存块最后一个位置后,然后再从起始位置进行存储,形成循环重复利用缓存空间。
21、优选地,一种基于循环缓存的滑动窗口注意力加速方法,还包括:
22、步骤s5、swa在解码计算阶段,根据所有token的环形缓存位置索引,获取k rcache和v rcache中存储的k矩阵和v矩阵,并通过k矩阵和v矩阵进行计算,形成llm的注意力计算结果。
23、优选地,步骤s5中,每次attention计算过程中,k矩阵和v矩阵的索引均一一对应(例如,,,);
24、从上述计算过程可以看出,每次计算k矩阵和v矩阵的下标均保持一致,attn3(q,k,v)是q3与每对k矩阵、v矩阵计算的和,下标与每对矩阵k和矩阵v计算的顺序无关。因此,在attention计算过程中无需根据输入token的顺序计算,仅需从环形缓存块的起始位置计算即可。
25、其中,在本申本文档来自技高网...
【技术保护点】
1.一种基于循环缓存的滑动窗口注意力加速方法,其特征在于,具体包括如下步骤:
2.根据权利要求1所述的一种基于循环缓存的滑动窗口注意力加速方法,其特征在于,步骤S2中,所述环形缓存块表示由N个块组成,用于存放K矩阵和V矩阵缓存的缓存块。
3.根据权利要求1所述的一种基于循环缓存的滑动窗口注意力加速方法,其特征在于,步骤S3中,在LLM输入数据准备阶段,根据输入数据token0,token1,...,tokenk和相应下标,为每个token分配K Rcache和V Rcache的环形缓存位置索引,具体包括如下步骤:
4.根据权利要求3所述的一种基于循环缓存的滑动窗口注意力加速方法,其特征在于,步骤S302中,索引队列Q长度与K Rcache和V Rcache长度均相同,所述环形缓存位置索引index的具体计算如下所示:
5.根据权利要求1所述的一种基于循环缓存的滑动窗口注意力加速方法,其特征在于,还包括:
6.根据权利要求1所述的一种基于循环缓存的滑动窗口注意力加速方法,其特征在于,具体包括如下模块:
7.一种
8.一种电子设备,其特征在于,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1-5任一项所述的一种基于循环缓存的滑动窗口注意力加速方法。
...【技术特征摘要】
1.一种基于循环缓存的滑动窗口注意力加速方法,其特征在于,具体包括如下步骤:
2.根据权利要求1所述的一种基于循环缓存的滑动窗口注意力加速方法,其特征在于,步骤s2中,所述环形缓存块表示由n个块组成,用于存放k矩阵和v矩阵缓存的缓存块。
3.根据权利要求1所述的一种基于循环缓存的滑动窗口注意力加速方法,其特征在于,步骤s3中,在llm输入数据准备阶段,根据输入数据token0,token1,...,tokenk和相应下标,为每个token分配k rcache和v rcache的环形缓存位置索引,具体包括如下步骤:
4.根据权利要求3所述的一种基于循环缓存的滑动窗口注意力加速方法,其特征在于,步骤s302中,索引队列q长度与k rcache和v rcac...
【专利技术属性】
技术研发人员:岳丹阳,
申请(专利权)人:上海岩芯数智人工智能科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。