GPUFits

量化详解:Q4 与 Q8 到底差多少?

更新于 2026-09-10 · 核实于 2026-08-04

量化让一个「需要 140GB」的 70B 模型能跑在 700 美元的二手显卡上。代价是什么?这篇文章从机制讲到数字,讲清楚你到底在拿什么换什么。

量化在做什么

模型的权重以浮点数存储:FP16 每个权重占 16 bit。量化做的是把一组浮点权重映射到更少的整数值上,每组(block)额外存一个缩放系数(scale),推理时再还原回近似浮点值参与计算。

关键设计有两层:

  • 分组缩放:不是全模型共用一个系数,而是每 32 个权重分一个块,各自带系数。块内误差互不影响,整体失真远小于「一刀切」。
  • K 系超块(super-block):Q4_K、Q6_K 这类名字里的 K 指 llama.cpp 的 K-quants。8 个小块组成一个超块,连缩放系数本身也再做一次量化,进一步压低开销;同时按张量重要程度分配精度——注意力层、嵌入表、输出头等敏感位置保留更多 bit。

所以「Q4」只是名义档位:Q4_K_M 实测平均约 4.9 bit/权重,不是 4.0。名字里 4 是主体量化位数,多出来的部分是系数开销和被特意保护的高精度张量。

实测数字(Llama-3.1-8B GGUF)

以下体积来自 bartowski 仓库的真实文件字节数(8.03B 参数,2026-08-04 验证),不是理论推算:

量化档实测 bit/权重文件体积相对 FP16质量评价
FP1616.0约 16.1 GB100%基准
Q8_08.58.5 GB53%几乎所有场景都无法区分
Q6_K6.66.6 GB41%「显存有富余就选它」
Q5_K_M5.75.7 GB35%优秀,困难任务有轻微损失
Q4_K_M4.94.9 GB30%默认档——体积与质量的最佳平衡
Q3_K_M4.04.0 GB25%可感知的劣化,仅应急
Q2_K3.23.2 GB20%只能拿来玩,不能干活

两个值得记住的细节:

  • 实测 bit/权重略高于 llama.cpp 理论值(如 Q4_K_M 理论约 4.83),因为嵌入表和元数据压缩率低。模型越大,这个差距越小——32B 的 Q4_K_M 实测 19.8GB(Qwen3-32B),非常贴近公式值。
  • 从 Q8 到 Q4 是平滑下降,Q4 到 Q3 是悬崖。Q3_K_M 开始模型会丢事实、前后矛盾,Q2_K 基本只剩「能出字」。

命名规则解码

下载页上一排文件名,看懂后缀只需要三条规则:

  • Q8_0Q4_0 里的 0:老式均匀量化,所有张量同等对待。已被 K 系取代,只有历史兼容价值。
  • _K(Q4_K、Q5_K、Q6_K):超块混合精度,当前的默认选择。
  • 尾缀 _S / _M / _L:小/中/大,表示给敏感张量保留多少额外精度。Q4_K_M 的 M 意味着关键张量用 Q6_K 级别存储——这就是为什么社区把 Q4_K_M 而不是 Q4_K_S 当默认档。尾缀越靠后,文件略大、质量略好。

实用结论:看到一排选项,直接抓 Q4_K_M;想更好一档抓 Q5_K_M 或 Q6_K;不要碰 0 系和 IQ2/Q2 系,除非你知道自己在做什么。

体积只是第一笔账:完整显存公式

文件体积 ≈ 权重显存,但跑起来还需要 KV 缓存和运行时开销。本站计算器用的公式:

总显存 = 参数(十亿) × bit/权重 ÷ 8   ← 权重
       + KV 缓存(随上下文线性增长)
       + 约 1.5 GB 运行时开销

以 8K 上下文、fp16 KV 缓存算三个完整例子(判定标准:需求 ≤ 可用显存的 80% 为宽裕,≤100% 为勉强):

