量化校准集选择校准数据不对INT8 指标会很诚实地下滑一、量化误差从校准集开始模型量化常用校准集估计激活范围。如果校准数据不能代表真实输入分布量化尺度就会偏推理指标可能明显下降。很多 INT8 部署问题不是量化算法本身差而是校准集选错。校准集要覆盖典型输入、长尾输入和关键业务场景。只随机抽一小批样本不一定能覆盖激活分布。尤其是 NLP 和多模态任务输入长度、语言、格式和噪声都会影响激活。二、校准流程要可复现flowchart TD A[候选数据] -- B[分布分析] B -- C[校准集采样] C -- D[量化校准] D -- E[INT8 评测] E -- F[误差分析]校准集不是越大越好但必须有代表性。可以先分析真实流量或验证集分布再按长度、类别、来源和难度分层采样。分层采样比纯随机更稳。校准集版本要记录。量化模型上线后如果指标下降需要知道当时用了哪些样本、采样规则是什么、预处理版本是什么。没有版本记录问题很难复现。三、代码要固定采样策略def stratified_sample(items, key_fn, per_group): groups {} for item in items: groups.setdefault(key_fn(item), []).append(item) sampled [] for group_items in groups.values(): sampled.extend(group_items[:per_group]) return sampled实际项目中采样要结合随机种子和分层规则。上面只是示意真实实现还要打乱、去重、记录样本 ID。关键是不要让校准集成为一个不可追踪的临时文件。calibration_set: size: 1024 strategy: stratified_by_length_and_domain seed: 20260704量化报告应记录校准集摘要而不是只记录最终 INT8 指标。四、误差分析要定位层和样本量化后指标下降要看哪些样本错了哪些层误差大。可能是某些长输入、罕见类别或特殊符号导致激活范围异常。只看总体指标无法决定是否调整校准集、保留部分层 FP16还是换量化策略。还要做 FP32 与 INT8 输出对比。分类任务可以看 logits 差异生成任务可以看 token 分布和最终文本质量。量化部署不是导出成功就结束。校准集还要覆盖异常但合法输入。比如极长文本、空字段、低质量图片、噪声语音和冷门类别。这些样本在平均流量里占比不高但线上很容易触发质量问题。只校准“干净样本”模型会在脏输入上更脆弱。不同层的量化敏感性不同。Embedding、LayerNorm、激活峰值明显的层可能需要更谨慎的策略。若全模型 INT8 下降明显可以尝试混合精度量化保留敏感层高精度。还要比较校准集大小曲线。随着校准样本从 128 增加到 512、1024指标是否趋于稳定。如果指标仍然大幅波动说明校准集分布或量化策略可能有问题。最后量化评测应包含延迟和吞吐。质量保持但性能收益很小也不一定值得上线。部署优化永远要同时看质量、速度和资源。五、总结量化校准集要代表真实输入分布并记录采样规则、随机种子、预处理版本和样本 ID。指标下降时要做层级和样本级误差分析。INT8 很诚实。校准数据不对它会把分布偏差直接反映到模型质量上。
量化校准集选择:校准数据不对,INT8 指标会很诚实地下滑
量化校准集选择校准数据不对INT8 指标会很诚实地下滑一、量化误差从校准集开始模型量化常用校准集估计激活范围。如果校准数据不能代表真实输入分布量化尺度就会偏推理指标可能明显下降。很多 INT8 部署问题不是量化算法本身差而是校准集选错。校准集要覆盖典型输入、长尾输入和关键业务场景。只随机抽一小批样本不一定能覆盖激活分布。尤其是 NLP 和多模态任务输入长度、语言、格式和噪声都会影响激活。二、校准流程要可复现flowchart TD A[候选数据] -- B[分布分析] B -- C[校准集采样] C -- D[量化校准] D -- E[INT8 评测] E -- F[误差分析]校准集不是越大越好但必须有代表性。可以先分析真实流量或验证集分布再按长度、类别、来源和难度分层采样。分层采样比纯随机更稳。校准集版本要记录。量化模型上线后如果指标下降需要知道当时用了哪些样本、采样规则是什么、预处理版本是什么。没有版本记录问题很难复现。三、代码要固定采样策略def stratified_sample(items, key_fn, per_group): groups {} for item in items: groups.setdefault(key_fn(item), []).append(item) sampled [] for group_items in groups.values(): sampled.extend(group_items[:per_group]) return sampled实际项目中采样要结合随机种子和分层规则。上面只是示意真实实现还要打乱、去重、记录样本 ID。关键是不要让校准集成为一个不可追踪的临时文件。calibration_set: size: 1024 strategy: stratified_by_length_and_domain seed: 20260704量化报告应记录校准集摘要而不是只记录最终 INT8 指标。四、误差分析要定位层和样本量化后指标下降要看哪些样本错了哪些层误差大。可能是某些长输入、罕见类别或特殊符号导致激活范围异常。只看总体指标无法决定是否调整校准集、保留部分层 FP16还是换量化策略。还要做 FP32 与 INT8 输出对比。分类任务可以看 logits 差异生成任务可以看 token 分布和最终文本质量。量化部署不是导出成功就结束。校准集还要覆盖异常但合法输入。比如极长文本、空字段、低质量图片、噪声语音和冷门类别。这些样本在平均流量里占比不高但线上很容易触发质量问题。只校准“干净样本”模型会在脏输入上更脆弱。不同层的量化敏感性不同。Embedding、LayerNorm、激活峰值明显的层可能需要更谨慎的策略。若全模型 INT8 下降明显可以尝试混合精度量化保留敏感层高精度。还要比较校准集大小曲线。随着校准样本从 128 增加到 512、1024指标是否趋于稳定。如果指标仍然大幅波动说明校准集分布或量化策略可能有问题。最后量化评测应包含延迟和吞吐。质量保持但性能收益很小也不一定值得上线。部署优化永远要同时看质量、速度和资源。五、总结量化校准集要代表真实输入分布并记录采样规则、随机种子、预处理版本和样本 ID。指标下降时要做层级和样本级误差分析。INT8 很诚实。校准数据不对它会把分布偏差直接反映到模型质量上。