■ 空间 · 块式压力机 · fig 1
■ 先给答案
默认 Q4_K_M — 约 4.85 每权重比特,约 1% 困惑率代价,约全精度大小的 30%。
代码与数学请升到 Q6_K;保留 Q8_0 用于参考运行;Q4 以下只是大模型的应急口粮。
整个决定就是一行: size_GB ≈ bits_per_weight × params / 8.
4.85每权重比特 — 默认档位
~1%Q4_K_M 的困惑率代价
30%全精度大小
01压力机
一只货箱,四次盖印 — 桥式磅秤回答大小,量表回答代价
FIG 1 · GGUF 块式压力机按键 1–5 — 或按钮 · 旋钮调参数
约 1% 困惑率 — 默认之选默认之选。每 GB 质量收益最高的权衡。
档位 Q4_K_M · 4.85 BPW · 刻度 4.85 GB / FP16 16.0 GB · 大小 30% · 参数 8B
货箱就是模型:每次运行权重相同——变的只是盖印。按 5,看量表的代价俯冲
02整条梯子
机器载四个档位 — 仓库发八个
| 档位 | bpw | 质量 — 判定 | 什么时候用它 |
|---|---|---|---|
| Q2_K 口粮 | ~3.4 | 13B 以下很糟 — 应急口粮小模型上连贯性开始崩塌 | 别的都装不下、只有大模型时才用。相信之前先测试。 |
| Q3_K_M 挤压档 | ~3.9 | 明显 — 显存受挤压损失明显 — 只给显存吃紧的 ≥14B | 显存吃紧、仅限 ≥14B 模型。 |
| Q4_K_S 退路档 | ~4.6 | 小损失小损失 — Q4_K_M 装不下而差距很小时 | Q4_K_M 装不下、又差一点时的退路。 |
| IQ4_XS i-quant | ~4.3 | ≈ Q4_K_M — 码本挤压质量 ≈ Q4_K_M、更小 — 前提是后端跑得了 i-quant | Q4_K_M 稍大、后端支持 i-quant。某些后端略慢。 |
| Q4_K_M 默认之选 | ~4.85 | 约 1% 困惑率 — 默认之选每 GB 质量最高 — 所有仓库都带它 | 默认之选。每 GB 质量收益最高的权衡。 |
| Q5_K_M 余量档 | ~5.7 | 约 0.5% 困惑率损失接近零,依旧从容 | 余量加从容 — 质量比最后一个 GB 更重要。 |
| Q6_K 主力档 | ~6.6 | 几乎难以区分几乎难以区分 — 代码与数学档 | 代码、数学、抽取 — 一切惩罚噪声的任务。 |
| Q8_0 参照档 | ~8.5 | 实际为零(对比全精度约 0.02%)实际为零(约 0.02%)— A/B 与微调基底 | 参考运行、A/B、微调基底 — 不是日常主力。 |
那一行—
size_GB ≈ bits_per_weight × params / 8 — 压力机上每个读数都在现场计算它手算示例—8B 在 Q4_K_M:4.85 × 8 / 8 = 4.85 GB;FP16 会是 16.0 GB — 货箱落到 30% 全精度的重量
只算权重—加上 KV 缓存、激活和缓冲区:一个「4.9 GB」的模型在 4k 上下文里想要 6 GB 显存的卡 — flash-attention 加量化 KV 缓存能把 16k 窗口塞进那张卡。到完整的 128k 窗口,光缓存就要 ~16 GiB。
去 hub 上找—尽量要单个
Q4_K_M.gguf,不要分片的 split,除非仓库只发后者。要去 vLLM 而不是 llama.cpp?它的 GGUF 插件吃同样的文件 — 只用 GPU 的规则照样适用。无论如何,引擎是与量化无关的另一条轴。03盖印拿走了什么
货箱变小 — 盖印真正对这些比特做了什么
以 16 比特训练—模型几十亿个权重,每个都是 16 位浮点里 2 字节的数字;量化把每个权重塞进更少的比特
天真的做法—把一切四舍五入成 4 位整数 — 摧毁小而重要的值
分块缩放—权重按 32 个一组分块,每块带自己的缩放因子,宽幅的量值因此幸存
k-quants 的那个 K—按重要性分层的超块缩放 — 注意力层与前馈层待遇不同,因为它们对压缩的耐受并不相等
IQ 家族—从图像压缩借来的码本 — 更少比特、质量相近,某些后端略慢
原封不动—架构、tokenizer、上下文处理:量化只改存储的权重
同一模型的 Q4 文件和 Q8 文件是 同一个模型,穿了不同的大衣。
04决定顺序
机制是诚实的 — 那么哪个档位干什么活
- 先管上下文 + KV 预算,再管权重。 装不下的上下文比测不出的质量更糟 — 长上下文里缓存可能压过模型本身。
- 默认 Q4_K_M。 约 1% 困惑率换约 30% 的体积;社区默认,不无道理。
- 任务惩罚噪声时升到 Q6_K — 代码、数学、抽取,一切无人值守的活。
- Q8_0 只作参考 — A/B 测试、损伤测量、微调基底。当日常主力只会买到焐热的显存传感器。
- Q4 以下仅在窘迫时,只给大模型 — 而且用已知高难度的 prompt 测试之后才信任。
越高越好?—技术上更准;感知上几乎察觉不到 — Q8_0 落在全精度 ~0.02% 以内:对任何实际用途都是无损的;Q6_K 几乎难以区分
天真的取整—Q4_0 的代价比 Q4_K_M 的约 1–2% 略高
大小买来余量—70B 经受 Q3 只是修型;7B 落在 Q2 是截肢 — 大模型冗余更多
地板会移动—聊天容忍 Q4;精确代码、数学和对精确文档的 RAG 会更早暴露噪声 — 如果 Q4 模型写出似是而非的错误代码,先用同一模型在 Q6_K 上测一遍,再怪模型
05自己量损伤
表盘读的是 llama.cpp 的判定 — 让你自己的硬件投票
git clone https://github.com/ggml-org/llama.cpp && cd llama.cpp
cmake -B build && cmake --build build --config Release -j
huggingface-cli download bartowski/Meta-Llama-3.1-8B-Instruct-GGUF \
Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf Meta-Llama-3.1-8B-Instruct-Q8_0.gguf \
--local-dir models
# perplexity (lower = closer to the original model)
./build/bin/llama-perplexity -m models/Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf -ngl 99
./build/bin/llama-perplexity -m models/Meta-Llama-3.1-8B-Instruct-Q8_0.gguf -ngl 99
# and speed on the same hardware
./build/bin/llama-bench -m models/Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf -ngl 99
verify:Q4_K_M 的数字落后百分之几十个点 — 而文件 小约 40%。同一份数据,每个档位
困惑率是固定数据集上对下一个 token 的意外程度: 是代理指标,不是评分 — 而你的真实任务可能与它相左。
老错误—为 Q4 对 Q5 绞尽脑汁却无视上下文长度:先预算 KV 缓存;档位是容易的部分
隐私—量化是对权重做的算术,完全离线:本地跑 Q4_K_M 与全精度模型泄漏得一模一样 — 什么都不离开机器。隐私变量是 推理在哪里跑,而不是比特宽度
来源—对各档位一视同仁:偷来的底子做的「uncensored」微调,Q8 也不比同样的权重在 Q4 更干净
■ 诚实的盖印
质量判定来自困惑率运行,不靠感觉。 测试于:llama.cpp llama-perplexity · llama-bench · GGUF Q2_K → Q8_0 · Hugging Face 文件。梯子上的数字是 llama.cpp 在 Llama 系参考模型上的自家测量;大小算术就是那一行 — 上面压力机的每个读数都是这一行。跑一遍命令,用你的数字替换我的。
块式压力机到此为止 · 未取任何远程内容 · 全程本地