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