利用稀疏技術實現大型語言模型推理 100 倍加速。探索稀疏編譯器如何革新 LLM 推理,釋放前所未有的效率與速度。在先前的討論「如何透過稀疏性加速 LLM 推理」中,我們探討了第二部分:「利用激活稀疏性加速推理」。點此回顧第一部分:「LLM 如何進行剪枝」。在本篇中,我們將深入探討第三部分:「稀疏編譯器對 LLM 推理的影響」。
編譯器的必要性
近期發展顯示,深度學習計算正變得越來越稀疏,也就是運算是在包含多個零的張量上進行。除了稀疏模型權重(通常是靜態且預先已知)之外,我們還發現了更多依賴輸入且僅在執行時期才知道的稀疏模式,即動態稀疏性。例如,GPT 和 OPT 等大型語言模型展現了多種動態稀疏性。首先,Transformer 模型(以及其他類型的模型)在其輸入、激活值和梯度中展現了固有的動態稀疏性。在激活圖中,只有極少數元素是非零的(例如,T5-Base 為 3.0%,ViT-B/16 為 6.3%)。其次,利用動態稀疏性進一步擴展 DNN 模型。大多數現有超過萬億參數的模型都採用專家混合架構,該架構根據稀疏輸入動態激活專家。此外,動態稀疏訓練在訓練期間動態剪枝模型中較不重要的連接,因其卓越的計算效率而受到越來越多的關注。動態稀疏性,即稀疏模式在執行前未知,對深度學習構成了重大挑戰。由於與預處理相關的大量開銷,先進的稀疏感知深度學習解決方案僅限於預定義的靜態稀疏模式。高效執行動態稀疏計算時,常常面臨 GPU 友好的張量區塊配置(用於高效執行)與稀疏感知區塊形狀中最小化浪費覆蓋率(張量中的非零值)之間的不一致性。LLM 稀疏性需要使用稀疏運算子,而傳統的函式庫如 cuSPARSE 或 Sputnik,由於其通用設計而非最優化,要麼只支援靜態編譯的稀疏感知內核,要麼需要將稀疏矩陣動態轉換為密集格式,從而在動態稀疏性場景中導致顯著的效能開銷。
主流編譯器比較
目前主流的稀疏計算編譯器主要包括 cuSPARSE、Sputnik、OpenAI Block Sparse、SparTA 和 PIT,參考文獻 [11]。以下是加速數據的比較表:場景:大小為 4096 × 4096 × 4096 的矩陣乘法 指標:延遲(毫秒)
值得一提的是,PIT 優於最先進的稀疏優化,與 cuSPRARSE、Sputnik、OpenAI Block Sparse 和 SparTA 相比,分別實現了高達 88.7 倍、5.8 倍、17.5 倍和 5.7 倍的加速。
編譯器對 LLM 推理的影響
OPT
實驗 [11] 使用 Alpaca 數據集在兩個 OPT 模型版本(OPT13B 和 30B)上評估 PIT,測試平台為八張 V100-32GB GPU。PIT 在 OPT 上應用了兩種動態稀疏優化:(1) 消除同一批次中不同長度句子的填充開銷;(2) 利用 FFN 層中 ReLU 激活產生的細粒度稀疏性(高達 99%)。批次大小設置為 32,PyTorch-S 使用 Triton 作為後端。
每個批次的端到端延遲與 OPT 的記憶體佔用
PIT 的效能分別超越 PyTorch、PyTorchS 和 DeepSpeed 達 2.1 倍 ∼ 2.3 倍、2.5 倍 ∼ 3.0 倍和 2.0 倍 ∼ 2.2 倍。避免動態序列中的填充有助於 PIT 相對於基線實現 1.6 倍 ∼ 1.7 倍的加速。透過進一步利用 FFN 層中 ReLU 激活的動態稀疏性,PIT 將效能再提升 1.3 倍 ∼ 1.4 倍。與使用區塊大小為 32x32 的 Triton 區塊稀疏內核的 PyTorch-S 相比,PIT 採用更小的微區塊(即 1x32)以及利用 SRead 和 SWrite 的高效計算,避免了計算浪費。此外,PyTorch-S 也受到稀疏格式轉換開銷的影響,因此顯示出最高的延遲。在記憶體消耗方面,DeepSpeed 的記憶體使用量最低,因為它將整個編碼器層融合為一個運算子,節省了激活記憶體。
MOE
在文獻 [11] 對 SwinMoE(一個具有編碼器和 MoE 結構的大型視覺模型)的實驗中,在 A100 上使用 float16 精度評估了 PIT 的效能。對於視覺Transformer,同一批次中的輸入圖像被重新縮放到相同的解析度,以確保序列長度一致。在我們的實驗中,我們比較了不同批次大小和專家數量下 Swin-MoE 的端到端推理延遲和記憶體使用量。MegaBlocks 通過同時執行所有專家,有效利用稀疏內核避免計算浪費,從而優於其他基線。PIT 透過在記憶體層級間支援數據移動中的數據重新洗牌,進一步提升了效能。
SwinMoE 在 A100 上的端到端延遲與記憶體足跡
與 PyTorch、PyTorchS、Tutel、DeepSpeed 和 MegaBlocks 相比,PIT 分別實現了 1.5 倍 ∼ 6.3 倍、1.5 倍 ∼ 2.9 倍、1.1 倍 ∼ 1.8 倍、1.2 倍 ∼ 1.6 倍和 1.1 倍 ∼ 1.4 倍的加速。PIT 在 Swin-MoE 上的效能提升低於 Switch Transformer,因為 Swin-MoE 的專家數量遠少於 Switch Transformer。因此,當專家數量從 8 個增加到 32 個時,MoE 層僅貢獻 23.6% 到 61.2% 的端到端延遲。如果單獨比較 MoE 層的延遲,PIT 比 MegaBlocks 快約 1.2 倍 ∼ 1.7 倍。以下是 PIT 的編譯比較數據:

