一句话定义
量化里最容易混的是三类东西:数值格式(FP16/BF16/INT8/INT4)、量化算法(AWQ/GPTQ)和文件格式/生态(GGUF/GGML)。位宽决定省多少,算法和格式决定怎么落地。
为什么需要区分
说“4 bit 量化”只说明了位宽,没说怎么量化、哪些张量被量化、用什么运行时。选错格式可能模型跑不起来,选错算法可能精度掉得厉害。
常见格式
- FP32:32 位浮点,精度高、显存/带宽开销最大,常用于主权重和优化器状态。
- FP16:16 位浮点,范围较小,需要 loss scaling。
- BF16:16 位浮点,尾数少但范围大,训练/推理通常更稳。
- INT8:8 位整数,配 scale/zero-point;常见于权重和激活。
- INT4 / INT2:更低比特,显存更省,但精度、离群值和算子支持更挑。
常见算法与格式
- AWQ:激活感知的权重量化,保护重要通道/权重。
- GPTQ:逐层训练后量化,用校准数据最小化重建误差。
- GGUF:llama.cpp 生态的模型文件格式,不是量化算法。
- GGML:底层张量库/生态,GGUF 建立在它之上。
- 权重量化:只压权重,激活保留高精度,部署简单。
- 激活量化:连中间激活一起压,需要硬件和算子支持。
关键取舍
- 位宽越低越省显存/带宽,但精度和硬件支持越受限。
- 离群值会放大误差;按通道/分组通常比整张量一个 scale 更稳。
- 算法好不代表运行时快;要看是否有对应 kernel。
- 训练后量化(PTQ)简单;量化感知训练(QAT)效果更好但成本高。
常见误区
- 4 bit 无损:通常只在特定模型/评测上成立。
- GGUF 是量化算法:它是文件格式;里面可以装不同量化类型。
- AWQ 和 GPTQ 一样:两者思路和实现不同。
- 位宽越低越快:没有低比特 kernel 时,反量化可能更慢。
用在哪里
- 显存/带宽受限的推理部署。
- 边缘设备、单卡服务、QLoRA 微调。
- 选模型文件时先看格式、量化类型和运行时支持。