一、 量化思路
模型量化中,分析掉点算子是很常见和必要的技巧,J6工具链支持int8、int16、fp16、float32量化,实际在bpu芯片运行,依赖底层约束条件限制,可以查看工具链算子支持列表看bpu运行实际的量化类型,但前只是基于精度问题,而不考虑bpu芯片运行状态,后期基于定位掉点的算子然后再去优化算子从而能量化部署到bpu。
以int16为模型精度配置看精度上限,因为int16量化是bpu芯片支持的共同配置,可以快速的配置出一个高精度模型,然后基于这个int16模型,看每个算子的相似度,看log的Threshold值,特别大的值如大于10000等算子就要特别关注,从而配置为fp16或cpu算子,再看相似度是否提升,有提升则记录下配置的算子定位出掉点问题。
二、 分步实战
1. 全int16量化
最终量化精度:

2. Threshold大值退化cpu算子



最终量化精度:

3. 分类型配置fp16量化

最终量化精度:

三、 总结
基于分步测试优化,我们分析了Threshold较大的值、算子类型对量化精度的影响,最终得到高精度的模型,从而定位出那些算子掉点,然后根据问题,例如当前分步的模型,大Threshold值、pow类型等都在Conv层特征后加归一化,如LayerNorm、BatchNorm等归一化算子,从而更利于BPU芯片量化模型。