最後,讓我們討論加速所需的硬體支援。
GPU
NVIDIA A100
A100 採用新的 Ampere 架構,配備多達 6912 個 CUDA 核心和 40GB 高速 HBM2 記憶體。它還支援第二代 NVLink 技術,可實現快速的 GPU 間通訊,並提升大型模型的訓練速度。A100 引入了功能強大的新第三代 Tensor Core,以及對 DL 和 HPC 數據類型的全面支援,還有新的稀疏能力,進一步將吞吐量翻倍。A100 中的 TF32 Tensor Core 運算為加速 DL 框架和 HPC 中的 FP32 輸入/輸出數據提供了直接途徑,運行速度比 V100 FP32 FMA 運算快 10 倍,在稀疏情況下則快 20 倍。對於 FP16/FP32 混合精度 DL,A100 的效能是 V100 的 2.5 倍,在稀疏情況下提升至 5 倍。在使用 PyTorch 框架運行 AI 模型時,與上一代 V100 晶片相比,A100 在 BERT 模型訓練中效能提升 6 倍,在 BERT 推理中提升 7 倍。
Intel Max 系列 GPU
根據參考文獻 [18],最近在 NVIDIA V100 GPU 上實現的兩種稀疏矩陣運算,與 V100 上的參考實現相比,效能提升高達 10 倍。
結論
總結來說,關於透過稀疏性加速 LLM 推理,有以下三點結論:
- 權重稀疏性(50%)、激活稀疏性(90%)和 MOE 稀疏性(例如 Mistral 8x7B 具有 75% 的動態稀疏性)是正交因素(效果可以累加,但模型效能可能受影響)。結合 PIT 編譯器對稀疏模型 2-3 倍的加速效果,與當前主流推理框架(TGI/vLLM 等)相比,理論加速極限可達 5-30 倍。
- 延遲是當前稀疏技術的主要關注點(稀疏性有一定效果;批次大小越大,稀疏效果越差)。吞吐量方向將是一個新的優化方向,因為激活稀疏性呈現某種冪律分佈,具有顯著的工程優化潛力。
- 將 LLM 中的非 ReLU 激活函數轉換為 ReLU 激活函數的成本相對較低(微調成本約為 3%;數據品質相對重要)。此外,在 DejaVu 中訓練預測器的成本較低(訓練快速且與數據無關)。結合推理速度提升帶來的成本降低,這是一個高 ROI 的舉措,並且具有商業可行性。
參考論文
[11]Pit: Optimization of dynamic sparse deep learning models via permutation invariant transformation [18]Performance Optimization of Deep Learning Sparse Matrix Kernels on Intel Max Series GPU
novita.ai 提供 Stable Diffusion API 以及數百種快速且最便宜的 AI 圖像生成 API,涵蓋 10,000 個模型。🎯 最快僅需 2 秒生成,按量付費,每張標準圖片最低僅 $0.0015,您可以添加自己的模型並無需維護 GPU。免費分享開源擴充套件。
