数值格式与量化基础
一句话定义
量化(Quantization)是把模型数值从高位宽格式(FP32/FP16)映射到低位宽格式(INT8/INT4/FP8)以减少存储与带宽的过程,本质是用可控的数值误差换显存与速度。
为什么重要
显存账本(kp-004)里权重字节数由每参数字节决定:FP16→INT4 直接省 4 倍显存。decode 瓶颈是读取带宽,字节变少意味着 decode 近似线性变快。这是所有推理优化里"性价比最高、最先做"的一项,也是端侧部署的前置条件。
前置知识
- 二进制位宽与浮点数"符号位+指数位+尾数位"的直觉。
- kp-003(decode 读权重主导)。
核心概念
- FP32(1+8+23 位)、FP16(1+5+10)、BF16(1+8+7):BF16 与 FP32 同指数位宽,动态范围相同但尾数少,训练与推理都不易溢出。
- FP8:E4M3(偏精度)与 E5M2(偏范围)两种变体,Hopper 及之后 GPU 的原生支持。
- INT8/INT4:均匀网格上的整数,需要一个 scale(步长)与可选 zero-point(零点)来还原。
- PTQ(训练后量化) vs QAT(量化感知训练):LLM 时代以 PTQ 为主,不动训练流程。
- W4A16:权重 4-bit、激活 16-bit 的 weight-only 方案,LLM 推理主流。
原理与机制
量化误差来自"连续值落到离散网格"的舍入噪声,其方差只由步长 s 决定(≈s²/12)。降误差因此只有两条路:把网格变细(提高位宽或缩小分组,让 s 变小),或把数值分布搬移到网格密处(缩放、零点、误差反馈)。后续 GPTQ 与 AWQ 正是这两条路上的高级形态——理解了"一切手段都在改 s 或改分布",量化论文就不难读了。
公式与模型
仿射量化(带零点):
对称量化(z=0,权重量化常用):
量化噪声:均匀网格下误差近似服从 [−s/2, s/2] 均匀分布,噪声方差 ≈ s²/12。网格越细(位宽 b 越大),s 越小,误差平方随位宽每加一降低约 4 倍——这解释了为什么 8-bit 通常近无损而 2-bit 往往崩坏。
直观类比
FP32 是带很多小数位的尺子,INT4 是只有 16 个刻度的尺子:量的东西范围一致时读数差不多,但若有少数几个离群值把"最大刻度"撑得很大,多数正常值的读数误差就会被放大——这正是 LLM 权重量化的核心难点(激活离群值,见 kp-006)。
实例或案例
同一个 7B 权重矩阵的存储:FP32 28GB → FP16 14GB → INT8 7GB → INT4 3.5GB。而实测 decode 速度大约按"读取字节比例"受益:INT4 相比 FP16 常见 1.5–2.5 倍提升(受 kernel 与反量化开销折损,不会是理论的 4 倍)。
常见误区
- "BF16 和 FP16 精度一样":BF16 尾数更少、动态范围更大;两者互换要看硬件支持与算子。
- "量化一定明显掉点":8-bit 与好的 4-bit 分组量化通常困惑度增幅在百分之几量级,粗粒度(per-tensor)INT4 才容易崩。
- "位宽减半速度就翻倍":速度由读取字节与 kernel 效率共同决定,weight-only 量化在 decode 受益大、在 compute-bound 的 prefill 受益有限。
自测题
- 计算 13B 模型 INT4(每参数 0.5 字节)的权重大小。
要点:6.5GB。
- 为什么对称量化常用于权重、非对称常用于激活?
要点:权重分布大致对称、省去零点更简单;激活可能整体偏移,加零点能覆盖偏移。
- 量化噪声方差与步长 s 的关系是什么?
要点:≈ s²/12,s 越小噪声越小。
与其他知识点的关系
kp-006 讲怎么为权重选 scale/分组;kp-007、kp-008 是两种降低 4-bit 误差的进阶方法;kp-026 的 GGUF 量化档位是本页概念在端侧的落地。
延伸阅读
《LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale》(Dettmers 等,2022)首次系统指出 LLM 激活离群值问题,是理解后续所有量化论文的起点。