Skip to content

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
FP162 Bytes14 GB1x
INT81 Byte7 GB0.5x
INT40.5 Byte3.5 GB0.25x

这对推理很重要,原因不只是“模型更小了”,还因为:

  • 显存占用下降后,更大的 batch 或更长上下文更容易装进去
  • 读权重时需要搬运的数据更少,HBM 带宽压力也会下降
  • 在一些带宽受限的场景里,吞吐会明显改善

但要注意,量化通常不会让所有成本都按比特数线性下降:

  • 激活值可能仍然保留更高精度
  • 部分层会保留 FP16 / BF16 累加
  • 反量化和 scale 处理也有额外开销
  • INT8 / INT4 是否真的加速,还取决于硬件是否原生支持低比特矩阵运算;如果硬件没有对应 Tensor Core / MMA 支持,量化有时只会省显存,不一定省时间

所以量化的收益通常是“显存更小 + 带宽更低 + 吞吐更高”,而不是单纯的“位宽缩小了多少,速度就提升多少”。

Q2:对称量化、非对称量化、per-tensor、per-channel 有什么区别?

点击展开查看解析

最常见的量化写法可以写成:

text
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,优先围绕这三个目标展开,再逐步补更复杂的量化细节。

Released under the MIT License.