专栏算法工具链PTQ量化数值范围与优化

PTQ量化数值范围与优化

y19002025-09-26
102
0
一、PTQ模型量化问题
1、模型问题

基于公版模型训练,没有对模型做范围做约束,weight_decay=1e-6, 训练出的float模型数值分布很大,如图 2,可以看到模型的后面几层数据分布范围很广,最大阈值超过了8000,对我们量化来说并不友好。

2、算子问题

如图 2,基于全int16算子配置量化,当前版本resize算子有约束(请查阅工具链算子支持情况),只能支持int8量化,即使配置了int16,但算子依旧退化到int8,因此算子的cosine相似度也比较低,基于此阈值,max_qscale=6653/127=52.385,此scale过于大,并不能精细化量化模型,所以全BPU算子的整体精度都不高。

 

图 1 公版训练float模型

 

二、精度优化
1、cpu高精度定位

resize算子有限制,但对于回退cpu算子,就能实现float精度推理,配置如图 2,

 

图 2 配置cpu算子

配置了算子后,精度提升了,如图 3,可视化效果对比如图 4,整体量化精度可对齐,定位到了具体问题就是resize算子限制导致。

 

图 3 cpu算子精度

 

 

图 4 cpu算子可视化精度

2、添加bn,加大weight_decay

在最后的conv层后加上bn算子限制特征数据分布,同时weight_decay从1e-6调整到1e-3,整体数据范围如图 5、图 6,模型的数据分布变小了,最后的cosine相似度精度也很高,非常利于int8量化,后期配置了int8量化,模型也可实现高精度量化。

 

图 5 全int16量化

 

图 6 部分int16量化

算法工具链
征程6官方教程
评论0
0/1000