PTQ 校准集需要多大?如何选样本?
简化版
PTQ 校准集没有固定“128 条就够”的答案。它不是为了重新训练,而是估计权重/激活范围、Outlier 和量化参数;所需规模取决于模型、位宽、量化粒度、激活是否量化及线上分布复杂度。
优先保证代表性,再增加数量:按语言、任务、输入长度、格式和安全长尾分层抽样,去重且与最终评测集隔离。逐步增加 32、64、128、256… 个样本,观察 Scale、裁剪率和验证质量是否稳定,在边际收益趋平时停止。
详细版
production profile -> stratified sample -> collect activation stats
-> fit scales/clipping -> quantize
-> independent quality & hardware benchmark
| 因素 | 对校准规模的影响 |
|---|---|
| Weight-only | 通常较小,部分算法仍需激活样本 |
| W8A8/低比特激活 | 更依赖覆盖 |
| 长上下文 | 需覆盖长度与位置 |
| 多语言/多任务 | 每个关键切片都需样本 |
| Outlier 明显 | 需稳定估计尾部 |
样本条数不如有效 Token 和切片覆盖有意义。必须用独立验证集评估平均、长尾、安全、格式与目标硬件性能,避免在校准数据上挑配置再报告同一数据结果。
完整版教学
1. 校准集在 PTQ 中做什么
它用于估计张量分布、Scale、Zero Point、裁剪阈值,或为 GPTQ/AWQ 等算法提供激活与误差信息。
它不是微调集,通常不需要标签,但输入分布必须能代表部署负载。
算法读取的是前向传播产生的统计,因此样本答案是否完整通常不如 Prompt 覆盖重要;不过需要 Loss/Hessian 或序列级选择的算法,仍可能使用目标 Token。
2. 为什么没有固定样本数
单一英语分类与多语言长上下文 Agent 的分布复杂度不同;INT8 与 INT4 对统计误差的容忍也不同。
因此答案应是收敛实验与覆盖标准,而不是一个脱离任务的魔法数字。
3. 条数还是 Token 数
十条 32K 文档与十条 100 Token 问题提供的激活观测量不同。记录样本数、总 Token 和长度分布。
effective_coverage = task × language × length × format × risk
不能仅靠总 Token 掩盖某关键切片完全缺失。
4. 如何从线上分层抽样
按任务、语言、租户类型、输入长度、结构化格式和风险等级建立桶,再按实际流量加关键长尾保底。
隐私数据先授权和脱敏;同一模板与重复请求降采样,避免统计被热点重复内容支配。
抽样 Manifest 保存每个桶的目标比例、实际数量和来源时间窗口,确保模型升级后能复现,并能识别线上分布变化。
5. 长上下文如何校准
覆盖短、中、长和极长长度,并让关键信息出现在不同位置。只把短样本拼长,未必产生真实长文注意力分布。
Position、KV 与激活 Outlier 可能随长度变化,因此长上下文模型不能仅用 512 Token 校准。
6. Outlier 样本要不要多放
完全按流量抽样可能看不到稀有极值,完全用极端样本又会把 Scale 拉宽。采用真实分布主体加少量关键极端配额。
| 采样方式 | 优点 | 风险 |
|---|---|---|
| 纯随机 | 无偏近似流量 | 长尾缺失 |
| 均匀分层 | 覆盖充分 | 偏离真实权重 |
| 极端优先 | 发现范围边界 | 普通值分辨率下降 |
| 加权混合 | 平衡覆盖与频率 | 需管理权重 |
最终用验证集选择裁剪与 Scale。
7. 如何判断规模收敛
从小规模开始倍增,重复多次不同 Seed,观察验证指标、层级 Scale、饱和/裁剪率和配置稳定性。
若 128→256 样本质量变化已很小、不同 Seed 结论一致,可停止;若关键切片仍波动,则定向补样本而非盲目全局扩量。
8. 校准与验证为何要分开
同一批数据既估 Scale 又选方案,会对该批分布过拟合。最终质量报告必须来自未参与校准和阈值选择的评测集。
若反复查看验证集调参,还应保留最终测试集,防止决策泄漏。
9. Weight-only 也需要数据吗
简单 Min-Max 权重量化可不依赖输入,但 GPTQ 利用近似 Hessian,AWQ 根据激活识别重要通道,都需要代表性样本。
它们对规模敏感度可能小于激活量化,但分布偏差仍会影响重要性估计。
例如 AWQ 若未看到代码激活中的关键 Outlier,可能错误量化承载代码能力的通道;所以“只量权重”不等于“数据分布无关”。
10. 激活量化为什么更敏感
激活由实际输入决定,动态范围随语言、长度和任务变化。静态 W8A8 Scale 对校准覆盖更依赖。
动态量化可按请求估 Scale,降低分布漂移风险,但增加运行时开销;两者需在目标硬件比较。
11. 数据预处理必须一致
使用与生产相同 Tokenizer、Chat Template、截断、Padding 和多模态预处理。否则采到的是另一条执行链路的统计。
模型版本、Adapter 与量化配置绑定;更换任一项要重新确认校准是否适用。
12. 怎样控制成本
先用层级统计与小验证集粗筛组大小、裁剪方法,再对候选配置运行完整评测。缓存校准激活时记录模型哈希,防止误复用。
按贡献做主动采样,可优先添加让 Scale 或质量结论变化最大的切片。
13. 如何验收
比较 FP16 与候选 PTQ 的通用、长尾、安全、Schema、长上下文和校准误差;性能测目标硬件的 TTFT、TPOT、吞吐、显存。
线上灰度监控分布漂移和失败切片。新领域/语言流量显著增加时触发重新校准与回归。
PTQ 校准集追求的是足够覆盖目标激活分布,而不是达到某个看起来标准的样本条数。
14. 常见误区与追问
- 误区:所有模型用 128 条即可。 位宽、任务和分布复杂度不同。
- 误区:样本越多一定越好。 重复和分布偏差不会靠数量修复。
- 误区:校准集无需长尾。 低比特最可能伤害未覆盖切片。
- 误区:Weight-only 完全不需要数据。 GPTQ/AWQ 等仍使用激活统计。
- 误区:在校准集上质量稳定即可。 必须用独立评测集。
- 追问:何时停止加样本? 多 Seed 下 Scale 与关键指标边际变化趋平。
- 追问:条数和 Token 看哪个? 两者都看,并以切片覆盖为核心。
15. 加强记忆
- 先定用途:估范围、Outlier、Scale 与误差。
- 再看复杂度:位宽、激活、任务、语言和长度。
- 再做分层:真实流量加关键长尾保底。
- 再记 Token:条数不能代表激活覆盖。
- 再做收敛:倍增规模、多 Seed、看边际收益。
- 再隔离评测:校准、验证、最终测试分开。
- 最后上线:监控分布漂移并按需重校准。