兄弟们,最近社区里一堆人问模型量化后精度掉得妈都不认,或者直接崩了。🤦 作为一个从PyTorch转TFLite再到ONNX踩坑无数的人,今天分享几个干货。
1️⃣ **量化后校准数据别偷懒**
别以为随便扔几张图就能跑通动态范围量化。**校准集(Calibration Dataset)必须是真实分布的子集**,否则激活值截断,推理结果直接变玄学。建议用500-1000条验证集样本,跑一遍PTQ(训练后量化),误差能控制在1%以内。
2️⃣ **混合精度才是王道**
全INT8推理快但敏感层(比如Attention的Softmax)容易崩。用**8-bit权重+16-bit激活**的混合量化,或者对特定层保留FP32。HuggingFace的Optimum库直接支持这个,别手写。
3️⃣ **硬件喂什么,你就量化成什么**
手机端用TFLite的INT8,GPU用TensorRT的FP16,NPU要查自家SDK文档。**别死磕一种格式**,比如NVIDIA的INT8量化需要Calibration,否则跑出来的速度不如FP16还狂掉点。
最后问个问题:你们在量化过程中遇到最玄学的bug是啥?我上次因为Batch Normalization层融合顺序不对,模型直接输出NaN,查了三天代码。😅 |