2. 量化基础概念

在模型部署中,量化是把高精度浮点参数和激活值映射到低位宽整数表示的过程。理解量化,首先要区分“浮点表示”和“定点表示”这两种数值表达方式。浮点数由符号位、指数位和尾数位组成,例如 FP32 用 1 位符号、8 位指数、23 位尾数,能表示极大和极小的动态范围,但存储和计算开销高。定点表示则把小数点位置固定,通常用整数加一个缩放因子(scale)和零点(zero point)来还原真实值,例如 INT8 用 8 位整数表示,配合 scale 把整数映射回浮点区间。定点表示硬件友好、功耗低、吞吐高,但动态范围有限,需要校准数据来确定合适的映射参数。

量化通用公式:
真实值 ≈ (整数 − zero_point) × scale
其中 scale 决定量化步长,zero_point 决定浮点 0 对应的整数位置。

对称量化与非对称量化

对称量化把浮点区间映射到以 0 为中心的整数区间,通常 zero_point = 0,scale 由最大绝对值决定。例如 INT8 对称量化范围为 [−127, 127],适合权重这类近似零均值分布的数据。非对称量化则允许 zero_point 不为 0,把 [min, max] 映射到 [q_min, q_max],能更精细地覆盖非对称分布,例如 ReLU 后的激活值全为非负,非对称量化可以避免一半整数区间被浪费。两者没有绝对优劣:对称量化实现简单、计算快,非对称量化精度更高但需要额外处理 zero_point。

量化粒度:从 per-tensor 到 per-channel

量化粒度决定 scale 和 zero_point 的共享范围。Per-tensor 对整个张量使用同一组参数,实现最简单,但不同通道动态范围差异大时误差明显。Per-channel 对每个输出通道单独计算 scale,能显著降低权重量化误差,是卷积和全连接层的常用选择。更细的还有 per-group,例如按 128 个元素一组,常见于大语言模型的权重量化。粒度越细,精度越高,但元数据存储和计算复杂度也上升。

量化基础概念全景 浮点 vs 定点表示 FP32:1 符号 + 8 指数 + 23 尾数 动态范围大,计算开销高 INT8:整数 + scale + zero_point 硬件友好,动态范围有限 对称 vs 非对称量化 对称:zero_point = 0 范围 [−127, 127],适合权重 非对称:zero_point ≠ 0 范围 [q_min, q_max],适合激活 量化粒度 Per-tensor:整张量共享 scale Per-channel:每通道独立 scale Per-group:每 128 元素一组 量化误差来源与影响 舍入误差 浮点映射到整数格点 步长越大误差越大 截断误差 超出范围被裁剪 离群值导致精度损失 分布不匹配 校准数据与真实数据 分布差异引入偏差 累积误差 多层传播逐层放大 激活量化更敏感 量化 = 表示选择 + 映射策略 + 粒度控制 + 误差管理

量化误差来源与案例

量化误差主要来自四类:舍入误差、截断误差、分布不匹配和累积误差。舍入误差是浮点值映射到最近整数格点时产生的偏差,步长越大误差越明显。截断误差发生在数值超出量化范围时,离群值被裁剪到边界,导致信息丢失。分布不匹配指校准数据与真实推理数据分布不一致,使 scale 和 zero_point 偏离最优值。累积误差则是多层网络中误差逐层传播放大,激活量化通常比权重量化更敏感。

以一个卷积层为例,权重近似零均值,采用对称 per-channel INT8 量化,scale 按每个输出通道的最大绝对值计算;激活经过 ReLU 后全为非负,采用非对称 per-tensor 量化,zero_point 映射到 0 附近。若激活中存在极端离群值,per-tensor 的 scale 会被拉大,导致大多数正常值量化步长过粗,精度下降。此时可改用 per-channel 或对激活做裁剪,把离群值限制在合理分位数内。

# 对称 per-channel 权重量化示例
scale = max(abs(weight_channel)) / 127
q_weight = round(weight_channel / scale)
q_weight = clamp(q_weight, -127, 127)

# 非对称 per-tensor 激活量化示例
scale = (max_val - min_val) / 255
zero_point = round(-min_val / scale)
q_act = round(act / scale) + zero_point
q_act = clamp(q_act, 0, 255)

常见误区与复盘

  • 误区一:量化位宽越低越好。INT4 或 INT8 能降低带宽和功耗,但精度损失需要评估。权重可低至 4 位,激活通常保留 8 位。
  • 误区二:对称量化一定优于非对称。对称实现简单,但非对称对非负激活更友好,选择应基于数据分布。
  • 误区三:per-tensor 足够用。当通道间动态范围差异大时,per-channel 能显著降低误差,尤其对权重。
  • 误区四:校准数据随便选。校准数据应覆盖真实场景分布,否则 scale 和 zero_point 会偏离,导致精度下降。
实践建议:先分析权重和激活的分布,再决定对称/非对称与量化粒度;用校准集统计 min/max 或分位数,最后通过精度评估验证量化误差是否可接受。
概念 核心参数 适用对象 优点 注意点
对称量化 scale,zero_point=0 权重 实现简单、计算快 非对称分布浪费范围
非对称量化 scale,zero_point 激活 覆盖非对称分布 需额外处理零点
Per-tensor 整张量一组参数 激活、简单权重 元数据少 通道差异大时误差高
Per-channel 每通道一组参数 卷积/全连接权重 精度高 存储和计算开销增加

总结来看,量化基础概念围绕“表示—映射—粒度—误差”四个维度展开。浮点与定点决定数值表达方式,对称与非对称决定映射策略,量化粒度决定参数共享范围,误差来源决定精度评估重点。只有把这四者结合,才能为后续校准数据选择、精度评估和部署验证打下可靠基础。