AI架構系列:picoLLM 大模型的量化魔術師 原創
Picovoice首席執行官Alireza Kenarsari指出,“picoLLM是Picovoice 深度學習研究人員和量產工程師共同努力的成果。前者研究出X 位量化算法,而后者構建了跨平臺的LLM 推理引擎。目的還是在于將LLM遍及到任何設備且將控制權交還給企業”。
picoLLM Inference可以免費使用,沒有任何使用限制。無論是在概念驗證上工作,還是為數百萬用戶提供服務。只需幾行代碼即可部署。
注:其余的產品線有非商用免費版,也有收費版
1.認識量化(Quantization)
大模型有個基本的指標就是模型參數規模,客觀而言參數規模越大,效果越佳,但是所需的內存越多。例如,要部署 7.7GB 大小的Mistral 7B,需要GPU的VRAM大小要超過8GB才能在GPU完全加載。因此意味著運行更大規模的模型將需要具有更大規格的硬件,從而增加成本。
量化是一種壓縮技術,將高精度值映射到低精度值。對于任意的大模型,這意味著它們的權重和激活精度會被調整,肯定會對影響模型的能力。在實際的運用過程中發現,某些情況下雖然明顯的減低精度,然而卻又能獲得和原來不相上下的結果。
量化通過降低內存帶寬需求和提高緩存利用率來提高性能,不同精度級別的量化過程能夠更多的設備上運行大模型。
LLMs通常使用全精度(float32)或半精度(float16)的浮點數進行訓練。一個float16有16位,即2個字節。因此在 FP16上訓練參數規模為1B的大模型則至少需要2GB的內存,這還不包括訓練過程中的優化器內存、激活內存和梯度內存。
量化其實就是想找到一種方法,將FP32權重的值的范圍([最小值,最大值])表示為較低精度的值,例如FP16甚至INT4(整數 4 位)的數據類型。典型的情況是從FP32到INT8。
下圖為一個具體的例子,將FP16格式的數組量化為INT8的過程,當然最后可以從INT8再次還原為FP16。這樣一來原來模型的存儲大小就被有效的降低了。
其實換個思路來講,就是將數軸進行壓縮。這里的難題在于如何的量化才能降低存儲開銷,但是又能表達出原來的意思。
目前有不少的量化思路,均勻量化是模型量化中常用的一種技術,用于降低深度學習模型中權重和激活的精度。在量化過程中將值的范圍劃分為固定數量的等距區間,然后將每個值映射到最近區間的中心。此過程有助于減少表示每個值所需的位數。
與更復雜的量化技術相比,均勻量化的主要優勢之一是其簡單易用。然而,均勻量化可能并不總是能捕捉到數據分布的細微差別。想象一下原始參數的取值在[3.5, 3.9],若都被量化到4,的確會導致潛在的信息丟失和性能下降。
另一方面,非均勻量化允許量化步距不均勻分布,從而能更準確和更靈活。量化過程由離散量化水平 (Xi) 和相應的量化步驟 (?i) 定義。當實數落在特定的量化步驟范圍 (?i, ?i+1) 內時,量化器將其分配到相應的量化級別 (Xi)。非均勻量化方法(如對數分布)側重于以指數而不是線性方式調整量化步驟和水平,這可以通過有效捕獲重要值區域來提高準確性。
左圖為對稱量化,右圖為非對稱量化
2.微調中的量化
左圖為QAT,右圖為PTQ,兩者的區別在于量化的位置。
PTQ是一種流行的技術,模型參數(通常以FP32等高精度格式存儲)被轉換為較低位精度的INT8。此轉換過程允許在計算資源有限的硬件(如移動設備和嵌入式系統)上更高效地部署模型。PTQ 可以應用于神經網絡的權重和激活,從而減小模型大小并提高推理速度,而不會顯著降低準確性。
QAT具有在部署期間將應用的量化效應的意識。當對訓練模型進行量化時,可能會導致模型參數出現擾動,從而可能導致模型偏離訓練期間以浮點精度實現的收斂點。
為了解決這個問題,QAT使用量化參數重新訓練神經網絡模型,使模型能夠收斂到損失減少的點。在QAT期間,在浮點對量化模型執行正向和后向傳遞,而模型參數在每次梯度更新后進行量化,類似于預測梯度下降。在浮點權重更新后執行投影對于防止零梯度或高誤差梯度至關重要,尤其是在低精度場景中。
在QAT的反向傳播過程中,處理不可微分的量化算子是一個挑戰。一種常用方法是使用直通估計器 (STE) 通過將量化算子視為恒等函數來近似量化算子的梯度。
3.picoLLM
picoLLM Compression是Picovoice內部開發的一種新型大型語言模型量化算法。給定一個特定于任務的成本函數,picoLLM Compression 會自動學習跨權重和權重內LLM的最佳位分配策略。而目前現有技術方案都是固定分配。
picoLLM提供了一個全面的開源基準測試結果,例如下圖,當應用于 Llama-3-8b ,picoLLM在2、3和 4位的量化設置下在MMLU的評測分數中,將采用GPTQ算法的正確率下降消滅于無形之中。隨著量化位數的下降,幾乎保持堅挺。
現有方法依賴于跨模型權重的固定位分配。但是,picoLLM 在量化過程中學習最優分配。每個模型最理想的量化位數取決于自身的架構和壓縮比。例如,下面的三張圖顯示了壓縮比為 3、5 和 7 時 Llama-2-7b不同組件之間的位最佳分布:
在MMLU (5-shot)任務上采用picoLLM的效果對比。
PicoLLM 框架支持Gemma、Llama、Mistral、Mixtral和Phi系列模型,并在Windows、macOS 和Linux上跨平臺運行(包括Raspberry Pi 4和 5 上的Raspberry Pi OS)以及 Android 和 iOS。下次將詳細地介紹內在原理。
本文轉載自??魯班模錘??,作者:魯班模錘
