本發(fā)明涉及計(jì)算機(jī),尤其涉及一種基于循環(huán)緩存的滑動(dòng)窗口注意力加速方法及裝置。
背景技術(shù):
1、隨著人工智能技術(shù)的發(fā)展,特別是深度學(xué)習(xí)技術(shù)的進(jìn)步,注意力機(jī)制(attentionmechanism),因其在處理長依賴關(guān)系上的優(yōu)越性能而逐漸成為自然語言處理、語音識(shí)別等技術(shù)領(lǐng)域的核心組件。傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)模型在處理長序列時(shí)存在梯度消失或梯度爆炸的問題,同時(shí),隨著序列長度的增長,模型計(jì)算的復(fù)雜度與序列長度的平方成線性關(guān)系,這使得大模型在長序列數(shù)據(jù)上的處理變得非常耗時(shí)。
2、近年來,transformer架構(gòu)通過引入滑動(dòng)窗口自注意力機(jī)制(sliding?windowattention,swa),允許模型并行處理固定窗口大小的數(shù)據(jù),從而顯著提高了訓(xùn)練效率。
3、swa的計(jì)算過程如下:
4、
5、其中,為二維矩陣,n1為文本長度,h為隱藏層長度;dk為矩陣第二維度的長度h,kt為矩陣k的轉(zhuǎn)置。在進(jìn)行softmax處理之前乘以一個(gè)掩碼(),sa的mask為下三角的矩陣,使得每個(gè)文本位置的token只注意到該位置及之前的文本內(nèi)容。swa的mask與sa不同,存在一個(gè)窗口大小(window?size),使得attention只關(guān)注窗口大小內(nèi)的文本內(nèi)容。
6、在大模型(large?language?model,llm)推理過程了為了減少模型的重復(fù)計(jì)算,一般會(huì)使用kv?cache技術(shù)對attention中計(jì)算的k、v矩陣進(jìn)行緩存,避免了新請求query推理計(jì)算時(shí)重復(fù)歷史kv矩陣的計(jì)算,降低模型推理的計(jì)算量,提高模型的推理速度。
7、然而現(xiàn)有的一些kv?cache技術(shù)對于swa計(jì)算存在內(nèi)存的利用率較低、存儲(chǔ)效率低下的問題。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明提供一種基于循環(huán)緩存的滑動(dòng)窗口注意力加速方法及裝置,以解決現(xiàn)有技術(shù)在滑動(dòng)窗口注意力機(jī)制中內(nèi)存存儲(chǔ)效率較低,進(jìn)而導(dǎo)致大模型對于序列處理速度慢的問題。
2、第一個(gè)方面,本發(fā)明提供了一種基于循環(huán)緩存的滑動(dòng)窗口注意力加速方法,具體包括如下步驟:
3、步驟s1、獲取大語言模型(large?language?model,llm)的參數(shù);
4、步驟s2、根據(jù)所述llm的參數(shù),在llm推理計(jì)算前為所述llm中的每個(gè)解碼層(decoder?layer)分別分配兩個(gè)長度為n的環(huán)形緩存塊(ring?buffer?cache?block,rbcb)krcache和v?rcache;
5、步驟s3、在llm輸入數(shù)據(jù)準(zhǔn)備階段,根據(jù)輸入數(shù)據(jù)token0,token1,...,tokenk和相應(yīng)下標(biāo)(在本技術(shù)中,所述“相應(yīng)下標(biāo)”表示,對于tokeni,其相應(yīng)下標(biāo)為i),為每個(gè)token分配k?rcache和v?rcache的環(huán)形緩存位置索引;
6、步驟s4、根據(jù)所有token的環(huán)形緩存位置索引,將llm推理過程中每個(gè)token的k矩陣和v矩陣分別存儲(chǔ)在k?rcache和v?rcache對應(yīng)(在本技術(shù)中,所述“對應(yīng)”表示,對于tokeni,通過步驟s3為其分配的環(huán)形緩存位置索引為indexi,其k矩陣存儲(chǔ)在k?rcache的第indexi個(gè)位置,其v矩陣存儲(chǔ)在v?rcache的第indexi個(gè)位置)的環(huán)形緩存位置。
7、其中,n表示滑動(dòng)窗口注意力(sliding?window?attention,swa)窗口的大小,n為正整數(shù)。
8、其中,rcache表示環(huán)形緩存(ring?buffer?cache)。
9、其中,i、k均為正整數(shù),i大于等于1且i小于等于k。
10、優(yōu)選地,步驟s2中,所述環(huán)形緩存塊表示由n個(gè)塊組成,用于存放k矩陣和v矩陣緩存的緩存塊。
11、優(yōu)選地,步驟s2中,每個(gè)解碼層的k矩陣和v矩陣各自分配有一個(gè)環(huán)形緩存塊,分別為[kc0,kc1,...,kcn-1]和[vc0,vc1,...,vcn-1]。
12、其中,在本技術(shù)中,因?yàn)閘lm生成是個(gè)循環(huán)推理的過程,每次推理前都需要進(jìn)行一個(gè)輸入數(shù)據(jù)準(zhǔn)備或處理,故描述為在llm輸入數(shù)據(jù)準(zhǔn)備階段。llm在循環(huán)推理的過程中,第一次推理稱為prefill階段,第二次推理直至結(jié)束推理稱為decode階段。
13、優(yōu)選地,步驟s3中,在llm輸入數(shù)據(jù)準(zhǔn)備階段,根據(jù)輸入數(shù)據(jù)token0,token1,...,tokenk和相應(yīng)下標(biāo),為每個(gè)token分配k?rcache和v?rcache索引位置,具體包括如下步驟:
14、步驟s301、在llm第一次推理時(shí)(或者可以表示為第一次推理prefill階段前的數(shù)據(jù)準(zhǔn)備階段),輸入k個(gè)token,當(dāng)j小于等于n-1時(shí),將tokeni的環(huán)形緩存位置索引分配為j,并將所述環(huán)形緩存位置索引輸入索引隊(duì)列qj;當(dāng)j大于n-1時(shí),將后n個(gè)token的k矩陣和v矩陣進(jìn)行緩存,環(huán)形緩存位置索引分配為[0,1,...,n-1];
15、步驟s302、在llm自回歸推理過程中(或者可以表示為decode階段每次推理前的數(shù)據(jù)準(zhǔn)備階段),按照下標(biāo)從小到大每次獲取一個(gè)token,獲取此時(shí)索引隊(duì)列q的最后一個(gè)索引n,根據(jù)所述索引n重新分配當(dāng)前token在環(huán)形緩存塊中的環(huán)形緩存位置索引index并將所述環(huán)形緩存位置索引index添加到索引隊(duì)列q中;
16、步驟s303、重復(fù)執(zhí)行步驟s302,直至llm自回歸生成結(jié)束;
17、其中,j為正整數(shù),j大于等于1且j小于等于k。
18、優(yōu)選地,步驟s302中,索引隊(duì)列q長度與k?rcache和v?rcache長度均相同,所述環(huán)形緩存位置索引index的具體計(jì)算如下所示:
19、index=(n+1)%n;
20、其中,n為正整數(shù),%表示取余;index為正整數(shù)。由上式可知,索引隊(duì)列q中存儲(chǔ)的索引最大為n-1,對應(yīng)環(huán)形緩存的最后一個(gè)位置。隨著n的增大,環(huán)形緩存位置索引index會(huì)從0~n-1循環(huán),即新生成token的k矩陣和v矩陣從環(huán)形緩存塊起始位置存儲(chǔ)到緩存塊最后一個(gè)位置后,然后再從起始位置進(jìn)行存儲(chǔ),形成循環(huán)重復(fù)利用緩存空間。
21、優(yōu)選地,一種基于循環(huán)緩存的滑動(dòng)窗口注意力加速方法,還包括:
22、步驟s5、swa在解碼計(jì)算階段,根據(jù)所有token的環(huán)形緩存位置索引,獲取k?rcache和v?rcache中存儲(chǔ)的k矩陣和v矩陣,并通過k矩陣和v矩陣進(jìn)行計(jì)算,形成llm的注意力計(jì)算結(jié)果。
23、優(yōu)選地,步驟s5中,每次attention計(jì)算過程中,k矩陣和v矩陣的索引均一一對應(yīng)(例如,,,);
24、從上述計(jì)算過程可以看出,每次計(jì)算k矩陣和v矩陣的下標(biāo)均保持一致,attn3(q,k,v)是q3與每對k矩陣、v矩陣計(jì)算的和,下標(biāo)與每對矩陣k和矩陣v計(jì)算的順序無關(guān)。因此,在attention計(jì)算過程中無需根據(jù)輸入token的順序計(jì)算,僅需從環(huán)形緩存塊的起始位置計(jì)算即可。
25、其中,在本技術(shù)中,所述索引隊(duì)列q用于存放環(huán)形緩存位置索引;所述環(huán)形緩存位置索引表示k矩陣存放在k?rcache中的位置序號(hào)和v矩陣存放在v?rcache中的位置序號(hào);所述索引隊(duì)列q的最后一個(gè)索引表示索引隊(duì)列q的最后一個(gè)值。
26、第二個(gè)方面,本發(fā)明還提供了一種基于循環(huán)緩存的滑動(dòng)窗口注意力加速裝置,具體包括如下模塊:
27、大語言模型參數(shù)獲取模塊,用于獲取大語言模型(large?language?model,llm)的參數(shù);
28、緩存分配模塊,用于根據(jù)所述llm的參數(shù),在llm推理計(jì)算前為所述llm中的每個(gè)解碼層分別分配兩個(gè)長度為n的環(huán)形緩存塊k?rcache和v?rcache;
29、緩存索引分配模塊,用于在llm輸入數(shù)據(jù)準(zhǔn)備階段,根據(jù)輸入數(shù)據(jù)token0,token1,...,tokenk和相應(yīng)下標(biāo),為每個(gè)token分配k?rcache和v?rcache的環(huán)形緩存位置索引;
30、緩存存儲(chǔ)模塊,用于根據(jù)所有token的環(huán)形緩存位置索引,將llm推理過程中每個(gè)token的k矩陣和v矩陣分別存儲(chǔ)在k?rcache和v?rcache對應(yīng)的環(huán)形緩存位置。
31、其中,n表示滑動(dòng)窗口注意力(sliding?window?attention,swa)窗口的大小,n為正整數(shù)。
32、其中,rcache表示環(huán)形緩存(ring?buffer?cache)。
33、其中,i、k均為正整數(shù),i大于等于1且i小于等于k。
34、優(yōu)選地,緩存分配模塊中,所述環(huán)形緩存塊表示由n個(gè)塊組成,用于存放k矩陣和v矩陣緩存的緩存塊。
35、優(yōu)選地,緩存分配模塊中,每個(gè)解碼層的k矩陣和v矩陣各自分配有一個(gè)環(huán)形緩存塊,分別為[kc0,kc1,...,kcn-1]和[vc0,vc1,...,vcn-1]。
36、其中,n為正整數(shù)。
37、優(yōu)選地,緩存索引分配模塊具體包括如下子模塊:
38、第一緩存索引分配子模塊,用于在llm第一次推理時(shí),輸入k個(gè)token,當(dāng)j小于等于n-1時(shí),將tokeni的環(huán)形緩存位置索引分配為j,并將所述環(huán)形緩存位置索引輸入索引隊(duì)列qj;當(dāng)j大于n-1時(shí),將后n個(gè)token的k矩陣和v矩陣進(jìn)行緩存,環(huán)形緩存位置索引分配為[0,1,...,n-1];
39、第二緩存索引分配子模塊,用于在llm自回歸推理過程中,按照下標(biāo)從小到大每次獲取一個(gè)token,獲取此時(shí)索引隊(duì)列q的最后一個(gè)索引n,根據(jù)所述索引n重新分配當(dāng)前token在環(huán)形緩存塊中的環(huán)形緩存位置索引index并將所述環(huán)形緩存位置索引index添加到索引隊(duì)列q中;
40、第三緩存索引分配子模塊,用于重復(fù)執(zhí)行所述第二緩存索引分配子模塊,直至llm自回歸生成結(jié)束;
41、其中,j為正整數(shù),j大于等于1且j小于等于k。
42、優(yōu)選地,第二緩存索引分配子模塊中,索引隊(duì)列q長度與k?rcache和v?rcache長度均相同,所述環(huán)形緩存位置索引index的具體計(jì)算如下所示:
43、index=(n+1)%n;
44、其中,n為正整數(shù),%表示取余;index為正整數(shù)。由上式可知,索引隊(duì)列q中存儲(chǔ)的索引最大為n-1,對應(yīng)環(huán)形緩存的最后一個(gè)位置。隨著n的增大,環(huán)形緩存位置索引index會(huì)從0~n-1循環(huán),即新生成token的k矩陣和v矩陣從環(huán)形緩存塊起始位置存儲(chǔ)到緩存塊最后一個(gè)位置后,然后再從起始位置進(jìn)行存儲(chǔ),形成循環(huán)重復(fù)利用緩存空間。
45、優(yōu)選地,一種基于循環(huán)緩存的滑動(dòng)窗口注意力加速裝置,還包括:
46、注意力計(jì)算模塊,用于swa在解碼計(jì)算階段,根據(jù)所有token的環(huán)形緩存位置索引,獲取k?rcache和v?rcache中存儲(chǔ)的k矩陣和v矩陣,并通過k矩陣和v矩陣進(jìn)行計(jì)算,形成llm的注意力計(jì)算結(jié)果。
47、優(yōu)選地,注意力計(jì)算模塊中,每次attention計(jì)算過程中,k矩陣和v矩陣的索引均一一對應(yīng)。
48、第三個(gè)方面,本發(fā)明還提供一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,該計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)本技術(shù)第一方面中任一項(xiàng)所述的一種基于循環(huán)緩存的滑動(dòng)窗口注意力加速方法。
49、第四個(gè)方面,本發(fā)明還提供一種電子設(shè)備,所述電子設(shè)備包括:存儲(chǔ)器,存儲(chǔ)有一計(jì)算機(jī)程序:處理器,與所述存儲(chǔ)器通信相連,調(diào)用所述計(jì)算機(jī)程序時(shí)執(zhí)行本技術(shù)第一方面中任一項(xiàng)所述的一種基于循環(huán)緩存的滑動(dòng)窗口注意力加速方法。
50、本發(fā)明與現(xiàn)有技術(shù)相比較,具有如下顯而易見的突出實(shí)質(zhì)性特點(diǎn)和顯著優(yōu)點(diǎn):
51、本發(fā)明提供一種基于循環(huán)緩存的滑動(dòng)窗口注意力加速方法及裝置,解決了現(xiàn)有技術(shù)在滑動(dòng)窗口注意力機(jī)制中內(nèi)存存儲(chǔ)效率較低,進(jìn)而導(dǎo)致大模型對于序列處理速度慢的問題?;诃h(huán)形緩存機(jī)制對含有滑動(dòng)窗口注意力的大語言模型進(jìn)行優(yōu)化,在提高swa中krcache和v?rcache對內(nèi)存的利用效率的同時(shí),還提高了k?rcache和v?rcache數(shù)據(jù)存儲(chǔ)的速度,進(jìn)而提升了整個(gè)大語言模型的推理速度。