這一章開始進入 模型/參數層面最佳化 (Model-level / Parameter-Level Optimization) 的技術介紹,這邊主要是介紹一些模型壓縮的技術,像是量化 🔢、蒸餾 💧、剪枝 ✂️、稀疏化 🌾等等。
可以對一個模型做這麼多事情,跟壓榨硬體一樣好玩,想想就豪開心(?)
因為量化模型在實作中比較常被使用到,所以與其他的壓縮技術分開來講。
相信大家對量化過後的模型都有一些概念了,像是熟悉的GGUF、AWQ模型。量化就是犧牲一些模型的accuracy 📉,但可以將模型的weights或activations從高精度轉換成低一點的精度,讓模型可以在更小的硬體設備上被執行 💻。
關於LLM模型常用的精度,如果忘記了可以回頭參考Day3。
(圖源: medium)
同樣在 Day3 時提到過LLM在推理的兩個階段各自的問題,能被量化的地方也分成了兩種,可以在不同地方被應用:
Weight-Activation Quantization
Weight-Only Quantization
光是這樣看可能不太懂 🤔,可能會想說不是只要下載好量化的模型就可以用了嗎?
讓我們往下看,提到例子的時候就會更了解它們了。
PTQ是在模型訓練完成後進行的一種量化技術,在訓練完畢的模型上直接進行量化,而不需要重新訓練。但也因為量化是在訓練完成後才做的,模型精度可能會受到較大影響。
🔢 weight-only quantization:
我們從HuggingFace下載量化後的模型通常是這類型的!
bitsandbytes - bitsandbytes 提供了8-bit低精度量化方法,整合在HuggingFace Transformers當中。使用時只需加上load_in_8bit=True
,即可載入量化後的模型。它還支持進一步的量化技術,如後面會提到的QLoRA。
GPTQ (Quantized GPT) - GPTQ是針對大規模語言模型最早期的經典量化技術,GPTQ簡化的量化的順序,避免頻繁更新Hessian矩陣,降低量化的計算需求。
AWQ (Activation-Weighted Quantization) - AWQ根據模型中特定部分的重要性來進行量化,特別是對一些影響較大的權重進行精確處理,跟其他量化技術比起來,它在保持模型精度方面有一定的優勢。從它的github頁面可以看到它與未量化模型的速度比較。
SqueezeLLM - SqueezeLLM是一種創新的量化方式,透過Dense-and-Sparse Quantization方法將權重矩陣分為兩部分:一個是可以大量量化的密集部分(不影響模型性能),另一個是保留敏感和異常權重的稀疏部分。
GGUF / GGML (llama.cpp) - GGUF是Llama.cpp框架中引入的一種新的量化格式,GGUF是對先前的GGML的進一步優化,其中的q幾
表示不同的量化方法,例如Q4_0
、Q4_1
、Q5_0
和Q8_0
,這些方法根據權重量化的位數不同,平衡了精度和記憶體的使用。它們最特別的地方是能利用llama.cpp在只有CPU的電腦上做推理。
(圖源: 網路,一直都想放但沒機會放這張XD)
🔄 weight-activation quantization:
QAT是在模型訓練過程中模擬量化效果的一種方法,讓模型在訓練時就學會適應量化後的誤差 🎯。在訓練過程中,模型的weight和activation被設定為低精度格式(如 INT8),使模型在訓練時就在於量化誤差之下,讓模型可以自動調整參數來適應低精度運算 🔧,使它在推理階段能夠更好地適應量化後的精度要求 ⚙️✨。
打開HuggingFace搜尋發現有人做了臺灣證券交易所 💹的QLoRA版本XD
https://huggingface.co/DavidLanz/llama3_8b_taiwan_stock_qlora
量化主要被分成了PTQ和QAT兩種。而現在有非常多種不同的量化方法,而一些知名且基礎的量化方法通常都已經被整合到大型的框架像是HuggingFace 🤗或vLLM 🚀當中了,這兩個連結點開來都是各自支持的量化類型表格 📊,當然最主要自己做量化還是要看自己的硬體設備有沒有支援,不過在一個應用角度而非自行量化的人來看,只要知道有哪些類型的量化模型就好了XD
看survey論文裡面還有提到很多其他的量化方法,像是OBQ、OWQ,放在一起超像是表情符號的ψ(`∇´)ψ
🔍 最後簡單總結一下量化技術:
- 犧牲一些精度 📉
- 減少記憶體消耗 💾
- 增加推理速度 ⚡
這張內容跟昨天比起來有點少,筆者只能多放幾張梗圖壓壓驚。
(圖源: x,看我量化你的量化)
A Survey on Efficient Inference for Large Language Models
https://arxiv.org/abs/2404.14294
一樣是GPT4o各種QA