Quantization · 交互图解

把权重从「小数」
压成更省的格子

大模型权重动辄几百亿个浮点数。 量化:用更少的 bit 存每个数——文件更小、显存更省、有时还更快。 代价是精度:格子粗了,细节会丢一点。

FP16 → INT8 → INT4
位数越低越省
约 2× / 4×
相对 FP16 的体积比
精度会掉
强任务更敏感

像把照片从 PNG 存成 JPEG

你不会用一整张硬盘只存一张自拍。同理,也不是每个权重都需要 16 bit 浮点那么精细。

程序员类比: 有点像把 float64 数组改成 int8 + 一个全局 scale, 内存占用直线下降;反量化后再算,或干脆用整数算子。

拖位数,看一个数怎么被「收进格子」

下面把区间 [-1, 1] 按位数切成若干格。数值会吸附到最近的格点。

量化格子实验台
拖数值和位数 · 看误差
原始
0.3700
量化后
绝对误差
拖动位数试试。

丢的是「小差别」,不是全部语义

通常还能用

  • 日常问答、摘要、一般聊天
  • INT8 往往接近 FP16 体验
  • INT4 在很多开源社区评测里仍可用

更容易掉点

  • 复杂推理、长链算术
  • 小模型比大模型更敏感
  • 激进混合量化 / 极低 bit
不是「位数越低越好」: 目标是:在你的硬件上跑得动,且质量够用。 很多人默认试 INT8;还放不下再试 INT4,并拿真实任务测,而不是只看 ppl。

同样 7B,不同格式差多少?

拖参数量和精度,看权重大约占多少显存(不含激活、不含 KV Cache)。

显存估算器
拖参数量 · 切精度
权重显存(粗估)
估算公式: 显存 ≈ 参数量 × bits / 8。 实际还要加 CUDA context、激活、KV Cache,以及框架开销——这里只给量级感。

四句话带走

  1. 量化 = 用更少 bit 存权重,换显存和体积。
  2. FP16 → INT8 → INT4 越省越粗,质量要实测。
  3. 7B INT4 这种写法,先按「参数 × 位数」心里有底。
  4. 放不下先量化,质量不够再换更大模型或改提示词——不是一条线性路径。