21. Quantization Theory and INT4 INT8 | 量化理论与 INT4/INT8 (Quantization Theory & Low-Bit Inference)
难度: Medium | 标签: 量化, 推理加速, 显存压缩 | 目标人群: 进入 Chapter 2 / 3 前希望补齐低比特推理直觉的学习者
这一页不是要把量化算法讲成论文综述,而是要回答一个更实际的问题:为什么把权重从 FP16 压到 INT8 / INT4 后,模型能明显变小、推理也可能更快,但效果又不会“简单地等比例下降”。
这页要建立的直觉
- 量化本质上是在用更少的比特表达近似值
- 量化收益通常同时来自两件事:
- 参数和缓存占用下降
- 带宽压力下降
- 量化代价通常也同时来自两件事:
- 数值误差增加
- 校准和转换流程更复杂
Q1:为什么量化能显著减少显存和带宽压力?
点击展开查看解析
如果把权重从 FP16 压到 INT8,单个参数的存储从 2 Bytes 变成 1 Byte,理论上权重显存约减半;如果压到 INT4,则理论上进一步降到 0.5 Byte,权重体积还会继续下降。
一个最直观的 7B 模型例子可以帮助建立数量级直觉:
| 权重格式 | 每参数字节数 | 7B 模型权重显存 | 相对 FP16 |
|---|---|---|---|
| FP16 | 2 Bytes | 14 GB | 1x |
| INT8 | 1 Byte | 7 GB | 0.5x |
| INT4 | 0.5 Byte | 3.5 GB | 0.25x |
这对推理很重要,原因不只是“模型更小了”,还因为:
- 显存占用下降后,更大的 batch 或更长上下文更容易装进去
- 读权重时需要搬运的数据更少,HBM 带宽压力也会下降
- 在一些带宽受限的场景里,吞吐会明显改善
但要注意,量化通常不会让所有成本都按比特数线性下降:
- 激活值可能仍然保留更高精度
- 部分层会保留 FP16 / BF16 累加
- 反量化和 scale 处理也有额外开销
- INT8 / INT4 是否真的加速,还取决于硬件是否原生支持低比特矩阵运算;如果硬件没有对应 Tensor Core / MMA 支持,量化有时只会省显存,不一定省时间
所以量化的收益通常是“显存更小 + 带宽更低 + 吞吐更高”,而不是单纯的“位宽缩小了多少,速度就提升多少”。
Q2:对称量化、非对称量化、per-tensor、per-channel 有什么区别?
点击展开查看解析
最常见的量化写法可以写成:
q = round(x / scale) + zero_point其中:
scale决定数值映射比例zero_point决定零点是否偏移
常见组合有四种:
- 对称量化:
zero_point = 0,实现简单,常用于权重 - 非对称量化:保留
zero_point,更适合分布偏移明显的数据 - per-tensor:整个张量共用一组 scale
- per-channel:每个通道单独一组 scale,通常精度更好,但元数据更多
经验上:
- 权重量化常常更适合 per-channel
- 激活量化常常更依赖校准数据
- 极低比特时,误差主要不来自平均值,而来自离群值和分布偏斜
为什么激活更难量化?
- 权重分布通常相对稳定,离群值更少
- 激活会随 token、层和上下文变化,分布波动更大
- 一些激活通道可能出现明显离群值,直接压到低比特时更容易失真
- 这也是为什么很多方案会做权重-激活协同处理,或者引入 SmoothQuant 这类预处理思路
这也是为什么真正落地时,量化不是“把 dtype 改小”这么简单,而是要同时决定 scale、zero point、分组粒度和累加精度。
Q3:PTQ、QAT、GPTQ、AWQ、GGUF 该怎么理解?
点击展开查看解析
可以把它们粗略分成两类:
- PTQ(Post-Training Quantization):训练后量化,不重新训练大模型
- QAT(Quantization-Aware Training):训练时就把量化误差考虑进去
进一步细分时:
- GPTQ:偏权重量化,利用少量校准数据做近似二阶修正,适合降低权重量化误差
- AWQ:关注激活分布和通道重要性,尝试保护“更敏感”的权重通道,常见做法是优先保住少量关键通道
- GGUF:更偏部署格式与打包方式,常用于本地推理生态,里面会包含量化参数、元数据和 mmap 友好的组织方式
不要把这些名字理解成“谁更先进”的单选题,它们更像是不同约束下的工程选择:
- 如果你更在意部署方便,格式化和兼容性很重要
- 如果你更在意低比特精度,权重分布和校准策略很重要
- 如果你更在意训练后直接落地,PTQ 往往更实用
Q4:量化什么时候要考虑 QAT?
点击展开查看解析
QAT(Quantization-Aware Training)不是第一选择,但它在以下场景里很有价值:
- PTQ 之后精度损失过大,比如困惑度或任务指标下降明显
- 模型本身对低比特特别敏感,尤其是较小模型或生成类任务
- 你有足够的训练数据和算力,能够接受再训练或微调成本
一句话判断:
- 如果目标是“快速落地”,先用 PTQ
- 如果目标是“把低比特精度尽量拉回来”,再考虑 QAT
QAT 的代价是训练流程更复杂、成本更高,但它能把量化误差直接纳入训练过程,是 PTQ 之外的重要补救路线。
Q5:量化最常见的误区是什么?
点击展开查看解析
常见误区有四个:
“INT4 一定比 INT8 好”
不对。比特更低并不自动更优,误差和硬件支持都可能让 INT4 更难用。“量化只是改一下 dtype”
不对。真正的量化会涉及校准、分组、反量化、累加精度和 kernel 支持。“量化一定不影响效果”
不对。不同层、不同通道、不同模型对低比特的容忍度差别很大。“量化只影响权重”
也不完整。推理时真正卡住性能的常常还包括激活、缓存和带宽。
这一页只要记住一句话:量化的目标不是“把精度尽可能压低”,而是在“误差可接受”的前提下把显存和带宽压力降下来。
小结
如果你已经能回答下面三个问题,就说明这一页过关了:
- 为什么量化能减小显存
- 为什么量化不等于简单改 dtype
- 为什么不同量化方法适合不同部署目标
这也正是后面 Chapter 2 / 3 进入推理优化和工程落地时最需要的前置直觉。
配合练习
这页建议和后面的 练习页 一起学。这页的练习可以围绕下面三个目标展开:
- 做一个简单的 per-tensor 量化实现,观察 FP16 / INT8 / INT4 的显存差异
- 用校准数据跑一次 GPTQ / AWQ 风格的量化流程,看看误差如何变化
- 对比不同量化格式在同一模型上的推理速度和效果损失
如果后面要补 Notebook,优先围绕这三个目标展开,再逐步补更复杂的量化细节。
