这个坑值得记一笔。7B 模型用 int4 量化后上线,约 5% 的请求出现整段重复,同一句话连写十几遍停不下来,fp16 版本同样的输入完全正常。
刚开始盯着「采样温度偏高放大了分布失真」,折腾了半个多小时,排掉了。
这类报错背后常见的原因有几处,逐个排除就行。量化误差让结束符概率被压低;重复惩罚参数沿用 fp16 的默认值;长输出时误差累积,模型进入循环。
复现并按参数扫一遍重复率
python bench.py --model qwen2.5-7b-int4 --temperature 0.7 --n 100 --report-repeat
调高重复惩罚并限制最大输出
python run_chat.py --repetition-penalty 1.15 --max-tokens 512
降低温度并加 top_p 截断
python run_chat.py --temperature 0.3 --top-p 0.9
剩下的就是对疑似复读的输出做检测后重试
python guard.py --detect-repeat --retry 1
怎么算真的好了,看的是同一批现象。重复率降到 0.5% 以下,输出长度分布正常,复读检测命中的请求重试后都能给出完整回答。
提醒一点。量化损失主要体现在分布尾部,结束符概率下降就会复读,参数要针对量化版本单独调,不能照搬 fp16。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
