■ 空间 · 块式压力机 · 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 — 或按钮 · 旋钮调参数
← 同样的权重 · 更少的比特同一模型更少字节块式压力机每个档位 · 现场称重4.85 GBFP16磅秤0~1%SEV质量代价8B参数FP16Q8_0Q6_KQ4_K_MQ2_K

约 1% 困惑率 — 默认之选默认之选。每 GB 质量收益最高的权衡。

档位 Q4_K_M · 4.85 BPW · 刻度 4.85 GB / FP16 16.0 GB · 大小 30% · 参数 8B

货箱就是模型:每次运行权重相同——变的只是盖印。按 5,看量表的代价俯冲

02整条梯子

机器载四个档位 — 仓库发八个

档位bpw质量 — 判定什么时候用它
Q2_K 口粮~3.413B 以下很糟 — 应急口粮小模型上连贯性开始崩塌别的都装不下、只有大模型时才用。相信之前先测试。
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-quantQ4_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决定顺序

机制是诚实的 — 那么哪个档位干什么活

  1. 先管上下文 + KV 预算,再管权重。 装不下的上下文比测不出的质量更糟 — 长上下文里缓存可能压过模型本身。
  2. 默认 Q4_K_M。 约 1% 困惑率换约 30% 的体积;社区默认,不无道理。
  3. 任务惩罚噪声时升到 Q6_K — 代码、数学、抽取,一切无人值守的活。
  4. Q8_0 只作参考 — A/B 测试、损伤测量、微调基底。当日常主力只会买到焐热的显存传感器。
  5. 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 的判定 — 让你自己的硬件投票

先编译一次 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 系参考模型上的自家测量;大小算术就是那一行 — 上面压力机的每个读数都是这一行。跑一遍命令,用你的数字替换我的。

块式压力机到此为止 · 未取任何远程内容 · 全程本地