預(yù)測(cè)token速度翻番!Transformer新解碼算法火了,來(lái)自小羊駝團(tuán)隊(duì)
小羊駝團(tuán)隊(duì)的新研究火了。
他們開發(fā)了一種新的解碼算法,可以讓模型預(yù)測(cè)100個(gè)token數(shù)的速度提高1.5-2.3倍,進(jìn)而加速LLM推理。
比如這是同一個(gè)模型(LLaMa-2-Chat 7B)面對(duì)同一個(gè)用戶提問(wèn)(蘇格拉底采用了哪些方法來(lái)挑戰(zhàn)他那個(gè)時(shí)代的主流思想?)時(shí)輸出回答的速度:
左邊為原算法,耗時(shí)18.12s,每秒約35個(gè)token;
右邊為該算法,耗時(shí)10.4s,每秒約60個(gè)token,明顯快了一大截。
簡(jiǎn)單來(lái)說(shuō),這是一種并行解碼算法,名叫“Lookahead Decoding” (前向解碼)。
它主要利用雅可比(Jacobi)迭代法首次打破自回歸解碼中的順序依賴性 (眾所周知,當(dāng)下大模型基本都是基于自回歸的Transformer)。
由此無(wú)需草稿模型(draft model)或數(shù)據(jù)存儲(chǔ),就可以減少解碼步驟,加速LLM推理。
目前,作者已給出了與huggingface/transformers兼容的實(shí)現(xiàn),只需幾行代碼,使用者即可輕松增強(qiáng)HF原生生成的性能。
有網(wǎng)友表示:
該方法實(shí)在有趣,沒想到在離散設(shè)置上效果這么好。
還有人稱,這讓我們離“即時(shí)大模型”又近了一步。
具體如何實(shí)現(xiàn)?
加速自回歸解碼的重要性
不管是GPT-4還是LLaMA,當(dāng)下的大模型都是基于自回歸解碼,這種方法下的推理速度其實(shí)是非常慢的。
因?yàn)槊總€(gè)自回歸解碼步驟一次僅生成一個(gè)token。
這樣一來(lái),模型輸出的延遲有多高就取決于回答的長(zhǎng)度。
更糟的是,這樣的操作方式還浪費(fèi)了現(xiàn)代GPU的并行處理能:GPU利用率都很低。
對(duì)于聊天機(jī)器人來(lái)說(shuō),當(dāng)然是延遲越低,響應(yīng)越快越好(尤其面對(duì)長(zhǎng)序列答案時(shí))。
此前,有人提出了一種叫做推測(cè)解碼的加速自回歸解碼的算法,大致思路是采用猜測(cè)和驗(yàn)證策略,即先讓草稿模型預(yù)測(cè)幾個(gè)潛在的未來(lái)token,然后原始LLM去并行驗(yàn)證。
該方法可以“憑好運(yùn)氣”減少解碼步驟的數(shù)量,從而降低延遲.
但也有不少問(wèn)題,比如效果受到token接受率的限制,創(chuàng)建準(zhǔn)確的草稿模型也麻煩,通常需要額外的訓(xùn)練和仔細(xì)的調(diào)整等。
在此,小羊駝團(tuán)隊(duì)提出了一種的新的精確并行解碼算法,即前向解碼來(lái)克服這些挑戰(zhàn)。
前向解碼打破順序依賴性
前向解碼之所以可行,是作者們觀察到:
盡管一步解碼多個(gè)新token是不可行的,但LLM確實(shí)可以并行生成多個(gè)不相交的n-grams——它們可能適合生成序列的未來(lái)部分。
這可以通過(guò)將自回歸解碼視為求解非線性方程,并采用經(jīng)典的Jacobi迭代法進(jìn)行并行解碼來(lái)實(shí)現(xiàn)。
在過(guò)程中,我們就讓生成的n-grams被捕獲并隨后進(jìn)行驗(yàn)證,如果合適就將其集成到序列中,由此實(shí)現(xiàn)在不到n個(gè)步驟的時(shí)間內(nèi)生成n個(gè)token的操作。
作者介紹,前向解碼之所以能夠“脫穎而出”,主要是因?yàn)樗?/p>
一不需草稿模型即可運(yùn)行,簡(jiǎn)化了部署。
二是相對(duì)于每步 log(FLOPs) 線性減少了解碼步驟數(shù),最終在單個(gè)GPU、不同數(shù)據(jù)集上實(shí)現(xiàn)快1.5倍-2.3倍的token數(shù)預(yù)測(cè)。
更重要的是,它允許分配更多(大于1個(gè)GPU)的 FLOP,以在對(duì)延遲極其敏感的應(yīng)用程序中實(shí)現(xiàn)更大程度地延遲下降,盡管這會(huì)帶來(lái)收益遞減。
下面是具體介紹:
1、前向解碼的動(dòng)機(jī)Jacobi在進(jìn)行求解非線性系統(tǒng)時(shí),一并使用定點(diǎn)迭代方法一次性解碼所有的未來(lái)token。
這個(gè)過(guò)程幾乎看不到時(shí)鐘加速。
2、前向解碼通過(guò)收集和緩存Jacobi迭代軌跡生成的n-grams來(lái)利用Jacobi解碼的能力。
下圖為通過(guò)Jacobi解碼收集2-grams,然后驗(yàn)證并加速解碼的過(guò)程。
3、每個(gè)解碼步驟有2個(gè)分支:
前向分支維護(hù)一個(gè)固定大小的2D窗口,以根據(jù)Jacobi軌跡生成n-grams;驗(yàn)證分支驗(yàn)證有希望的n-grams。
作者實(shí)現(xiàn)了二合一atten mask,以進(jìn)一步利用GPU的并行計(jì)算能力。
4、前向解碼無(wú)需外部源即可立即生成并驗(yàn)證非常多的n-grams。這雖然增加了步驟的成本,但也提高了接受更長(zhǎng)n-grams可能性。
換句話說(shuō),前向解碼允許用更多的觸發(fā)器來(lái)減少延遲。
5、作者檢查了flops vs 延遲減少之間的縮放行為,并找到了縮放法則:
當(dāng)n-grams足夠大時(shí)(比如11-gram),以指數(shù)方式增加未來(lái)的token猜測(cè)(即窗口大小)可以線性減少解碼步驟數(shù)。
作者介紹
本方法作者一共4位,全部來(lái)自小羊駝團(tuán)隊(duì)。
其中有兩位華人:
傅奕超以及張昊,后者博士畢業(yè)于CMU,碩士畢業(yè)于上交大,現(xiàn)在是加州大學(xué)圣地亞哥分校助理教授。