GGUF、半精度、模型蒸餾與 Q4_K_M 筆記
1. 總結
GGUF、半精度、模型蒸餾、量化是不同層次的概念。
最簡單的區分如下:
名詞 | 層次 | 說明 |
|---|---|---|
GGUF | 檔案格式 | 用來封裝模型權重、tokenizer、metadata 等資訊 |
FP16 / BF16 | 數值精度 | 權重用半精度格式儲存 |
Quantization / 量化 | 權重壓縮方法 | 把 FP16/BF16 權重壓成 Q4、Q5、Q8 等低位元格式 |
Distillation / 蒸餾 | 訓練方法 | 用大模型教小模型,讓小模型模仿大模型輸出 |
一句話整理:
2. GGUF 跟半精度的關係
GGUF 不是半精度。GGUF 是模型檔案格式;半精度是 GGUF 裡面可能使用的一種權重精度。
例如:
代表:
再例如:
代表:
所以副檔名 .gguf 只告訴你這是 GGUF 容器格式,不代表它一定是 FP16、BF16 或 Q4。
真正要看精度,要看檔名或 metadata 裡面的標記:
標記 | 意思 |
|---|---|
F16 | FP16 半精度 |
BF16 | BF16 半精度 |
F32 | FP32 單精度,容量最大 |
Q8_0 | 約 8-bit 量化 |
Q6_K | 約 6-bit 等級 K-quant 量化 |
Q5_K_M | 約 5-bit 等級 K-quant 量化,中等版本 |
Q4_K_M | 約 4-bit 等級 K-quant 量化,中等版本 |
Q3_K_M | 約 3-bit 等級 K-quant 量化,中等版本 |
3. 半精度是什麼
半精度通常指:
它們都比 FP32 省空間。
格式 | 大約每個數值使用空間 | 說明 |
|---|---|---|
FP32 | 32 bit | 傳統單精度,容量大 |
FP16 | 16 bit | 半精度,常見於 GPU 推理與訓練 |
BF16 | 16 bit | 半精度,動態範圍通常比 FP16 友善 |
Q8 | 約 8 bit | 量化,不是浮點半精度 |
Q4 | 約 4 bit | 更強量化,不是浮點半精度 |
注意:
半精度不是量化,但量化通常是從 FP16 或 BF16 權重轉換而來。
4. 模型蒸餾是什麼
模型蒸餾就是用一個較強、較大、較慢的老師模型,去教一個較小、較快、成本較低的學生模型。
架構可以理解成:
學生模型不是直接複製老師模型的權重,而是透過訓練去模仿老師模型的輸出行為。
它可能學到:
5. Hard Label 與 Soft Label
一般監督式訓練可能只有硬標籤:
這叫 hard label。
但模型蒸餾中,老師模型可能輸出一組機率分布:
答案 | 老師模型認為的可能性 |
|---|---|
台北 | 92% |
新北 | 4% |
高雄 | 2% |
台中 | 1% |
其他 | 1% |
這種機率分布稱為 soft label。
soft label 比 hard label 有更多資訊,因為它不只告訴學生模型「正確答案是什麼」,也告訴學生模型「其他答案有多接近」。
6. Distill 不等於 Quantized
這點很重要。
技術 | 改的是什麼 | 範例 |
|---|---|---|
蒸餾 Distillation | 訓練一個較小模型模仿大模型 | 70B 老師教 7B 學生 |
量化 Quantization | 把同一個模型的權重用較低位元表示 | FP16 轉 Q4、Q5、Q8 |
微調 Fine-tuning | 讓模型針對特定資料或任務再訓練 | 用公司 FAQ 微調客服模型 |
剪枝 Pruning | 移除模型中較不重要的結構或參數 | 刪除部分權重或神經元 |
簡單區分:
所以這種檔名:
可以拆解為:
片段 | 意思 |
|---|---|
7B | 約 70 億參數 |
Distill | 蒸餾模型,模仿某個更強模型 |
Q4_K_M | 約 4-bit 等級的 K-quant 中等量化版本 |
GGUF | llama.cpp / Ollama / LM Studio 常見模型格式 |
7. Q4_K_M 是什麼
Q4_K_M 是 GGUF / llama.cpp 生態中很常見的 4-bit 等級量化格式。
但它不是每個權重都剛好只佔 4 bit。
更精確地說:
所以稱它為:
比說「嚴格 4-bit」更準確。
8. Q4_K_M 三段拆解
Q4_K_M 可以拆成三段:
片段 | 意思 |
|---|---|
Q4 | 主要權重用 4-bit 量化表示 |
K | 使用 K-quant 分塊量化方法 |
M | Medium,中等折衷版本 |
8.1 Q4
Q4 表示主要權重用 4-bit 代碼表示。
4 bit 可以表示:
原本 FP16 權重可能是:
量化後可能變成類似:
再搭配 scale / min 等資訊,近似還原原本的值。
概念公式:
量化的核心就是:
8.2 K
K 指的是 K-quant。
K-quant 的重點是分塊量化,不是整個 tensor 只用一組 scale。
概念如下:
分塊量化的好處是可以降低誤差。
如果整個 tensor 只用一組 scale,大值可能會把範圍撐開,導致小值被壓得很粗糙。
分塊後,每個區塊各自有自己的量化範圍:
因此通常比全域量化更準。
8.3 M
M 是 Medium。
它代表中等折衷版本,不是最小,也不是最高品質。
通常可以理解成:
因此 Q4_K_M 通常比 Q4_K_S 大一點,但品質通常也比較穩。
格式 | 特性 |
|---|---|
Q4_K_S | Small,較小,品質略低 |
Q4_K_M | Medium,容量與品質折衷 |
Q5_K_M | 品質更穩,檔案更大 |
Q6_K | 更接近原始品質,但更吃記憶體 |
9. 為什麼說 Q4_K_M 是「4-bit 左右」
因為模型不只需要儲存 4-bit 權重代碼,還需要儲存額外資訊:
所以平均下來,每個權重的實際成本通常會超過 4 bit。
常見理解:
所以實際上它通常會接近:
具體數字會依模型架構與量化工具而異。
10. 實務選型建議
本地跑 LLM 時,可以這樣選:
情境 | 建議格式 |
|---|---|
第一次下載本地模型 | Q4_K_M |
RAM / VRAM 很吃緊 | Q4_K_S 或更低 |
想要回答穩一點 | Q5_K_M |
記憶體夠、希望品質更高 | Q6_K 或 Q8_0 |
追求接近原始品質 | F16 / BF16 |
不建議一開始用 | Q2、Q3,除非硬體真的不夠 |
一般經驗:
它的定位是:
11. 常見格式比較
格式 | 大約定位 | 優點 | 缺點 |
|---|---|---|---|
F16 / BF16 | 原始或接近原始品質 | 品質高 | 檔案大、吃記憶體 |
Q8_0 | 高品質量化 | 品質接近 FP16 | 檔案仍偏大 |
Q6_K | 高品質 K-quant | 穩定、失真少 | 比 Q4 大 |
Q5_K_M | 品質與容量偏品質 | 比 Q4 穩 | 比 Q4 大 |
Q4_K_M | 平衡型 | 省空間、品質尚可 | 比 Q5/Q6 容易失真 |
Q4_K_S | 更小 | 更省記憶體 | 品質略低於 Q4_K_M |
Q3 / Q2 | 極限壓縮 | 很省空間 | 品質下降明顯 |
12. 檔名判讀範例
範例 1
解讀:
範例 2
解讀:
範例 3
解讀: