模型壓縮到70%,還能保持100%準確率,無損壓縮框架DFloat11來了

機器之心報導

編輯:陳萍、+0

大型語言模型(LLMs)在廣泛的自然語言處理(NLP)任務中展現出了卓越的能力。然而,它們迅速增長的規模給高效部署和推理帶來了巨大障礙,特別是在計算或內存資源有限的環境中。

例如,Llama-3.1-405B 在 BFloat16(16-bit Brain Float)格式下擁有 4050 億個參數,需要大約 810GB 的內存進行完整推理,超過了典型高端 GPU 服務器(例如,DGX A100/H100,配備 8 個 80GB GPU)的能力。因此,部署該模型需要多個節點,這使得它昂貴且難以獲取。

本文,來自賴斯大學等機構的研究者提出了一種解決方案,可以將任何 BFloat16 模型壓縮到原始大小的 70%,同時還能在任務上保持 100% 的準確性。

  • 論文標題: 70% Size, 100% Accuracy: Lossless LLM Compression for Efficient GPU Inference via Dynamic-Length Float 

  • 論文地址:https://arxiv.org/pdf/2504.11651

  • 項目地址:https://github.com/LeanModels/DFloat11

為了應對 LLM 不斷增長的模型尺寸,通常會採用量化技術,將高精度權重轉換為低位表示。這顯著減少了內存佔用和計算需求,有助於在資源受限的環境中實現更快的推理和部署。然而,量化本質上是一種有損壓縮技術,引入了一個基本缺點:它不可避免地改變了 LLMs 的輸出分佈,從而影響模型的準確性和可靠性。

相比之下,無損壓縮技術在有效減少 LLM 規模的同時,保留了精確的原始權重,確保模型的輸出分佈與未壓縮表示(例如 BFloat16)完全相同。然而,現有的無損方法主要集中在提高 LLMs 的存儲效率上,例如縮小模型檢查點或優化針對專用硬件如 FPGA 的性能上。

本文提出了 DFloat11(Dynamic-Length Float),這是一種無損壓縮框架,可以在保持與原始模型完全相同的輸出的情況下,將 LLM 的規模減少 30%

DFloat11 的提出源於當前 LLM 模型中 BFloat16 權重表示的低熵問題,這暴露出現有存儲格式存在顯著的低效性。通過應用熵編碼技術,DFloat11 根據權重出現頻率為其分配動態長度編碼,在不損失任何精度的情況下實現了接近信息理論極限的壓縮效果。

為了支持動態長度編碼的高效推理,該研究還開發了定製化的 GPU 內核來實現快速在線解壓縮。其設計包含以下內容:

  • 將內存密集型查找表(LUT)分解為適應 GPU SRAM 的緊湊型查找表;

  • 採用雙階段內核設計,通過輕量級輔助變量協調線程讀寫位置;

  • 實現 Transformer 塊級解壓縮以最小化延遲。

該研究在 Llama-3.1、Qwen-2.5 和 Gemma-3 等最新模型上進行了實驗:DFloat11 能在保持比特級(bit-for-bit)精確輸出的同時,將模型體積縮減約 30%。與將未壓縮模型部分卸載到 CPU 以應對內存限制的潛在方案相比,DFloat11 在 token 生成吞吐量上實現了 1.9–38.8 倍的提升。在固定 GPU 內存預算下,DFloat11 支持的上下文長度是未壓縮模型的 5.3–13.17 倍。

值得一提的是,基於該方法 Llama-3.1-405B(810GB)在配備 8×80GB GPU 的單節點上實現了無損推理。

方法介紹

LLM 的權重通常使用浮點數表示,包括 BFloat16 或 BF16,其在數值精度和內存效率之間取得了平衡。然而,BFloat16 表示信息並不高效。

針對 BFloat16 表示法中存在的信息效率低下問題,本文提出了一種無損壓縮框架,通過熵編碼技術對浮點參數進行壓縮。

具體實現包括:基於語言模型線性投影矩陣中所有 BFloat16 權重的指數分佈構建荷夫曼樹,對指數部分採用荷夫曼編碼壓縮,同時保留原始符號位和尾數位。壓縮後的指數經過緊密比特打包存入字節數組 EncodedExponent,而未壓縮的符號位和尾數則存儲在獨立字節數組 PackedSignMantissa 中。圖 2 展示了 DFloat11(Dynamic-Length Float)或 DF11,該格式可實現模型參數的高效緊湊表示。

