微軟開源爆火1bit大模型推理框架!千億參數模型量化後單CPU可跑

微軟開源1bit大模型推理框架!

現在1000億參數大模型量化後單CPU可跑,速度可達每秒5-7個token。

就是今年爆火論文The Era of 1-bit LLMs的官方代碼實現,開源不到一週GitHub已攬獲7.9k Star。

傳統大模型參數以16位浮點數(如FP16或BF16)形式的存儲,而BitNet b1.58將其統統變成了三進制,也就是 {-1, 0, 1}。

這裡的“1.58 bit”指每個參數可以用1.58位的信息來表示。

轉換之後,矩陣中的計算就只會涉及到加法,因此會讓大模型在保持一定精度的同時,顯著減少所需的存儲空間和計算資源,也顯著提升了在本地設備上運行LLM的可能性。

這個項目開源後,在X上也受到了一波高度關注。

bitnet.cpp是1bit LLM(例如 BitNet b1.58)的官方推理框架。

該框架配備了一系列優化內核,支持在CPU上進行快速且無損的1.58bit模型推理,未來將擴展支持NPU和GPU。

bitnet.cpp的首版主要支持CPU推理。

具體性能改進方面,在ARM CPU上,該框架可實現1.37至5.07倍的加速,而且更大的模型將有更顯著的性能提升。

同時,它能將能耗降低55.4%至70.0%,進一步增強效率。

在x86 CPU上,加速效果介於2.37至6.17倍之間,能耗減少71.9%至82.2%。

網友們也發現了華點,在x86上的性能增益量比ARM更大。

此外,bitnet.cpp能使千億參數模型量化後單CPU可跑,速度可達每秒5-7個token,接近人類閱讀速度。

微軟還展示了使用bitnet.cpp推理框架支持的不同1 bit LLM。

1 bit LLM的實現方法,微軟在一年前就有相關研究,稱爲BitNet(一種Transformer),用BitLinear替換了nn.Linear。

今年二月,BitNet原班人馬在上一篇論文的基礎之上做了優化,提出BitNet b1.58,在原始BitNet的基礎上增加了一個額外的0值。

然後這篇內容只有6頁的論文引發熱議:

BitNet b1.58模型的權重被量化爲三元值{-1, 0, 1},相當於在二進制系統中使用了1.58 bit來表示每個權重。

採用了absmean量化函數來約束權重,將權重矩陣通過其平均絕對值進行縮放,然後四捨五入到最接近的整數值(-1、0或1)。

激活量化中,激活值被縮放到[−Qb, Qb]的範圍,以此來消除零點量化。

在架構設計上,BitNet b1.58借鑑了Llama,使用了RMSNorm、SwiGLU、旋轉位置編碼等組件,並移除了所有偏置項。這種設計使其能夠輕鬆集成到主流的開源框架中。

實驗中,與Llama相比,BitNet b1.58在矩陣乘法方面節省了71.4倍的計算能耗。

這種方法發佈後,也有不少人在這項研究的基礎之上進行探索。

其中一個問題是,BitNet b1.58將每個參數僅用三元值表示,但是所有這些都需要從頭開始訓練模型,並不是誰都有預算來進行LLM預訓練。

而Huggingface Transformers最近整合了BitNet b1.58,運用了一些技巧,使得現有模型可以直接微調到1.58bit。

感興趣的童鞋可以自行查閱。

不過也有網友指出了這種方法的侷限:

總之,1 bit LLM具有巨大的潛力。

但也正如網友所言,1 bit LLM關鍵還得是能在實踐中證明自己。

參考鏈接:[1]https://github.com/microsoft/BitNet[2]https://x.com/rohanpaul_ai/status/1847814379657462201[3]https://x.com/rohanpaul_ai/status/1848172443258728860?s=46&t=iTysI4vQLQqCNJjSmBODPw[4]https://huggingface.co/blog/zh/1_58_llm_extreme_quantization