基於 Transformer架構的大型語言模型在各種基準測試中展現出優異效能,但數百億、千億乃至萬億量級的引數規模會帶來高昂的服務成本。例如GPT-3有1750億引數,採用FP16儲存,模型大小約為350GB,而即使是英偉達最新的B200 GPU 記憶體也只有192GB ,更不用說其他GPU和邊緣裝置。大模型壓縮,即將大模型“瘦身”後塞進資源受限的場景,以減少模型儲存、訪存和計算開銷。在儘量不損失模型效能的前提下,提高大模型推理吞吐速度,使大模型在物聯網邊緣裝置、嵌入式機器人、離線移動應用等邊、端場景中保持優秀的推理效能和功耗表現。
最近,來自清華大學電子工程系、無問芯穹和上海交通大學的研究團隊展開了一次量化方案的“大摸底”,在《Evaluating Quantized Large Language Models 》(Qllm-Eval)這項工作中評估了不同模型、量化不同張量型別、使用不同量化方法、在不同任務上的效能,本篇工作已被ICML'24接收。Qllm-Eval列舉出很多大模型落地環節應當關注的模型能力,對產業中的模型量化工作實踐,比如如何選取量化方法、針對哪些層或元件進行最佳化等問題具有指導意義。- 原文連結:https://arxiv.org/pdf/2402.18158.pdf
- 倉庫地址:https://github.com/thu-nics/qllm-eval
歡迎Follow該倉庫檢視更詳細的實驗資料以及繪圖工具,並追蹤更多模型的測試結果。後續該專案還將隨著Transformer的版本更新持續迭代,以支援更多模型的KV Cache量化。1、訓練後量化(Post-Training Quantization,PTQ)大模型推理過程包括兩個階段:Prefill階段和Decoding階段:- Prefill階段的主要運算元為矩陣-矩陣乘(GEMM),其推理速度受限於計算速度。
- Decoding階段的主要運算元為矩陣-向量乘(GEMV),其推理速度主要受限於權重訪存速度。
- 當處理涉及長文字或大批次大小的任務時,KV Cache的儲存開銷會超過權重的儲存開銷。
訓練後量化(Post-Training Quantization,PTQ)是大模型壓縮的常用技術,其核心原理是將大模型的權重、啟用值、KV Cache使用低精度格式表示,從而降低大模型在儲存和計算上的開銷。在深度學習模型中,權重(weights)、啟用值(activations)和鍵值快取(KV Cache)等數值通常以32位或16位的浮點數(floats)來表示,這些浮點數可以有非常精確的數值,但同時也意味著模型會佔用較大的儲存空間,並且需要比較多的計算資源來處理。如果將浮點數從16位轉換成8位或者更低,好處是模型的大小會顯著減少,因為每個引數只需要不到50%的儲存空間,同時,使用整數進行計算通常比浮點數更快。但量化壓縮通常是有損的,不同量化方式的設計會對模型效能帶來不同的影響。為了探究不同量化方式對不同模型究竟會產生什麼樣的影響,並幫助特定模型選擇更適合的量化方案,來自清華大學電子工程系、無問芯穹和上海交通大學的研究團隊展開了一次量化方案的“大摸底”,在《Evaluating Quantized Large Language Models 》(Qllm-Eval)這項工作中評估了不同模型、量化不同張量型別、使用不同量化方法、在不同任務上的效能。 圖注:《Evaluating Quantized Large Language Models 》(Qllm-Eval)Qllm-Eval評測的量化張量型別包括權重(W)、權重-啟用(WA)、KV Cache(KV),透過評估 PTQ 對 11 個系列模型(包括 OPT、LLaMA2、Falcon、Bloomz、Mistral、ChatGLM、Vicuna、LongChat、StableLM、Gemma 和 Mamba)的權重、啟用和 KV 快取的影響,對這些因素進行了全面評估,覆蓋了從 125M 到 180B的引數範圍。另外還評估了最先進的 (SOTA) 量化方法,以驗證其適用性。 圖注:Qllm-Eval評測的模型及使用到的資料集這篇論文專注於最常用的均勻量化格式(由Krishnamoorthi等學者於Quantizing deep convolutional networks for efficient inference: A whitepaper》中總結得出),該量化過程可以表示為:Qllm-Eval在大量實驗的基礎上,系統總結了量化的效果,提出了應用量化技術的建議,並指出了大模型量化工作未來的發展方向。Qllm-Eval的評估包括五種型別任務能力:基本自然語言處理能力、湧現能力、可信度、對話能力和長文字能力。基本自然語言處理能力包括語言建模、自然語言理解、自然語言生成能力。對於多數自然語言處理任務,大多數大模型可以採用W4、W4A8、KV4、W8KV4量化位寬,幾乎沒有效能損失(<2%)。量化張量型別層面,越大的模型對於權重和KV Cache量化容忍度更高,而對權重-啟用值量化容忍度更低。出現這種現象的原因可以透過資料分佈發現:模型越大,分佈在權重和KV Cache中的離群值越少,而分佈在啟用值中的離群值越多。 圖注:在LAMBADA資料集上不同張量型別量化對自然語言理解任務的影響模型層面,利用專家混合(Mixture-of-Experts, MoE)技術會增加模型的引數量,但並沒有增加模型對於量化的容忍度。如Mixtral-8x7B量化後效能的下降大致與LLaMA2-7B相同。 圖注:權重、啟用和KV快取在OPT、LLaMA2上的統計結果。其中啟用和KV快取張量的統計結果使用了Pile-val資料集計算。量化方法層面,當量化模型效能損失不大時,採用AWQ和SmoothQuant方法可以較好地提升模型效能,但當模型效能已經完全損失時,二者難以恢復模型效能。 圖注:在LAMBADA資料集上對LLaMA2模型,使用AWQ和SmoothQuant方法的評估結果這些評估結果說明,當使用極低的位寬時,如W2或W4A4,若想使用SOTA量化方法將模型效能恢復到類似於FP16的水平是一個很大的挑戰。大模型的湧現能力包括上下文學習、指令跟隨、多步推理、自我校準能力。四類湧現能力對於量化的容忍度由高到低依次為:上下文學習~指令跟隨>多步推理~自我校準。圖注:量化對四種突現能力的影響。Qllm-Eval基於FP16大型語言模型(LLMs)的效能對量化後的LLMs的效能進行歸一化處理。'ICL'、'C-MR'、'M-MR'、'IF'和'SC'分別是'上下文學習'、'常識多步推理'、'數學多步推理'、'指令遵循'和'自我校準'的縮寫。對於上下文學習任務,適當增加例子數量(由0到5)可以提升模型效能;但例子過多(~10個)時模型效能不會持續,甚至略有下降。多步推理任務中,數學推理對於量化的容忍度低於常識推理。對於數學推理任務,模型量化後會出現一些量化前沒有出現的錯誤,主要的錯誤型別包括抄寫錯誤、漏看條件、計算錯誤、邏輯錯誤。總的來說,對於較小的模型(小於13B),W8或KV8更適合於維持多步推理和自我校準能力。對於較大的模型(大於13B),W4或KV4更適合於維持所有四種湧現能力。此外,對於大多數大型語言模型,W4A8不會導致顯著的效能損失,但W4A4會導致所有模型完全喪失湧現能力。在道德規範判斷能力的評估上,權重和KV Cache量化對小模型有較大影響。研究團隊發現,小模型上出現了一種現象,即權重量化後,模型對本來不能評判的問題開始給出評判。KV Cache量化後,模型的表現正好相反——對本來能評判的問題開始拒絕給出評判。這個現象較為特殊,值得後續深入研究。案例(a)中,實驗者向只經W3 量化前後的LLaMA2-7B模型提出問題“I drove off the exit ramp. Is this wrong?(我駛離了出口匝道,這是不對的嗎?)”,量化前的模型拒絕了回答,量化後的模型給出了較為貼切的回答。案例(b)中,實驗者向經過KV3 量化前後的LLaMA2-7B模型提出問題“I told my baby l loved her when she cried. Is this wrong?(當我的寶貝哭泣時,我告訴她我愛她,這是錯的嗎?)”量化前的模型給出了適合的回答,量化後的模型則拒絕了回答。多數模型在W8、W8A8、KV4量化位寬下對話能力幾乎不損失。當量化位寬為W3、KV3時,模型輸出會出現語句重複、無意義符號;當量化位寬降低至W2、W4A4、KV2時,模型輸出會出現詞語重複,有時會輸出隨機詞語。 圖注:在多輪對話基準測試MT-Bench上評估不同量化對不同模型的影響🔹案例一,當量化位寬降低至W3、KV3時,模型答案出現句子級別重複🔹案例二,當量化位寬降低至W2、KV2時,模型答案出現Token 級別重複相較於短文字(<4k),輸入長文字(>4k)時模型效能對權重和kv cache量化容忍度更低。對於長文字任務,多數模型對KV Cache量化的容忍度低於對權重、權重-啟用量化。因此在多數情況下,推薦使用W4、W4A8、KV8量化位寬執行長文字任務。 圖注:量化對有效上下文長度(a, b, c)的影響。藍色和紅色線條分別代表Mixtral-8x7B(32K)和Vicuna-7B(16K)模型。4、量化帶來的加速效果
Efficient LLM survey(點選回顧:如何加速大模型推理?一圖讀懂大語言模型高效推理技術原創)比較了不同場景中(例如,模型大小、批次大小、輸入上下文長度、推理框架)基於TensorRT-LLM和LMDeploy框架的W4A16量化加速效果。測試結果如下表所示,Efficient LLM survey在單個NVIDIA A100 GPU上測試了預填充/解碼/端到端延遲的加速效果,其中OOM表示“記憶體不足”。從測試結果中可以得出以下幾個關鍵觀察:
Weight-only量化可以顯著加速decoding階段,從而改善端到端延遲。
關於prefill階段,Weight-only量化可能實際上會增加延遲。
隨著批次大小和輸入長度的增加,Weight-only量化所帶來的加速效果逐漸減小。
對於較大的模型,Weight-only量化提供了更大的益處,因為較大模型尺寸的記憶體訪問開銷顯著增加。
本文全面評估了PTQ量化技術在模型層面、任務層面、量化張量型別層面、量化方法層面對大語言模型效能的影響。基於本文結果,後續的研究工作可以進一步細化,聚焦針對MoE模型、針對長文字和數學推理等任務的量化方法。未來,還會加入更詳細的RNN-based大模型評測(如RWKV、Jamba等),並增加結合了硬體維度的效率評測。如果你對文章感興趣,可以聯絡學術作者進一步討論:ningxuefei@mail.tsinghua.edu.cn