量化校准数据应该如何选择?为什么会影响模型精度?
简化版
量化校准数据用于估计权重或激活的数值范围、scale、zero point 和重要通道。如果校准数据和真实业务分布差异很大,量化参数会偏,模型在上线任务上的精度和稳定性就会下降。
详细版
- PTQ 通常依赖少量校准样本,不需要完整训练集。
- 校准样本要覆盖真实输入长度、语言、格式、领域和边界情况。
- 激活量化对校准分布更敏感,因为激活随输入变化。
- 校准集不是评测集,二者应该分离。
- 需要比较困惑度、任务指标和人工错误类型,而不是只看单一数字。
完整版教学
这道题考察候选人是否理解量化质量不是算法单独决定的,数据分布同样关键。
一、这题真正考什么
这道题考察候选人是否理解量化质量不是算法单独决定的,数据分布同样关键。
校准用少量代表性输入估计激活或权重的范围、分位数和误差目标,从而选择 scale、zero point 与裁剪阈值。它不更新模型能力,却决定浮点分布怎样映射到有限整数格点。
二、核心机制怎么工作
量化要把连续值映射到有限整数网格。校准数据决定系统观察到的最大值、分位数、通道重要性和 outlier 分布,从而影响 scale 的选择。若校准集只包含短英文,而线上是长中文表格问答,激活范围可能完全不同。
MinMax 保留完整范围但容易被极值拉大步长;Percentile 主动裁剪长尾;MSE 或 KL 搜索在舍入误差与饱和误差间折中。静态激活量化在离线固化范围,动态量化则按请求或 token 统计,精度与运行开销不同。
三、带数字的拆解
准备用 128 条样本校准一个客服模型。若 120 条都是闲聊,只有 8 条包含订单表格,那么量化后在表格问答上可能频繁丢字段。更合理的做法是按线上流量配比抽样,并额外加入高风险边界样本。
对称量化:scale = max(abs(x)) / (2^(b-1)-1)
非对称量化:scale = (x_max - x_min) / (2^b - 1)
校准误差来源 = 分布偏移 + outlier 处理 + 样本覆盖不足
四、流程图和工程落点
可以把它拆成下面这条链路来讲:
分析线上请求分布
|
抽取代表性样本
|
加入长尾和边界样本
|
运行校准
|
量化模型
|
独立评测集验收
五、和相近方案怎么区分
| 数据类型 | 用途 | 注意点 |
|---|---|---|
| 校准集 | 估计量化参数 | 小而代表性 |
| 评测集 | 衡量质量 | 不能参与校准调参过度 |
| 训练集 | 学习参数 | PTQ 通常不用完整训练 |
| 线上样本 | 分布参考 | 需脱敏和合规 |
六、上线或训练时最容易踩的坑
-
不要用评测集反复挑量化参数,否则会过拟合评测。
-
短 prompt 校准出的参数,不一定适合长上下文 decode。
-
校准预处理必须与线上完全一致,包括 chat template、截断、图像尺寸和特殊 token,否则统计的是另一套输入。
-
只看整模型平均误差会漏掉敏感层,应做逐层替换与长尾任务回归来定位混合精度保留点。
七、常见误区与追问
- 误区:校准数据越多越一定好。 规模超过分布覆盖需求后收益很小;大量偏科样本反而会让范围向高频场景倾斜。
- 误区:校准集可以随便选几段维基百科。 真实请求的语言、长度、格式和领域决定激活分布,通用文本无法代表代码或结构化输出。
- 误区:只量化权重就完全不需要数据。 简单 round-to-nearest 可以不用数据,但 GPTQ、AWQ 等权重量化仍靠校准激活估计输出敏感度。
- 追问:为什么激活量化比权重量化更依赖校准? 激活随输入动态变化且常含 outlier,固定 scale 必须覆盖线上分布;权重是静态张量,可直接完整扫描。
- 追问:校准样本数量通常如何权衡? 逐步增加样本并观察 scale、裁剪率和任务指标是否稳定;稳定后继续增加只会提高转换成本。
- 追问:如何发现校准集和线上分布不一致? 比较 token 长度、语言、领域、激活分位数和饱和率,并用线上回放样本做独立验证。
八、加强记忆
记住“量化是在给数值尺子定刻度,校准数据决定尺子看过什么”。尺子没见过线上形态,刻度就可能不合适。
校准的本质是拿代表性输入决定“整数尺子的刻度”。记住覆盖比分量更重要,范围太宽浪费分辨率,裁剪太狠产生饱和,最终选择必须回到任务质量。