← 返回题目列表

量化校准数据应该如何选择?为什么会影响模型精度?

高频 中等 第 5 / 25 题 更新于 2026/09/25
模型压缩量化校准PTQ评测数据分布
学习 AI 实战项目

简化版

量化校准用代表性前向样本确定激活的范围、裁剪阈值、scale/zero point,或为 GPTQ、AWQ 等方法提供输入统计。样本分布偏离线上时,观察器会给整数网格定错刻度;但只扩大范围也不够,还要在裁剪极值与保留普通值分辨率之间选择合适估计器。

详细版

  • 先复现生产预处理,再按语言、长度、任务、格式和风险切片抽样;条数和总 Token 都不是“代表性”的替代品。
  • MinMax 不裁剪但容易被极值拉宽;Percentile 会牺牲少量尾部;MSE/KL 类方法搜索使量化前后误差或分布差异较小的阈值。
  • 激活会随请求变化,静态 scale 对校准分布尤其敏感;动态量化适应性更强,却增加统计和 kernel 开销。
  • 校准集只负责拟合量化参数,配置选择与最终报告必须使用隔离的验证/测试集。

完整版教学

记忆钩子:校准既要回答“拿什么数据看分布”,也要回答“用哪把尺子定范围”;代表性解决分布偏差,裁剪准则解决极值与分辨率冲突。

一、校准在量化链路中的位置

校准用一批前向样本驱动 Observer,收集激活范围、直方图或通道统计,再据此固化 scale、zero point 与裁剪阈值。它通常不通过任务 Loss 更新模型权重,所以不等于微调;但它决定浮点值怎样投到有限网格,直接影响饱和误差和舍入误差。权重可完整扫描,输入相关激活却只能由校准分布近似。

二、核心机制怎么工作

量化要把连续值映射到有限整数网格。校准数据决定系统观察到的最大值、分位数、通道重要性和 outlier 分布,从而影响 scale 的选择。若校准集只包含短英文,而线上是长中文表格问答,激活范围可能完全不同。

MinMax 保留完整范围但容易被极值拉大步长;Percentile 主动裁剪长尾;MSE 或 KL 搜索在舍入误差与饱和误差间折中。静态激活量化在离线固化范围,动态量化则按请求或 token 统计,精度与运行开销不同。

三、一个“保极值还是保分辨率”的算例

假设一层绝大多数激活位于 [-1,1],但 0.1% 的值达到 16。对称 INT8 若用 MinMax,scale 约为 16/127≈0.126,区间 [-1,1] 只有约 16 个量化步长;若把范围裁到 2,scale 约为 2/127≈0.0157,普通值分辨率提高约 8 倍,却会把超过 2 的值饱和。哪个更好取决于这些极值是否承载关键能力,需要用独立任务集选择。

对称量化:scale = max(abs(x)) / (2^(b-1)-1)
非对称量化:scale = (x_max - x_min) / (2^b - 1)
校准误差来源 = 分布偏移 + outlier 处理 + 样本覆盖不足

四、样本如何覆盖真实执行分布

按线上流量建立语言、任务、输入长度、Prompt 模板、结构化格式和风险等级的切片,再分层抽样并给关键长尾保底。校准前必须使用生产同款 Tokenizer、Chat Template、截断、Padding 和多模态预处理;否则 Observer 看到的是另一条执行链路。样本要去重并记录来源与版本,涉及线上数据时还需授权、脱敏和保留期限控制。

分析线上请求分布
   |
抽取代表性样本
   |
加入长尾和边界样本
   |
运行校准
   |
量化模型
   |
独立评测集验收

五、MinMax、Percentile、MSE 与 KL 怎样选

方法目标主要取舍
MinMax覆盖观测极值不饱和,但离群值会放大步长
Percentile丢弃指定尾部简单可控,但阈值需验证
MSE 搜索降低重构均方误差平均误差小不保证任务最好
KL/分布搜索近似原分布依赖直方图与实现细节

方法还要与粒度联动:per-tensor 的一个极值会影响整张量,per-channel/per-group 能隔离局部范围,却增加元数据和 kernel 复杂度。不存在脱离模型与部署格式的通用最佳 Observer。

六、静态与动态激活量化的边界

静态量化把校准得到的 scale 固化,运行开销低,但输入分布漂移会增加饱和或分辨率浪费。动态量化按请求、Token 或块重新估计范围,通常更能适应变化,却要付出统计、同步和更复杂 kernel 的成本。权重静态不意味着整个 W8A8 系统都可用静态范围;应按目标硬件支持和真实流量决定。

七、如何把校准与评测彻底隔离

校准集用来拟合 scale,验证集用来比较裁剪法、group size 和混合精度,最终测试集只用于一次无偏报告。若反复查看同一评测集挑阈值,它事实上已经变成验证集。验收除困惑度外还要看代码、数学、长上下文、安全、Schema/工具成功率,并在目标硬件记录饱和率、TTFT、TPOT、吞吐与显存。

八、常见误区与追问

  • 误区:校准数据越多越一定好。 规模超过分布覆盖需求后收益很小;大量偏科样本反而会让范围向高频场景倾斜。
  • 误区:校准集可以随便选几段维基百科。 真实请求的语言、长度、格式和领域决定激活分布,通用文本无法代表代码或结构化输出。
  • 误区:只量化权重就完全不需要数据。 简单 round-to-nearest 可以不用数据,但 GPTQ、AWQ 等权重量化仍靠校准激活估计输出敏感度。
  • 追问:为什么激活量化比权重量化更依赖校准? 激活随输入动态变化且常含 outlier,固定 scale 必须覆盖线上分布;权重是静态张量,可直接完整扫描。
  • 追问:校准样本数量通常如何权衡? 逐步增加样本并观察 scale、裁剪率和任务指标是否稳定;稳定后继续增加只会提高转换成本。
  • 追问:如何发现校准集和线上分布不一致? 比较 token 长度、语言、领域、激活分位数和饱和率,并用线上回放样本做独立验证。

九、加强记忆

把校准串成“复现生产预处理 → 分层抽样 → Observer 收集统计 → 选择裁剪与粒度 → 固化量化参数 → 独立集验收”。数据决定尺子看过什么,MinMax/Percentile/MSE/KL 决定怎样刻度;范围过宽浪费普通值分辨率,裁剪过狠又会让关键极值饱和。最终不能以张量误差或校准集得分收尾,必须回到真实能力与目标 kernel。