配置权重KV 缓存开销合计在哪张卡上
Llama-3.1-8B Q6_K6.6 GB1.1 GB1.5 GB9.2 GB12GB 卡(RTX 3060)宽裕
Llama-3.1-8B Q8_08.5 GB1.1 GB1.5 GB11.1 GB12GB 卡勉强,16GB 宽裕
Qwen3-32B Q4_K_M20.1 GB2.1 GB1.5 GB23.7 GB24GB 卡(3090/4090)勉强
Qwen3-32B Q8_034.9 GB2.1 GB1.5 GB38.5 GB单卡不可行,要 48GB 级
Llama-3.3-70B Q4_K_M43.2 GB2.7 GB1.5 GB47.4 GB2×24GB 或 48GB 单卡勉强
Llama-3.3-70B Q8_075.1 GB2.7 GB1.5 GB79.3 GB80GB 数据中心卡

读这张表的方式:量化档位决定的是「哪张卡能跑」,而不是跑起来之后差多少。 8B 在 12GB 卡上 Q6_K 是免费的升级(Q8 就顶到天花板);32B 在 24GB 卡上 Q4_K_M 是唯一舒服的答案;70B 从 Q4 升到 Q8,硬件门槛从「两张二手 3090」跳到「一张 A100」,预算翻几倍——这是量化选择里最常见的真实决策。

MoE 模型(Qwen3-30B-A3B、gpt-oss、DeepSeek)显存按总参数算:30B-A3B 的 Q4_K_M 权重约 18.7GB,所有专家都得装进显存,不存在「只加载激活专家省显存」的说法。

速度:量化是免费的加速

低精度不只是更小,还更快。逐 token 生成的瓶颈是显存带宽——每吐一个 token 都要把权重完整读一遍。本站速度公式:

理论 tok/s = 带宽 × 0.75 ÷ 每 token 需读取的权重 GB

代入实际数字(理论估算,实际受框架/驱动影响,误差约 ±30%):

硬件模型与档位每 token 读取理论速度
RTX 4090(1008 GB/s)8B Q8_08.5 GB约 89 tok/s
RTX 40908B Q4_K_M4.9 GB约 154 tok/s
RTX 3060(360 GB/s)8B Q4_K_M4.9 GB约 55 tok/s
RTX 409070B Q4_K_M43.2 GB约 17 tok/s
2× RTX 309070B Q4_K_M43.2 GB约 28 tok/s
RTX 4090Qwen3-30B-A3B Q4_K_M2.0 GB(仅激活参数)约 374 tok/s

三点解读:

  • 理论上 Q4 与 Q8 的速度比等于字节数之比(4.9 vs 8.5,约 1.7 倍)。实际收益小于理论值,因为解码并非纯带宽受限,反量化和采样都要算力;但方向是确定的——同一张卡,Q4 一定比 Q8 快,而不是「差不多」
  • MoE 模型是带宽公式的最大赢家:显存要装全部 30.5B,但每 token 只读激活的 3.3B,所以 Qwen3-30B-A3B 在 4090 上比 8B 稠密模型还快。
  • prefill(读提示词)是计算瓶颈,量化帮不上忙。如果你的主要负载是长文档问答,体感速度差异比上表小;如果是长输出(写代码、写文章),上表的差距就是真实体感。

按场景选档

场景推荐档位原因
日常对话、写作、翻译Q4_K_M盲测难以区分,省下的显存留给上下文
编程助手Q4_K_M 起步,有余量上 Q6_K长依赖链的代码里小误差会累积
数学、复杂推理Q6_K 或 Q8_0多步计算对权重噪声最敏感
Agent / 工具调用Q6_K 起步结构化输出(JSON 调用)不允许漂移
长文档 RAGQ4_K_M + q8 KV显存花在上下文上比花在权重上值
研究复现、微调基线FP16 / BF16需要与论文数字对齐时别量化

通用启发式:先保证「宽裕」再升档。 一个顶到 100% 显存、只能开 2K 上下文的 Q8,体验不如一个占 70% 显存、能开 32K 上下文的 Q6。显存余量本身就是质量——它买的是上下文长度。

