新智元報道
編輯:定慧
【新智元導讀】英偉達聯合港大提出全新Fast-dLLM,模型跳脫自回歸生成方式,借助KV Cache和并行解碼,將Diffusion LLM推理加速達27.6倍。
如果你看過電影《降臨》,一定記得「七肢桶」在空氣中揮灑墨霧、一次性寫下整圈「七文」的震撼場景——
那是一種把整句話、整段意思同時呈現出來的語言:沒有先后順序,開頭和結尾在同一瞬間顯現,仿佛作者早已知曉過去和未來,一并落墨。
Diffusion LLM就像大模型世界里的「七肢桶」——它不像自回歸模型,按字面順序逐詞輸出,而是把整條句子先「浸」進噪聲,然后在一連串并行去噪的瞬間,讓所有Tokens一起成形,上下文和前后邏輯全都同時握在手里。
雖然聽起來很美好,但是Diffusion LLM天然有個問題,那就是輸出速度慢——主要是由于原生Diffusion因無KVCache,并且需要多次迭代。
英偉達、港大和麻省理工的研究者們提出了全新的Fast-dLLM框架,讓Diffusion LLM得到27.6倍加速!
論文地址:https://nvlabs.github.io/Fast-dLLM/paper/fast_dllm.pdf
這是一張來自Fast?dLLM論文的綜合性能圖,分成(a)、(b)、(c)三個小面板,直觀展示了在GSM8K推理任務上,給擴散大模型(LLaDA?和?Dream)外掛KVCache與并行解碼之后,速度飆升而準確率幾乎不掉。
首先是推理吞吐量和準確率(a),可以看到在推理速度幾倍數的加快的同時,準確率幾乎沒有下降,同時使用KVCache和并行解碼的LLaDA速度達到最快;加速后,吞吐量大幅右移,而準確率幾乎保持平行下降1?%以內——說明「跑得快」且「答得準」。
其次是每步生成Token數和吞吐量(b),原生LLaDA只能1?token/step;KV?Cache不改變解碼步長,并行解碼把解碼步長提到~3?tokens/step,不過需要注意的是并行單獨用時解碼步長變大,卻因仍需全序列注意力,吞吐只到16.5?token/s。
而兩者疊加則解碼步長大,且延遲小,吞吐沖到54.4?token/s。只有把KVCache和并行解碼一起用,才能把速度優勢最大化。
最后是端到端推理時間拆解,純并行時靠減少步數提速?13.3倍,PrefixCache(只存提示)再快?1.4倍,DualCache(提示+已確定塊都緩存)再快?2.1倍,累計提速27.6?×!
而并行解碼顯著加快了生成過程,同時保持了序列的質量。基于置信度感知的并行解碼方法,該方法允許在每一步中并行解密多個可信的 token。顏色圖例表示每個token的生成步驟。
左:標準解碼(LLaDA)。右:置信度感知的并行解碼。
只要給擴散大模型插上「KVCache+并行解碼」兩扇「渦輪」,就能把推理速度最高提升近30?倍,同時幾乎不犧牲推理正確率,僅僅從77.3%下降到76%,幾乎可以忽略。
在詳細解釋Fast-dLLM是如何做到前,先從最基本的擴散LLM說起。
擴散(Diffusion)LLM是什么?
大語言模型(LLM)的自回歸架構(AR,autoregressive)大放異彩,ChatGPT等大模型在各領域表現出強大能力。
自回歸模型采用Transformer解碼器逐詞順序生成文本,每個詞都條件依賴于前面已生成的詞。
這種方式保證了語義的連貫性,但無法并行生成,生成長序列時速度受到限制。
此外,一旦早期生成出錯,后續文本往往難以糾正錯誤。
擴散大語言模型(Diffusion LLM,簡稱DLM)則是一種新興的生成范式,受到圖像擴散模型的啟發,引入了逐步噪聲銷毀和去噪的過程。
簡單來說,Diffusion LLM并非從左到右逐詞生成,而是先將一句話的部分Tokens隨機掩蓋或替換為噪聲標記,然后訓練模型學習如何一步步還原這些被破壞的詞。
整個句子的所有Tokens可以在每個擴散步驟中同時得到更新,模型通過多次迭代逐漸將噪聲句子還原為連貫文本。
這種并行生成使模型擁有雙向注意力:在去噪過程中,任一位置的詞都能參考句子中左右兩側的上下文,有助于全局一致性和長程依賴的處理。
同時,擴散過程允許全局糾錯:模型可以在后續迭代中修改任何位置的錯誤Tokens,而不像自回歸模型那樣一旦生成就固定下來。
聽起來很美好,然而擴散LLM也有明顯短板。
首先,推理速度是個問題:擴散模型通常需要多次迭代(例如幾十到上百步)才能得到最終結果,每一步都要對整句做一次前向計算,計算開銷巨大。
相比之下,自回歸模型雖然一次只能生成一個詞,但不用重復整個序列的計算,并且可以利用KVCache來復用以往步驟的計算結果,大幅加速推理。
KV Cache(Key-Value Cache)是一種在自回歸Transformer中常用的加速技巧:緩存過去每個生成步的注意力鍵/值張量,使得下一步推理時無需重復計算先前tokens的注意力表示。
這使得自回歸模型在長文本生成時效率大大提升。
然而,擴散模型由于并非單向生成而是雙向迭代,理論上「下一步」并沒有固定的新token位置,所有位置的表示每步都在變化,因而無法直接沿用自回歸模型的KV Cache策略。
現有的開源擴散LLM(如Dream-7B、LLaDA-8B等)在推理速度上明顯慢于同規模的自回歸模型,主要原因正是無法使用KV Cache以及并行解碼時為了加速減少擴散步數會導致生成質量下降。
其次,并行生成的質量問題也困擾擴散LLM。
如果模型在一步中同時生成多個Tokens,由于假設這些詞條件獨立,可能出現不協調的情況——簡單來說,就是各個詞各自看起來概率很高,但組合起來句子不通順,或語義沖突。
自回歸模型一次只生成一個詞并將其并入上下文,確保了下一個詞能看到之前所有已生成Tokens,極大降低了不一致的風險。
而擴散模型每一步對所有未確定Tokens并行預測,它打破了Tokens之間的順序依賴,在減少迭代步數以求加速時,這種不一致現象會更加明顯。
條件獨立假設成了并行擴散生成質量下降的罪魁禍首——模型在并行預測多個Tokens時,無法充分確保它們之間邏輯和語法的一致性。
Diffusion LLM提供了有別于自回歸的新思路:并行+雙向帶來潛在效率和效果優勢,但要真正與自回歸LLM競爭,其推理加速和生成質量穩定性必須改進。
Fast-dLLM的工作正是在這種背景下提出:無需重新訓練,通過巧妙的緩存近似和新并行解碼策略,大幅提升擴散LLM的推理速度,同時保持生成質量不打折扣。
Fast-dLLM方法論
Fast-dLLM構建于MaskedDiffusionModel(MDM)架構之上,旨在實現高效且高質量的序列生成。
為了加快推理速度,該方法融合了兩項核心策略:一是通過Key-Value(KV)緩存(Cache)實現高效注意力計算,二是基于預測置信度的并行解碼方案。
具體來說,采用基于塊的解碼方式,并結合KV Cache,以便在多個解碼步驟中重復使用注意力激活,從而顯著減少冗余計算。
在每個塊內部,進一步提出了「置信度感知并行解碼」方法,根據預測的置信度分數選擇性地更新token,提高效率的同時保持輸出質量。
通過整合上述策略,Fast-dLLM顯著加快了MDM的推理速度,同時對生成性能的影響幾乎可以忽略。
用于塊級解碼的Key-Value緩存機制
如圖所示,采用塊級解碼策略來支持Key-Value(KV)緩存的使用。
在推理開始時,會首先對提示(prompt)計算并存儲KV Cache,該緩存在Block0的整個解碼過程中都會被重復使用。
在每個塊內部,同一個緩存可用于多個解碼步驟。在一個塊解碼完成后,我們會對所有token的緩存進行統一更新(而非僅更新新生成的token)。
該緩存更新可以與解碼步驟同步進行,因此相比不使用緩存的方式,幾乎不會帶來額外的計算開銷。
這種做法形成了一種近似的解碼過程,這是由于掩碼擴散模型中的注意力機制使用了全局注意力所致。
這種近似KV Cache方法的有效性來源于一個關鍵觀察:在推理過程中,鄰近步驟之間的KV激活值具有高度相似性。
如圖所示,在圖a中紅色方框區域標出了一個塊內的相似性評分,這些評分普遍接近1,說明在塊內解碼時前綴的key和value之間差異很小,因此可以安全地重復使用緩存而不會對準確性造成明顯影響。
此外,還實現了一種雙向版本的KV Cache機制,稱為DualCache。該機制不僅緩存前綴token,還緩存后綴token。根據塊級解碼方案,后綴token全部是被掩碼的token。
DualCache能進一步加快推理速度。圖3b中的紅色方框區域進一步驗證了這一點:在塊內解碼過程中,后綴部分的key和value差異也非常小,幾乎可以忽略。
這意味著不僅可以安全地重用前綴緩存,對于后綴緩存也同樣適用,從而實現更高效的解碼過程。
這樣,模型在處理后面的塊時,可以直接復用前面已經完成塊的計算,不必每次迭代都對整句所有位置計算完整注意力。
相比每次全序列擴散,這種「分塊逐段生成+緩存」的方法顯著減少了每步計算量。
報告在7B參數的Dream模型上,單靠這種塊級KVCache策略就實現了最高約5倍的加速,而精度損失可以控制在很小范圍內。
并行解碼新策略:置信度感知
Fast-dLLM引入了一種置信度感知的并行解碼方案,而非按順序逐個解碼頭部。
在每一步中,并行地僅對置信度高于閾值的頭部進行解碼,而置信度較低的頭部則保持掩碼狀態,留待后續步驟處理。
這種選擇性方法在解碼效率與輸出質量之間實現了有效平衡,并且理論上得到了我們的并行解碼定理對高置信度預測的支持。
與LLaDA等方法選擇固定數量的Token進行解碼不同,Fast-dLLM根據Token的預測置信度(例如,最大Softmax概率)來動態選擇哪些Token可以安全地同時解碼。
只有置信度超過特定閾值的Token才會在當前步驟被解碼,其余Token仍保持MASKED狀態,并在后續步驟中重新考慮。
如果所有Token的置信度都低于閾值,模型會強制解碼置信度最高的Token,以確保生成過程前進并避免死循環。
顯著的速度提升與精度保持
Fast-dLLM在多個開源擴散LLMs(LLaDA3和Dream4)以及GSM8K、MATH、HumanEval、MBPP等四個主流基準測試上進行了充分實驗。
實驗結果表明,Fast-dLLM持續實現了數量級的速度提升,同時對精度影響極小甚至沒有。
單獨引入KV Cache機制通常能帶來2×到3.6×的速度提升。
單獨應用并行解碼策略也能進一步加速,對于特定設置,速度提升可達4×–6×22。
當這兩種技術結合時,改進更為顯著。
在LLaDA上,結合KV Cache和并行解碼方法可以將吞吐量提高高達11×(GSM8K,長度512)和9.2×(MBPP,長度512),相對于標準基線。
在Dream-Base上,最大的吞吐量提升出現在MBPP(長度512時為7.8×)和GSM8K(長度512時為5.6×)。
這表明兩種方法不僅單獨有效,而且高度互補。
Fast-dLLM在較長的生成長度(1024)下實現了更高的加速(高達27.6×),例如在8-shot的GSM8K任務上。
重要的是,這些效率提升幾乎沒有犧牲精度。
在所有基準測試和設置中,加速方法的精度保持在基礎模型精度的1-2個百分點以內,在某些情況下甚至略有提高。
更長的序列,在Few-shot和代碼生成場景中很常見,由于有更大的緩存重用和批量計算機會,從Fast-dLLM的技術中受益更多。
Fast-dLLM的改進適用于不同的模型架構(LLaDA和Dream)和任務類型(數學推理、程序合成等),證明了其通用性和實用價值。
研究人員還進行了大量消融實驗,以深入理解Fast-dLLM中不同組件對性能的具體影響,重點分析了預填充長度、生成長度、緩存機制的不同版本、緩存塊大小以及置信度閾值等因素。
預填充長度與生成長度對加速效果的影響
從表3和表4可以看出,預填充長度(n-shot)和生成長度都會顯著影響整體加速效果。
具體來說,當預填充從5-shot增加到8-shot時,兩種KV Cache版本的加速比都有顯著提升(例如,在生成長度為1024的情況下,DualCache的加速比從19.6×提高到27.6×)。
同樣地,生成長度越長,緩存的重復利用潛力越大,加速效果越明顯。特別是在8-shot設置下,DualCache的加速比從生成長度256時的9.4×,提升到了生成長度1024時的27.6×。
這一現象符合理論預期:在更長序列上攤銷計算成本,效率提升更為顯著。
總的來說,Fast-dLLM作為對擴散LLM的一次重要加速突破,讓我們看到了非自回歸大模型的潛力。
在推理效率不再成為障礙后,擴散LLM所具備的并行生成、全局一致性等優點有望被充分發揮。或許下一個時代的LLM,將不僅僅是自回歸獨領風騷,而是多種范式百花齊放。
Fast-dLLM通過引入為雙向擴散模型量身定制的塊級近似KV Cache機制和解決并行解碼中依賴性問題的置信度感知并行解碼策略,成功克服了擴散LLMs在推理效率方面的關鍵限制。
廣泛的實驗結果證明,Fast-dLLM實現了高達27.6倍的加速,同時精度損失極小。這為在實際應用中部署擴散LLMs作為自回歸模型的有力替代方案鋪平了道路。
有理由期待,在不遠的將來,會出現更多類似的創意方法,進一步縮小不同模型范式之間的差距,推動大模型技術走向新的高度。
參考資料:
https://nvlabs.github.io/Fast-dLLM/
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.