首個支援4-bit浮點量化的LLM來了,解決LLaMA、BERT等的部署難題

PHPz
發布: 2023-11-18 15:34:00
轉載
947 人瀏覽過

大語言模型(LLM) 壓縮一直備受關注,後訓練量化(Post-training Quantization) 是其中一種常用演算法,但是現有PTQ 方法大多都是integer 量化,且當位元數低於8 時,量化後模型的準確率會下降非常多。想較於 Integer (INT) 量化,Floating Point (FP) 量化能較好的表示長尾分佈,因而越來越多的硬體平台開始支援 FP 量化。而這篇文章給出了大模型 FP 量化的解決方案。文章發表在 EMNLP 2023 上。

首個支援4-bit浮點量化的LLM來了,解決LLaMA、BERT等的部署難題

  • 論文網址:https://arxiv.org/abs/2310.16836
  • #程式碼位址:https://github.com/nbasyl/LLM-FP4

要了解本文,必須先具備基本的有關Floating Point Format 以及Floating Point Quantization 的知識,首先Floating Point Number 可以用以下公式表示:

首個支援4-bit浮點量化的LLM來了,解決LLaMA、BERT等的部署難題

# #s 代表正負符號位元(sign bit),m 代表尾數位(mantissa bits),e 代表指數位(exponent bits)。 p 是介於 0 到 2^e - 1 之間的值,用來表示當前數字該被分割到哪一個指數區間,d 取 0 或 1 的值,用來表示第 i 個 mantissa bit。 b 是 bias,一個用來調整 exponent 區間的整數值。

在接下來的部分中,我們將介紹浮點數量化是如何運作的。首先,輸入值必須經過一個稱為「scale and clip」的步驟。這個步驟首先將輸入值裁切到浮點數能夠表示的最大範圍(±Qmax),具體計算公式如下:

首個支援4-bit浮點量化的LLM來了,解決LLaMA、BERT等的部署難題


可以看到類似integer 量化,FP 量化也會加入一個full-precision 的縮放因子(scaling factor) 來縮放input 到適當的區間。而縮放因子在運算矩陣乘法的時候,和低位元的矩陣乘法分開計算,所以並不會造成很大的 overhead。融入了這個 full-precision 的縮放因子之後,不同的 quantized tensor 能夠被相應地 clip 到不同的最大最小值區間。在實際使用過程中,會根據輸入 tensor 的值域來決定所需的量化區間,然後利用公式 (4) 推導出相對應的 bias。注意式 (4) 裡的 bias 可以被用來當作實數值的縮放因子,請參閱公式 (2)(3)。

浮點數量化的下一個步驟是將決定好的量化區間內的值分配到相應的量化區間中,這個過程被稱為比較和量化:

首個支援4-bit浮點量化的LLM來了,解決LLaMA、BERT等的部署難題

上圖直觀說明了量化的過程,目前的輸入值,在用公式5 比較過後,量化到不同的量化區間。

在得到量化過的activation 和weight 後,這裡的scaling factor 提到前面先計算,而達到如下的efficient matrix multiplication,完成矩陣乘法的加速:

首個支援4-bit浮點量化的LLM來了,解決LLaMA、BERT等的部署難題

接著本文指出FP 量化的準確度,和exponent bits 的設定以及量化的區間息息相關。

在先前的論文中,已經驗證了不同的FP格式(即浮點數的指數位/尾數位設定)之間存在巨大的量化誤差差異。只有當選擇合適的FP格式時,FP量化能夠比INT量化更好地表示長尾分佈

首個支援4-bit浮點量化的LLM來了,解決LLaMA、BERT等的部署難題

這篇文章提出了一個解決方案,即採用基於搜尋的浮點量化演算法,以綜合搜尋的方式確定最適合的浮點數的指數位和尾數位設定以及相應的量化區間

除此之外,在各種不同類別的Transformer模型(Bert, LLaMA, ViT)中,還存在一個現象嚴重影響量化的難度:即模型的激活中不同通道之間的數量級差異很大,而同一通道之間的數量級非常一致。先前的研究LLM.int8和SmoothQuant也發現了類似的現象,但本文指出這個現像不僅存在於LLM中,其他Transformer模型(如下所示,LLaMA、BERT和DeIT-S)的活化分佈也發現了類似的現象:

首個支援4-bit浮點量化的LLM來了,解決LLaMA、BERT等的部署難題

從圖中可以看到,那些異常大的channel 都比剩餘的channel 大很多,所以在量化activation tensor 的過程中,量化的精度很大程度會被這些異常值決定,從而抑制其他channel 值的量化區間,最終降低整體影響量化精度。這會導致量化的最終結果崩壞,尤其當比特數降到一定程度的時候。值得注意的是,只有 tensor-wise 和 token-wise 量化可以在 efficient matrix multipilication 的時候將 scaling factor 提取出來,而 channel-wise 量化是不支持 efficient matrix multipilication 的,見下圖。

首個支援4-bit浮點量化的LLM來了,解決LLaMA、BERT等的部署難題

為了同時解決問題並保持高效率的矩陣乘法,本文使用少量的校正資料集來預先計算激活每個通道的最大值,並計算縮放因子。然後將縮放因子拆分為一個針對每個張量的實數乘以每個通道的2的冪。這個2的冪可以用FP中的指數偏差來表示。整個過程可以透過以下公式表示:

首個支援4-bit浮點量化的LLM來了,解決LLaMA、BERT等的部署難題

進一步地,在calibration 完成之後,這個per-channel exponent bias 就不再變化,因此可以和weight quantization 一起進行預計算(pre-compute),將這個per-channel exponent bias 整合進量化後的weights 中,提高量化精度。完整的過程如以下公式:

首個支援4-bit浮點量化的LLM來了,解決LLaMA、BERT等的部署難題

在預偏移之後,可以觀察到原本激活函數中的每個通道的全精度偏移的位置變成了一個基於張量的實數縮放因子,同時將被分解的整數偏移移到了權重中原本整數偏移的位置,具體見公式4

從而這個方法(pre-shifted exponent bias) 能在維持efficient matrix multiplication 的原則下,更好得提高量化精度,方法的直觀展示如下圖所示:

首個支援4-bit浮點量化的LLM來了,解決LLaMA、BERT等的部署難題

#最後本文展示Floating Point Quantization (FPQ) 方法,在LLaMA, BERT 以及ViTs 模型上,4-bit 量化皆取得了遠超SOTA 的結果。特別是,這篇文章展示了4-bit 量化的LLaMA-13B 模型,在零樣本推理任務上達到平均63.1 的分數,只比完整精度模型低了5.8 分,且比之前的SOTA 方法平滑量高出了12.7,這是目前少數已知可行的4-bit 量化方案了。

首個支援4-bit浮點量化的LLM來了,解決LLaMA、BERT等的部署難題

#

以上是首個支援4-bit浮點量化的LLM來了,解決LLaMA、BERT等的部署難題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:51cto.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!