实操流程

  1. 算总量:权重 = 参数量 × bit ÷ 8(上表有现成系数),加 KV 缓存(8K 约 1–3GB),加 1.5GB 开销。也可以直接用本站显存计算器,它和本文用同一套公式。
  2. 从高往低选第一个「能装下」的档:comfortable(≤80%)优先,tight(≤100%)可接受。这正是本站推荐引擎的逻辑——tight 的 Q4 优于 comfortable 的 Q2。
  3. 下载:在 Hugging Face 的 bartowski 仓库或模型官方 GGUF 仓库里,按文件名后缀抓对应档位。8B 的 Q4_K_M 约 4.9GB,普通宽带几分钟。
  4. 验证实际占用:加载后看运行时报告的显存,和公式对不上时先查 KV 缓存——很多运行时默认上下文只有 2048–4096,实际占用会显著低于按 8K 估算的值。
  5. 上下文吃紧时,先开 q8 KV 缓存(KV 占用减半,质量损失极小),再考虑降权重档位。顺序反了是新手最常见的错误。

常见误区

  • 「Q4_K_M 就是每个权重存 4 bit。」 不是。它是混合精度方案,实测平均 4.9 bit;敏感张量用了更高精度。这也是为什么它和老式 Q4_0 质量差一截。
  • 「文件体积就是显存占用。」 文件 ≈ 权重显存,但还要加 KV 缓存和约 1.5GB 运行时开销。长上下文下 KV 可以超过权重本身——Qwen3-32B 在 32K 上下文时 KV 缓存约 8.6GB。
  • 「位数减半,速度翻倍。」 只有逐 token 生成阶段与字节数近似成反比,且实际收益受算力开销稀释;prefill 几乎不吃量化红利。
  • 「超低量化(IQ2、Q2)是白捡的便宜。」 低于 Q4 后 perplexity 和质量都在恶化,模型开始编造事实。预算紧张时,正确解法是换更小的模型,不是把大模型压到 Q2。
  • 「Q8 永远值得。」 只有当 Q8 不会挤压你的上下文时才值得。为了装 Q8 而把上下文从 32K 砍到 4K,多数任务上是净亏损。

KV 缓存这个变量

量化权重只是一半的故事。KV 缓存(模型对你对话内容的工作记忆)默认是 fp16,长上下文下可能超过权重本身:Llama-3.1-8B 在 128K 上下文时 KV 缓存约 17GB,是 Q4 权重的三倍多。llama.cpp、Ollama、LM Studio 都支持 q8 KV 缓存,能把这部分占用减半且质量损失极小。上下文吃紧时,开 q8 KV 往往比降权重精度更划算——公式和完整对比见 KV 缓存指南

一句话总结

Q4_K_M 起步,显存富余升 Q6_K,数学和 Agent 任务考虑 Q8,永远优先保住上下文长度;Q4 以下只在「否则完全跑不了」时碰。 想按自己的显卡和模型算一遍,打开显存计算器,本文所有数字都来自它背后的同一套公式。

常见问题

Q4_K_M 比 Q8_0 差很多吗?

在对话和编程场景中,大多数用户盲测分不出两者。Q8 在数学、长推理链和精确指令遵循上有可测量的优势。显存够就用 Q6_K,追求性价比就用 Q4_K_M。

什么时候该用 Q2 或 Q3?

只有在其他档位都放不下的时候。低于 Q4 后质量明显下降,模型开始丢事实、丢连贯性。小模型的 Q4 通常强于大模型的 Q2。

量化只影响体积,还是也影响速度?

都影响。精度越低,每生成一个 token 需要从显存读取的字节越少,理论上速度与每 token 字节数成反比。同一张显卡上 Q4 比 Q8 快,因为生成速度受显存带宽约束。

Q4_K_M 和 Q4_0 有什么区别?

Q4_0 是老式均匀量化,所有张量都按同一方式处理;K 系(Q4_K_M 等)用「超块」结构,并给注意力、嵌入等敏感张量保留更高精度。同档位数下 K 系质量明显更好,体积差别不大,新模型直接选 K 系即可。

量化会加快提示词处理(prefill)吗?

基本不会。prefill 阶段是计算瓶颈而非带宽瓶颈,量化权重反而要先反量化回高精度再算,有时还略慢。量化的速度收益集中在逐 token 生成(decode)阶段。

来源