LLM新巔峰||北大提出mllm-NPU,賦能1000字/秒的設備端LLM預填充
本文提出了mllm-NPU,這是第一個有效利用設備上神經處理單元(NPU)卸載的LLM推理系統。mllm-NPU的主要設計目標是減少預填充延遲和能耗。它針對主流的僅解碼器的變壓器架構的LLM(例如LlaMA、GPT等)。關鍵思想是最大限度地在移動NPU上執行預填充,以加速整數計算,同時保持在CPU/GPU上執行必要的浮點操作以保持準確性。為了克服上述挑戰并提高NPU卸載效率,mllm-NPU在三個層面上重構了提示和模型:(1)在提示層面:mllm-NPU將可變長度的提示分割成多個固定大小的塊,同時保持數據依賴性;(2)在張量層面:mllm-NPU識別并提取重要的異常值以在CPU/GPU上運行;(3)在塊層面:mllm-NPU根據硬件親和性和對準確性的敏感度將變壓器塊調度到CPU/GPU和NPU。
??https://arxiv.org/pdf/2407.05858??
mllm-NPU系統設計概述
mllm-NPU是一個創新的大型語言模型(LLM)推理系統,專為移動設備上的神經處理單元(NPU)優化。該系統的主要設計目標是減少預填充(prefill)階段的延遲和能耗,同時保持推理精度。mllm-NPU通過在算法和系統設計上的協同優化,有效地解決了LLM架構與現代NPU設計之間的語義差異。
mllm-NPU的工作流程包括準備階段和執行階段。在準備階段,mllm-NPU使用增強的張量級量化算法將LLM量化為W8A8格式,并生成固定長度的分塊共享圖,以高效處理變長提示。在執行階段,mllm-NPU將接收到的提示分割成固定大小的塊,并按照因果關系處理這些塊。這些塊圖會根據它們的數據格式被分割成子圖,并根據硬件親和性和精度敏感性在CPU/GPU和NPU之間進行調度。
三大創新技術詳解
1. 分塊共享圖
mllm-NPU通過引入分塊共享圖來應對動態提示長度的挑戰。這種方法基于對LLM操作符的兩種分類:靜態操作符和動態操作符。靜態操作符如線性層和層歸一化,可以跨不同塊共享;而動態操作符如注意力機制,依賴于塊長度和序列,不能共享。通過這種方式,mllm-NPU將LLM分解為多個子圖,共享子圖一次構建和優化,非共享子圖則針對不同塊單獨構建。這種方法顯著減少了內存開銷,并提高了可擴展性。
2. 影子離群值執行
為了在不犧牲LLM精度的前提下實現NPU友好的張量級激活量化,mllm-NPU采用了影子離群值執行技術。該技術在運行時將具有離群值的激活通道提取到一個更緊湊的張量中,在CPU上執行,并將結果合并回NPU上的原始操作符結果中。這種設計不僅解決了離群值的問題,還優化了內存使用,并減少了CPU和NPU之間的同步開銷。
3. 無序子圖執行
mllm-NPU采用無序子圖執行策略來優化執行效率。通過在塊和子圖級別進行分區后,LLM子圖可以不按塊序列順序執行。這種策略顯著擴大了調度空間,最小化了由于CPU/GPU浮點操作引起的執行泡沫。mllm-NPU利用在線啟發式算法,在保證正確性的前提下,動態選擇執行順序,從而最大化NPU的利用率并最小化CPU/GPU的工作負載影響。
實現與評估
1. 實現
mllm-NPU的實現涉及多個關鍵技術,包括分塊共享圖、陰影異常執行和亂序子圖執行。這些技術共同優化了移動NPU的加載效率,顯著提高了預填充速度和能效。
- 分塊共享圖:通過將變長提示分解為多個固定大小的塊,并為每個塊構建預優化的計算圖,mllm-NPU顯著減少了圖構建和優化的時間。此外,通過共享不依賴于塊序列的靜態運算符,減少了內存占用,提高了擴展性。
- 陰影異常執行:為了在不犧牲精度的情況下實現對NPU友好的張量激活量化,mllm-NPU采用了陰影異常執行技術。通過在CPU上并行處理稀疏的異常激活通道,mllm-NPU能夠在保持NPU計算效率的同時,減少由于異常值引起的量化誤差。
- 亂序子圖執行:mllm-NPU通過亂序執行子圖來優化計算流程,減少由于CPU/GPU上的浮點運算導致的執行泡沫。這種策略擴大了調度空間,使得可以更靈活地管理各個子圖的執行順序,從而最大化NPU的利用率和減少總體執行時間。
2. 評估
mllm-NPU的性能通過與多個基線系統的比較得到驗證。實驗結果顯示,無論是在預填充速度、能耗還是端到端推理延遲方面,mllm-NPU都顯著優于現有技術。
- 預填充性能:在1024個令牌的提示長度下,mllm-NPU在Xiaomi 14設備上的預填充速度比使用CPU的llama.cpp快18.17-38.4倍,比使用GPU的TFLite快1.27-2.34倍。
- 能耗:在Redmi K60 Pro設備上,mllm-NPU在1024令牌提示長度下的能耗比使用CPU的llama.cpp低35.63-59.52倍,比使用GPU的TFLite低1.85-4.32倍。
- 端到端性能:在實際的移動應用場景中,mllm-NPU在端到端推理延遲上也展現出了優越性,特別是在UI自動化和自動電子郵件回復的任務中,mllm-NPU的表現遠超其他基線系統。
性能分析
mllm-NPU的性能優勢主要源于其創新的設計和優化策略。通過在移動NPU上最大化整數運算的執行,同時在CPU/GPU上處理必要的浮點運算,mllm-NPU不僅提高了執行速度,還降低了能耗。
- 內存消耗:盡管mllm-NPU引入了額外的內存開銷(主要是由于陰影異常執行技術),但這一開銷相對較小,僅占總內存的一小部分。這得益于其高效的內存管理策略,如分塊共享圖技術,有效減少了不必要的內存占用。
- 精度保持:mllm-NPU在保持高效NPU執行的同時,幾乎不損失推理精度。通過動態處理異常值位置,mllm-NPU能夠在元素級別上提供比傳統量化方法更高的精度,從而保證了模型的輸出質量。
- 系統兼容性:mllm-NPU支持標準的LLM格式,并可以與現有的解碼引擎兼容,使其能夠靈活地集成到各種移動設備和應用中。此外,mllm-NPU的設計允許與其他算法級優化技術結合使用,進一步提升性能。
總之,mllm-NPU通過一系列創新技術,顯著提高了移動設備上大型語言模型的推理性能,為實現高效、低能耗的移動設備端LLM推理提供了有效解決方案。
準確性與內存消耗
1. 準確性保持
mllm-NPU系統在實現高效的NPU卸載的同時,保持了較高的準確性。與FP16相比,準確性損失不到1%,這在實際應用中是可接受的。這得益于其創新的技術,如影子離群值執行(shadow outlier execution),它允許在CPU上以浮點精度處理離群值,從而保持了高準確性。此外,mllm-NPU與其他基線模型相比,在保持準確性的同時,顯著提高了執行效率。
2. 內存消耗
盡管mllm-NPU引入了一些額外的內存開銷,例如為離群值執行加載的浮點權重,但這些開銷相對較小,僅占總內存的0.6%至1%。此外,通過共享圖(chunk-sharing graph)技術,mllm-NPU顯著減少了內存需求,因為它允許在不同的執行塊之間共享靜態操作符。這種方法不僅減少了內存占用,還提高了內存使用的效率。
本文轉載自 ??AI論文解讀??,作者:柏企
