01 / 直觉
像把照片从 PNG 存成 JPEG
你不会用一整张硬盘只存一张自拍。同理,也不是每个权重都需要 16 bit 浮点那么精细。
- 浮点 FP32 / FP16 / BF16:训练常用,动态范围大。
- 整数 INT8 / INT4:推理侧常见,用 scale 把整数映射回近似浮点。
- GGUF / AWQ / GPTQ:你下载模型时看到的格式名,多半就是量化方案。
程序员类比:
有点像把 float64 数组改成 int8 + 一个全局 scale,
内存占用直线下降;反量化后再算,或干脆用整数算子。
02 / 动手
拖位数,看一个数怎么被「收进格子」
下面把区间 [-1, 1] 按位数切成若干格。数值会吸附到最近的格点。
03 / 取舍
丢的是「小差别」,不是全部语义
通常还能用
- 日常问答、摘要、一般聊天
- INT8 往往接近 FP16 体验
- INT4 在很多开源社区评测里仍可用
更容易掉点
- 复杂推理、长链算术
- 小模型比大模型更敏感
- 激进混合量化 / 极低 bit
不是「位数越低越好」:
目标是:在你的硬件上跑得动,且质量够用。
很多人默认试 INT8;还放不下再试 INT4,并拿真实任务测,而不是只看 ppl。
04 / 显存
同样 7B,不同格式差多少?
拖参数量和精度,看权重大约占多少显存(不含激活、不含 KV Cache)。
估算公式:
显存 ≈ 参数量 × bits / 8。
实际还要加 CUDA context、激活、KV Cache,以及框架开销——这里只给量级感。
05 / 小结
四句话带走
- 量化 = 用更少 bit 存权重,换显存和体积。
- FP16 → INT8 → INT4 越省越粗,质量要实测。
- 7B INT4 这种写法,先按「参数 × 位数」心里有底。
- 放不下先量化,质量不够再换更大模型或改提示词——不是一条线性路径。