专栏算法工具链PTQ精度调优手段-设置bias_correction

PTQ精度调优手段-设置bias_correction

芯链情报局2023-08-21
63
0

前言:

受模型结构及参数的影响,如不同数值分布的跨层连接、注意力机制以及极大/小的权重参数等,后量化过程中可能会面临量化精度不符合预期的问题。为此后量化过程中提供了偏差校正(Bias Correction)作为一种量化trick,来减少一些场景下的量化误差损失。具体来说,激活和权重的量化会给模型输出引入噪声,不同于高斯白噪声,实际场景下的量化噪声往往并不具备均值为0的特性,从而导致量化模型输出相比于浮点模型存在均值上的偏离,影响量化精度。偏差校正通过计算量化模型在校准数据上的统计偏差,对模型中的Conv/Gemm节点的bias项进行微调,从而减小量化模型输出和浮点模型输出的均值偏差。

值的注意的是,由于偏差校正是对模型参数进行的微调,并不会导致模型性能(例如Latency或者FPS)上的变动。

1. 开启偏差校正功能

本文针对OpenExplorer V1.1.62及其之后版本的工具链开发包讲解如何开启偏差校正功能。相关版本的获取途径为OE开发包获取

支持配置YAML文件中校准参数组的参数optimization,开启偏差校正功能,如下所示:

配置好optimization参数后,会在模型校准完成后执行偏差校正功能,执行过程中会打印如下log文件:

并选取一张样本,基于该样本对偏差校正的有效性进行分析。首先会分别计算偏差校正前后的模型输出相似度情况,接着会额外保存两张图片到bias_correction文件夹下,分别为node_accumulate_err_of_qmodel_cosine-similarity.png(左图)和conv_accumulate_err_of_qmodel_mean-diff-error.png(右图)。
  • 左图描述:两条曲线分别表示偏差校正前后的量化模型累积误差曲线。其中横坐标表示模型中节点的索引,按照从输入到输出的顺序排列;纵坐标为余弦相似度,即对量化模型中每个节点的输出计算其与浮点模型中对应节点输出的之间的余弦相似度。校正后曲线位于校正前曲线上方时,表明偏差校正能够改善模型的误差累积情况。

  • 右图描述:两个曲线分别表示偏差校正前后的Conv输出误差曲线。其中横坐标表示模型中Conv节点的索引,按照从输入到输出的顺序排列;纵坐标表示平均误差,即对量化模型中每一个Conv节点输出计算其与浮点模型中对应节点输出的之间的差的平均值。校正后曲线相比于校正前更接近0时,表明偏差校正能够改善Conv输出误差。

2. 精度提升验证

以mnasnet_1.0_96在bayes架构下采用horizon-nn==0.20.1为例,采用default校准方式,偏差校正开启前后精度对比情况如下:

量化方式

量化精度损失

未开启偏差校正

1.25%

开启偏差校正

0.24%

不过实际开发中,偏差校正方法在精度提升上的不确定性略大,甚至会造成一些负面影响,因此该方法仅作为一种可选的调优方式来优化掉点模型的精度。

3. 总结

通过本文的讲解,相信读者对于如何在后量化阶段开启偏差校正功能,偏差校正输出信息有了较为清晰的认识。在实际上使用过程中,偏差校正的输出信息可以作为验证偏差校正是否有效的一种参考,但最终效果还需要以模型精度评测结果为准。

算法工具链
评论0
0/1000