大家好,我是 Ai 學習的老章
前文:
有朋友好奇為啥 4 張 4090 才跑起來
今天咱們了解一下大模型量化
看能不能 1 張 4090 跑起來?
還以 QwQ-32B 為例(這個模型確實很強,我很喜歡)
https://modelscope.cn/models/unsloth/QwQ-32B-GGUF/files
這里的模型有一個量化類型,Q、K、L、M看起來一臉懵
再順便說一句,大家喜歡用 ollama 起模型,如果自己看模型說明,它默認都是量化模型
DeepSeek-R1 爆火的時候,unsloth 就發布過最小 1.58 位量化版本的 R1,把 DeepSeek-R1 這個非常大的模型(它有 6710 億個參數,也就是 671B)通過“量化”把原本 720GB 的模型壓縮到只有 131GB 的大小。
簡單來說
量化是一種將模型的浮點權重(通常是 32 位或 16 位)轉換為低位整數(如 2 位、4 位、8 位等)的技術,目的是減少模型的存儲空間和計算資源需求,同時盡可能保持模型的性能。
最主流的有以下量化的方法:
方法類型
代表技術
核心特征
適用場景
訓練后量化
GPTQ
4bit 權重量化,動態反量化推理
GPU 加速推理
感知量化
AWQ
激活值引導的智能量化
精度敏感型任務
混合推理
GGUF/GGML
CPU-GPU 異構計算框架
邊緣設備部署
然后這里還設計不同的量化位寬,其實常見也就K-Quants 增強系列
量化類型
位寬策略
存儲效率
技術特點
Q2_K
2.56bit/權重
超高壓縮率
16 塊超塊結構
Q3_K
3.44bit/權重(type-0)
性能優先
平衡壓縮與精度
Q4_K
4.5bit/權重(type-1)
通用型
主流部署方案
Q5_K
5.5bit/權重
精度增強
關鍵層保護
Q6_K
6.56bit/權重
準無損壓縮
復雜任務保留
Q8_K
8bit 中間結果量化
資源充足場景
梯度計算優化
還有常見到的 IQ 系列量化方法
IQ4_NL:4 位量化,超塊包含 256 個權重,權重 w 通過 super_block_scale 和 importance matrix 計算得到
IQ4_XS:4 位量化,超塊包含 256 個權重,每個權重占用 4.25 位,通過 super_block_scale 和 importance matrix 計算得到
目前最流行的是混合量化策略,主打一個動態精度分配
K_M 混合策略:對 attention.wv 等關鍵張量采用 Q6_K,其余使用 Q4_K
K_S 均質策略:全模型統一量化配置,所有張量均使用 Q4_K
其中
K:表示 k-quants 量化方法
S (Small):簡單量化,所有張量均使用相同位數量化
M (Mixed):混合量化,對關鍵張量使用更高精度的量化,其余使用標準精度
在相同位數下,K_M 系列模型(比如今天我們要演示的 QwQ-32B-Q4_K_M)通常在模型大小和性能之間取得最佳平衡,是推薦的選擇。
關于量化,還有大量知識點,大量細節,這里沒法展開。
實踐
下載量化模型
我們用 modelscope 命令下載,安裝方法 pip install modelscope
modelscope download unsloth/QwQ-32B-GGUF --include "QwQ-32B-Q4_K_M.gguf" --local-dir ./
QwQ 模型原版是 bf16 精度,模型文件 40 多 GB,運行起來打滿了 4 張 4090。
Q4_K_M 量化版,模型文件 19.85GB,我們嘗試用 2 張 4090 跑起來
為什么不用 1 張呢?我試了,報錯顯存不足了
官方建議用 ollama 或 llama.cpp,感興趣自己看吧,我就不演示了:https://modelscope.cn/models/unsloth/QwQ-32B-GGUF/summary
我決定用 vLLM 試試
啟動命令(建議照抄,試錯無數次換來的):
CUDA_VISIBLE_DEVICES=4,5 vllm serve ./QwQ-32B-Q4_K_M.gguf --served-model-name QwQ:32B-4 --port 3001 --max_model_len 84720 --tensor-parallel-size 2 --enable-reasoning --resoning-parser deepseek_r1
啟動需要時間,ok 之后把它配置到 open-webui(不再重復,請看前文)
隨便問 2 個問題
看后臺日志,生成速度還是不錯的
比 4 張 4090 跑起來的滿參數 QwQ 還快呢
顯存利用情況——4 和 5 滿載
然后用 4 張卡把 QwQ:32B 完整拉起來 顯卡全部工作起來了
說實話,智商差的不多,大家能猜到左右兩邊哪一個是量化版嗎?
最后提一句,直接用 Ollama 手工創建可啟動的量化模型文件,方法如下,我遭遇的問題是運行后模型陷入無限思考,但是直接 ollama 從官網拉取,就沒有問題。可能是配置文件不齊全,沒再深究,感興趣可以看看,有了 vLLM 我要完全拋棄 ollama 了。
先創建一個 Modelfile 格式的文件——vim Modelfile
FROM ./QwQ-32B-Q4_K_M.gguf
Modelfile 除了上面的 FROM 參數,還有很多可以配置的東西。參考:https://github.com/ollama/ollama/blob/main/docs/modelfile.md
第二步,創建 ollama 的本地模型,下面的命令中 you-model-name 是自己起的名字,隨便寫。-f 指定剛才創建的 Modelfile 的路徑
ollama create QwQ:32B -f Modelfile
執行過程耗時較長,創建完成后,我們就可以運行剛才創建的模型:
OLLAMA_GPUS="4" ollama run QwQ:32B
我測試單張 4090 可以跑,問題就是無限思考,沒細究,已棄療。
制作不易,如果這篇文章覺得對你有用,可否點個關注。給我個三連擊:點贊、轉發和在看。若可以再給我加個,謝謝你看我的文章,我們下篇再見!
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.