Skip to content

01. Quantization Object and Error | 量化对象与误差直觉

页面目标

本节回答两个问题:

  • 量化到底在压什么,压的是权重、激活,还是 KV cache?
  • 为什么量化的核心不是“位宽更小”,而是“误差能不能被系统接受”?

本节的输出是量化问题定义:压缩对象、目标约束、误差来源和可接受的质量边界。没有这四项,后面的算法比较没有共同口径。

问题起点

量化最容易被误解成“把 fp16 改成 int8”。但真正决定量化效果的,不只是位宽,而是三件事:

  • 你压缩的是哪一类对象;
  • 你用什么 scale / zero-point / 粒度去表示它;
  • 量化误差会不会落在系统最敏感的位置。

如果这三件事没分清,后面的 PTQ、QAT、GPTQ、AWQ、FP8 都会变成名词堆叠。

你要先确认什么

  • 当前要压的是权重、激活,还是 KV cache。
  • 你的目标是省显存、降带宽,还是配合硬件执行栈。
  • 误差更敏感的是精度,还是服务侧吞吐和延迟。

核心矛盾

量化的核心矛盾是:低比特表示能显著降低存储和带宽成本,但也会引入表示误差。量化专题的主线,就是在“压缩率”和“误差可接受性”之间找平衡。

机制链

对一个浮点值 x 做线性量化时,常见形式是:

text
q = clamp(round(x / scale) + zero_point, q_min, q_max)
x_hat = (q - zero_point) * scale

scale 决定数值范围映射到多少个离散等级,zero_point 负责非对称范围的平移,clamp 处理超出范围的值。误差不只来自 bit width,还来自校准样本、分组或通道粒度、异常值处理以及反量化发生的位置。

决策变量改变什么需要观察的结果
bit width可表示等级数量和存储大小量化误差、模型大小、加载显存
scale / zero-point浮点范围到整数范围的映射饱和比例、均方误差、输出偏差
粒度一组数值共享一套量化参数的范围参数开销、误差分布、kernel 适配
校准数据量化参数覆盖的输入分布代表性变化时的质量稳定性

这条链只能说明误差如何产生,不能单独推出下游任务质量或 GPU 速度。后者还取决于模型结构、backend 和 workload。

演化路径

  1. 先识别压缩对象:权重、激活、KV cache。
  2. 再识别量化粒度:per-tensor、per-channel、分组量化。
  3. 再判断误差是否会放大到输出质量、训练稳定性或服务指标上。
  4. 最后才决定走 PTQ、QAT、GPTQ / AWQ、FP8 或 cache quant。

关键取舍

  • 权重量化首先影响驻留大小和带宽。
  • 激活量化更容易碰到执行路径和精度稳定性问题。
  • KV cache 量化更偏推理预算,不应与权重量化混为一谈。

证据边界

CPU 或纯 PyTorch 实验可以验证量化公式、舍入、截断、误差统计和不同粒度的差异;它不能证明目标 GPU 是否调用了低比特 kernel,也不能替代 backend 的加载、显存和吞吐测试。进入 67 量化推理与部署 后,才检查真实 artifact 和执行路径。

正文暂不嵌入未审核图示;相关图册与占位说明见 视觉资产页

文献锚点

  • 量化基础资料:对称 / 非对称量化、scale、zero-point、误差模型。
  • 量化硬件资料:低比特表示为什么会同时影响访存、吞吐和部署选型。

对应 Part 02

  • 25 W8A16 量化
  • 40 GPTQ / AWQ 权重量化
  • 41 FP8 与 KV Cache 量化
  • 67 量化推理与部署

典型阅读入口

本节要点

量化的第一步不是选算法,而是先分清压缩对象、误差来源和目标约束。

进入下一页

先进入 02 PTQ 与 QAT 的介入时机,判断量化应该发生在训练之后,还是需要被带回训练过程。

Released under the MIT License.