微軟的「一位元LLM」:從概念到實踐
微軟的PR與「一位元LLM」概念
微軟在AI研究方面可能表現不俗,但其公關能力更是出色。他們創造了「一位元LLM」這個聽起來很有力的術語,但實際上它更像是一個比喻。從他們的BitNet論文標題就可以看出端倪,所謂的「一位元LLM」其實是158位元,這就引出了一個問題:什麼是分數位元,又如何在真實硬體中存儲?
視頻內容概覽
本視頻是關於量化的長系列的一部分,但它是完全獨立的。我們將討論什麼是LLMs,如何利用現有硬體有效地運行它們,它們的性能如何,以及它們未來成為主流的可能性。
一位元LLM的靈感
在哲學層面上,微軟的第一篇相關論文將其與人類生物學進行了類比。引用了比爾·蓋茨的話,人腦中的神經元以二元方式運作,輸出為0或1。而在一位元LLMs中,二元權重值為-1和+1,-1比0更具表達性,能對輸入特徵進行否定。有時為了兼得優勢,會使用包含-1、0和+1三種值的LLMs,包含0的好處是可以忽略不相關的特徵,但使用三進制值需要至少1.58位元來存儲。
一位元LLM的動機
將模型權重從16位元或8位元浮點數轉換為單一位元,動機很直接,就是為了更快的推理和更低的記憶體使用。這樣可以按比例減少記憶體需求,由於現代加速器受記憶體頻寬限制,更少的記憶體也意味著更快的推理,而且檢查點更小,更容易下載。BitNet在GPU上的推理速度比相同參數數量的全精度模型快9倍,在CPU上快6倍。
二元模型的發展歷程
二元模型的概念由來已久。2015年,在深度學習專注於圖像分類時,就出現了量化到1或2位元的卷積神經網絡。2018年,BERT模型主導文本分類排行榜後,出現了量化模型。到2023年,LLMs變得非常強大,微軟發布了第一篇BitNet論文,最初是真正的一位元且具有二元權重,不到一年後升級為三進制權重。2025年4月,微軟開源了一個20億參數的三進制BitNet版本。
關於一位元LLM的疑問
在準備本視頻時,收到了很多關於一位元LLM的深思熟慮的問題,其中最突出的是「它們怎麼可能工作?」
BitNet模型架構
BitNet在高層次上看起來像任何其他現代LLM,是一組變壓器塊。其關鍵創新是對變壓器塊的一個簡單更改。經典變壓器塊有兩個主要組成部分:自注意力和前饋網絡。在這些子組件中,有多重線性層。在PyTorch中,這些是簡單的torch.nn.Linear對象,將激活X乘以權重矩陣A,並可選擇添加權重向量或偏差B。在現代LLMs中,偏差B通常被省略。
BitNet對標準變壓器塊的修改很簡單,每個線性層都被替換為自定義的bit linear層。bit linear也是矩陣乘法,但其操作數不再是全精度的,激活是8位元整數,權重是三進制的。除了這個替換,模型架構沒有其他變化,注意力計算和變壓器塊之外的所有東西都以全精度運行。
bit linear層的秘密
一位元LLM的秘密在於它們並不完全是一位元的,網絡中仍有部分以全精度運行。即使在bit linear中,也只有權重是三進制的,激活以8位元或最近的4位元存儲。量化線性層能帶來巨大收益,因為這些層佔據了計算成本的大部分。
bit linear層的運作細節
從整個網絡的角度來看,bit linear是一個黑盒,接收全精度激活並輸出其轉換版本。進入該盒時需要一個量化步驟,將其轉換為8位元整數,退出時則需要反向操作將其解量化回float 16。在中間部分,將8位元激活乘以三進制權重矩陣,由於唯一的乘數是-1、0和1,計算輸出矩陣的元素可簡化為加法和減法,這裡有很多有趣的優化可以進行。
使bit linear實際工作的關鍵因素
在量化激活之前插入層規範是使bit linear實際工作的關鍵因素。這將激活的平均值移到零,方差移到一,這有兩個重要原因:一是圍繞零的對稱性使量化更容易實現;二是使量化對異常值具有彈性。
量化感知訓練(QAT)
一位元LLMs離不開量化感知訓練(QAT)。AI模型有兩個生命階段:訓練和推理。推理由模型的單次前向傳遞組成,輸入X與模型權重結合產生輸出Y。由於推理可以容忍一定的精度損失,因此可以使用量化權重運行。
自然的量化時機是在訓練之後,這種策略稱為訓練後量化(PTQ),即先以全精度訓練模型,然後在部署前量化檢查點。但這種方法在量化到1或2位元時開始失效,這時就需要QAT。
在訓練期間,我們會保留一個全精度的權重主副本,用於反向傳遞以計算梯度、更新優化器狀態並將權重推向正確方向。在正向傳遞之前,我們會即時量化主權重,使正向傳遞使用三進制權重,就像後來在推理中一樣,這也稱為假量化或模擬量化。這些三進制權重是臨時的,在下一個訓練步驟中會再次從主權重重新計算。
直通過估計器(STE)
量化過程涉及舍入等有損操作,沒有舍入函數的導數,如何計算梯度?答案是直通過估計器(STE),這是Hinton對AI的眾多貢獻之一,就是假裝舍入從未發生,將導數設置為中性值1。STE已被廣泛研究,有一些數學保證,但只適用於非常簡單的模型。
QAT在LLMs中的應用
最初,QAT應用於整個訓練過程。但對於多階段訓練的LLMs,QAT通常只是常規全精度預訓練後的微調階段。Meta的一篇論文建議將訓練預算分為90%的全精度預訓練和10%的QAT。
硬體與存儲
目前忽略分數1.58,假設每個權重分配2位元,這是一種稍微浪費但簡單的起始點。大多數現代硬體不支持N2資料類型,所以必須在軟體中使用現有資料類型進行模擬。
一種簡單但方便的解決方案是將每個2位元數字存儲在自己的unsigned int8中,這會留下6個未使用的位元,但允許使用內置算術。另一種方法是位元打包,可以將四個2位元權重打包到一個U和8中,這樣就需要編寫自定義邏輯來解包這些值。
在機器學習中,權重大多以矩陣形式出現,可以通過分組並將每組編碼為單個單元來更有效地編碼值。例如,考慮一組三個值,有27種可能的組合,可以為每種組合分配一個唯一的標籤或編碼,需要5位元來表示這些索引,這樣平均每個權重只使用1.67位元,接近1.58的理論下限。這種策略稱為逐元素查找表(ELUT),BitNet採用了這種策略,有TL1和TL2兩個版本。
檢查點分析
在Hugging Face上有三個檢查點,原始的bloat 16精度版本可用於進一步微調,還有兩個量化檢查點。GGUF是由llama.cpp作者引入的二進制格式,第三個檢查點可能使用了TL1格式。通過比較全精度和量化TL1檢查點的張量差異,可以看到某些權重的轉換和張量大小的變化。
計算與優化
在矩陣乘法中,重複的模式會導致輸出矩陣中的重複計算。可以通過預計算查找表來解決這個效率問題,將三個激活分組時,每組會有27個緩存值,進行矩陣乘法時可以直接從表中累積這些部分結果。
今年4月,微軟發布了bitnet.cpp,這是一個輕量級的C++運行時,用於高效運行三進制LLMs,最初是針對CPU的,最近也添加了GPU內核。
一位元LLMs的性能
一位元LLMs是技術創新還是只是一個思想實驗?有一個官方的BitNet演示,使用20億權重的小模型。通過測試一些問題,發現其回答表現不佳。但與其他10億到20億參數的開源權重模型相比,BitNet的表現並不太差,考慮到它佔用的記憶體只有其他模型的六分之一。
雖然70億版本的BitNet尚未發布,沒有基準測試,但根據Meta的一篇論文,縮放定律甚至對低比特模型也適用,模型大小與性能之間存在直接相關性。
未來展望
Google的Gemma 3已經有一個量化到4位元的版本,其他LLM提供商也可能加入競爭。微軟有在本地運行應用的利益驅動,其他提供商也可能跟進,很期待中國的參與。
如果喜歡本視頻,請查看量化迷你系列的其他視頻,並在評論中分享對一位元LLM未來的看法。