量化模型离线分数不错,部署到目标环境后却出现精度退化、输出截断或速度没有变化,常见原因不在某一个参数。量化同时改变权重和激活的数值表示,推理框架还会根据硬件选择算子。上线前要把精度、算子、输入长度、资源和回退放在同一张检查表里。
精度退化先按任务切片
先比较未量化学生和量化学生,使用同一批冻结样本。分类任务按少数类、边界类和长文本分组;抽取任务单独统计金额、日期、主体和空值;问答任务检查依据、拒答和引用。总体分数变化很小,并不能排除高风险类别明显退化。
失败样本保留量化前后的原始输出。如果错误发生在模型生成阶段,查量化配置和校准数据;如果模型原始输出正确、解析后错误,查类型转换和后处理。不要只保存最终业务结果,否则定位会混淆。
算子兼容要在目标框架验证
不同量化格式和推理框架支持的算子范围并不相同。某些层可能使用量化实现,另一些层回退到浮点,模型虽然成功加载,速度却没有明显变化。还有些算子在短输入上正常,长输入或特定批大小才暴露问题。
测试时记录加载日志、算子回退信息、显存或内存、首 token 延迟、完整响应延迟和吞吐。参数量变小只是静态变化,端到端速度还会受数据搬运、缓存、调度和输出长度影响。
| 检查项 | 测试动作 | 失败后的处理 |
|---|---|---|
| 量化文件 | 校验哈希与配置 | 重新打包并记录版本 |
| 算子支持 | 查看加载与回退日志 | 换格式或换框架 |
| 长输入 | 分长度重放样本 | 调上下文或保留浮点层 |
| 并发性能 | 固定并发压测 | 调批处理或回退 |
| 输出质量 | 对照失败样本 | 调校准数据或参数 |
校准数据不要只追求数量
校准数据的任务分布比数量更重要。只用短文本估计激活范围,长文档中的极端值可能被截断;只用正常回答,拒答和边界输出的范围可能没有覆盖。校准集与训练、验证和最终测试分开,并保存来源、版本和审核状态。
发现退化后,一次只改一个变量。先换一批覆盖长尾和长输入的校准样本,再比较量化配置;如果质量恢复但资源不达标,再检查算子和硬件。所有结果都在同一服务框架中复测,不能拿不同框架的数字直接比较。
蒸馏和量化的先后顺序
常见做法是先完成蒸馏,再量化学生。这样可以先得到学生相对教师的能力差异,再观察量化新增的变化。也有项目先量化教师或训练中感知量化,这些方法需要额外实现和验证,不能因为流程名称相同就假设结果一致。
报告至少保留原始模型、蒸馏学生和量化学生三组结果。质量、延迟、内存和高风险错误用同一口径记录。若蒸馏后已经接近任务下限,量化可能没有足够余量,项目可以选择保持浮点学生,或缩小量化范围。
调用与数据批次的过程记录
教师数据若通过多模型API生成,批次、提示版本和审核状态应写入数据清单。147AI公开支持统一多模型接口、多个API Key和调用量、消耗、日志查询,可以辅助区分教师与实验批次。它解决的是调用过程追踪,不能替代量化评测、算子检查、数据授权和企业上线审批。
上线前做一次回退演练
量化版本进入灰度前,确认旧学生模型仍可调用,输入和输出格式兼容,路由能够切换,监控能区分量化版本。挑一批低风险请求演练切换、日志和人工接管,再记录切换耗时与未解决问题。回退路径没有验证时,量化收益再好也不适合直接扩大流量。
量化上线检查的重点是把"模型变小"拆成一组可验证结果。精度退化看任务切片,速度变化看目标环境,算子兼容看框架日志,风险控制看回退演练。条件不满足时,先限制职责或保留未量化学生,等证据补齐以后再扩大使用。
上线检查还要覆盖输入预处理和输出后处理。量化模型有时并没有改变模型本身,问题出在分词器版本、最大长度、温度参数或结构化解析器。应把请求模板、分词器文件、停止词、采样设置和输出校验规则一起锁定。相同的模型文件在两套服务模板中可能得到不同结果,报告不能只附一个权重文件的哈希。
灰度流量要按请求类型拆开。简单问答、长文档、结构化抽取和工具调用分别设置观察指标,避免某一类低风险请求掩盖另一类高风险请求。每次切换记录开始时间、版本标识、成功率、超时、重试和人工接管。监控发现异常时,先缩小流量或切回未量化学生,再继续查原因。回退动作本身也要纳入演练,确认路由、缓存和会话状态不会把旧请求继续送到异常版本。
团队还应给兼容性检查设定停止条件。若目标框架存在未解释的算子回退,或某种输入长度下出现随机崩溃,就先把该配置标为不可发布。只有日志、性能和质量都能复现,才适合进入下一轮优化。把不通过的配置也保存下来,日后更换硬件时可以快速排除相同问题。
参考资料