ADVERTISEMENT
預訓練大語言模型(LLM)在特定任務上的性能不斷提高,隨之而來的是,假如 prompt 指令得當,其可以更好的泛化到更多工,很多人將這一現象歸功於訓練資料和參數的增多,然而最近的趨勢表明,研究者更多的集中在更小的模型上,不過這些模型是在更多資料上訓練而成,因而在推理時更容易使用。
舉例來說,參數量為 7B 的 LLaMA 在 1T token 上訓練完成,儘管平均性能略低於 GPT-3,但參數量是後者的 1/25。不僅如此,目前的壓縮技術還能將這些模型進一步壓縮,在保持性能的同時還能大幅減少記憶體需求。透過這樣的改進,性能良好的模型可以在終端使用者設備(如筆記型電腦)上進行部署。
然而,這又面臨另一個挑戰,即想要將這些模型壓縮到足夠小的尺寸以適應這些設備,怎樣才能兼顧產生的品質。研究表明,儘管壓縮後的模型生成的答案準確率還可以,但現有的 3-4 bits量化技術仍然會讓準確性降低。由於 LLM 生成是順序進行的,依賴於先前生成的 token,小的相對誤差不斷累積並導致嚴重的輸出損壞。為了確保可靠的品質,關鍵是設計出低位寬的量化方法,與 16 bits模型相比不會降低預測性能。
然而,將每個參數量化到 3-4 bits通常會導致中等程度、甚至是高等程度的準確率損失,特別是那些非常適合邊緣部署的 1-10B 參數範圍內的較小模型。
為了解決準確性問題,來自華盛頓大學、蘇黎世聯邦理工學院等機構的研究者提出了一種新的壓縮格式和量化技術 SpQR(Sparse-Quantized Representation,稀疏 - 量化表徵),首次實現了 LLM 跨模型尺度的近無失真壓縮,同時達到了與以前方法相似的壓縮水準。
SpQR 透過辨識和隔離異常權重來工作,這些異常權重會導致特別大的量化誤差,研究者將它們以更高的精度儲存,同時將所有其他權重壓縮到 3-4 bits,在 LLaMA 和 Falcon LLMs 中實現了不到 1% 的困惑度相對準確率損失。進而可以在單個 24GB 的消費級 GPU 上運行 33B 參數的 LLM,而不會有任何性能下降,同時還能提高 15% 的速度。
SpQR 演算法高效,既可以將權重編碼為其他格式,也可以在運行時進行有效地解碼。具體來說,該研究為 SpQR 提供了一種高效的 GPU 推理演算法,可以比 16 bits基線模型更快地進行推理,同時實現了超過 4 倍的記憶體壓縮收益。
方法
該研究提出一種混合稀疏量化的新格式 —— 稀疏量化表徵(SpQR),可以將精確預訓練的 LLM 壓縮到每個參數 3-4 bits,同時保持近乎無損。
具體來說,該研究將整個過程分為兩步。第一步是異常值檢測:該研究首先孤立了異常值權重,並證明其量化會導致高誤差:異常值權重保持高精度,而其他權重以低精度(例如 3 bits的格式)儲存。然後,該研究以非常小的組大小實現分組量化(grouped quantization)的變體,並表明量化尺度本身可以被量化為 3 表徵。
SpQR 極大地減少了 LLM 的記憶體佔用,而不會降低準確性,同時與 16 bits推理相比,LLM 的生成速度快了 20%-30%。
此外,該研究發現,權重矩陣中敏感權重的位置不是隨機的,而是具有特定的結構。為了在量化過程中突出顯示其結構,該研究計算了每個權重的敏感度,並為 LLaMA-65B 模型視覺化這些權重敏感度。下圖 2 描繪了 LLaMA-65B 最後一個自注意力層的輸出投影。
該研究對量化過程進行了兩個改變:一個用於捕捉小的敏感權重組,另一個用於捕捉單個的異常值。下圖 3 為 SpQR 的總體架構:
下表為 SpQR 量化演算法,左邊的程式碼片段描述了整個過程,右邊的程式碼片段包含了二級量化和查找異常值的副程式:
實驗
該研究將 SpQR 與其他兩種量化方案進行了比較:GPTQ、RTN(rounding-to-nearest),並用兩個指標來評估量化模型的性能。首先是困惑度的測量,所用資料集包括 WikiText2、 Penn Treebank 以及 C4;其次是在五個任務上的零樣本準確率:WinoGrande、PiQA、HellaSwag、ARC-easy、ARC-challenge。
主要結果。圖 1 結果顯示,在相似的模型大小下,SpQR 的性能明顯優於 GPTQ(以及相應的 RTN),特別是在較小的模型上。這種改進得益於 SpQR 實現了更多的壓縮,同時也減少了損失退化。
表 1、表 2 結果顯示,對於 4 bits量化,與 GPTQ 相比,SpQR 相對於 16 bits基線的誤差減半。
表 3 報告了 LLaMA-65B 模型在不同資料集上的困惑度結果。
最後,該研究評估了 SpQR 推理速度。該研究將專門設計的疏鬆陣列乘法演算法與 PyTorch(cuSPARSE)中實現的演算法進行了比較,結果如表 4 所示。可以看到,儘管 PyTorch 中的標準疏鬆陣列乘法並沒有比 16 bits推理更快,但本文專門設計的疏鬆陣列乘法演算法可以提高約 20-30% 的速度。
請注意!留言要自負法律責任,相關案例層出不窮,請慎重發文!