雖然動態長度浮點數能有效實現 LLM 的無損壓縮,但關鍵挑戰依然存在:如何利用這些壓縮權重進行高效的 GPU 推理。接下來,文章詳細介紹瞭解決方案,其中包括三個關鍵組成部分:

將一個龐大的無前綴查找表(LUT)分解為多個適合 GPU SRAM 的緊湊 LUTs;

引入一個兩階段的內核設計,利用輕量級輔助變量來高效協調線程的讀寫操作;

在 transformer 塊級別執行解壓縮,以提高吞吐量並最小化延遲。

算法 1 是將 DFloat11 解壓縮為 BFloat16 的 GPU 內核過程。

實驗

研究人員評估了 DF11 壓縮方法在 GPU 上的有效性及推理效率,將多個主流大語言模型(包括 LLaMA、Qwen、Gemma 等)從 BFloat16 壓縮為 DF11 格式,並報告其壓縮比和性能表現。

在軟硬件環境方面,研究人員使用 CUDA 和 C++ 實現了 DF11 解壓縮內核,並集成至 Transformers 推理框架。實驗基於 HuggingFace Accelerate 框架評估未壓縮模型在 CPU 分流(CPU offloading)和多 GPU 場景下的性能。

為全面分析 DF11 內核在不同硬件配置下的表現,團隊在多種 GPU 和 CPU 組合的機器上進行實驗。

實驗結果 

DF11 壓縮比:DF11 將大語言模型壓縮至原始大小的約 70%(等效位寬為 11 位)。

表 2 展示了 DF11 在 LLaMA、Qwen、Gemma 等模型上的壓縮效果。所有模型的線性投影層參數均被壓縮為 DF11 格式,壓縮比穩定在 70%。

無損特性驗證:為驗證 DF11 的無損特性,研究人員使用 lm-evaluation-harness 工具在 MMLU、TruthfulQA、WikiText 和 C4 數據集上評估模型性能。

結果表明,壓縮後的模型在準確率和困惑度(Perplexity)上與原始 BFloat16 模型一致(見表 3)。此外,研究人員逐位對比 DF11 解壓後的權重矩陣與原始矩陣,確認其完全相同。

推理性能:研究人員在多個硬件平台上比較了 DF11 與 BFloat16 模型的推理效率。對於 BFloat16 模型,當模型超出單 GPU 顯存時,需將部分計算分流至 CPU,而 DF11 模型可完全加載至單 GPU。

評估指標包括延遲(Latency)和吞吐量(Throughput),結果顯示 DF11 模型的性能顯著優於 BFloat16 模型,延遲減少 1.85 至 38.83 倍(見圖 3)。

節省的顯存可支持更長生成序列:DF11 的顯存節省使模型能夠支持更長的生成序列。如圖 4 所示,在 batch size 為 1 時,DF11 模型的顯存消耗顯著降低,相比 BFloat16 模型最多可生成 5.33 至 13.17 倍的 tokens。

消融研究 

延遲分析:研究團隊以 Llama-3.1-8B-Instruct 為例,對比了其在 BFloat16 與 DF11 格式下不同 batch 大小時的延遲組成,結果如圖 5 所示。

相比原始模型,DF11 壓縮模型因解壓 Transformer 模塊與語言建模頭引入了額外延遲但該開銷與 batch size 無關,因此通過提升 batch size 可有效攤銷解壓延遲,使總推理時間之間的差距顯著縮小。

解壓性能對比:研究人員將 DF11 解壓內核的延遲與吞吐表現分別與兩種基線方案進行對比:

  • 將模型權重存儲於 CPU 內存並在需要時傳輸到 GPU;

  • 使用 NVIDIA 的 nvCOMP 庫中的 ANS(不對稱數值系統,Asymmetric Numeral System)解壓方法。

實驗以 Llama-3.1-8B-Instruct 語言建模頭權重矩陣為例,結果如圖 6 所示,DF11 的解壓吞吐量最高分別為 CPU-GPU 傳輸和 ANS 解碼的 24.87 倍和 15.12 倍。此外,DF11 的壓縮比為 70%,優於 nvCOMP 的 78%。值得注意的是,隨著權重矩陣規模的增大,DF11 的解壓吞吐呈上升趨勢,原因是更好的 GPU 線程利用率。

© THE END