更新时间:2021-03-18 GMT+08:00
分享

参数调优说明

按照config.json文件中的默认配置进行量化,若量化后的推理精度不满足要求,则按照如下步骤调整量化配置文件中的参数。

  1. 执行sample.tar.gz包中的量化脚本,根据create_quant_config接口生成的默认配置进行量化。
  2. 若根据1中的默认配置进行量化后,精度满足要求,则调参结束,否则进行3
  3. 手动调整量化配置文件中的batch_num:

    batch_num控制量化使用数据的batch数目,可根据batch的大小以及量化需要使用的图片数量调整。通常情况下,量化过程中使用的数据样本越多,量化后精度损失越小,但过多的数据并不会带来精度的提升,反而会占用较多的内存,降低量化的速度,并可能引起内存、显存、线程资源不足等情况。因此,建议batch_num*batch_size为16或32,不超过50。

  4. 若按照3中的量化配置进行量化后,精度满足要求,则调参结束,否则进行5
  5. 手动调整量化配置文件中的quant_enable:

    quant_enable可以指定该层是否量化,取值为true时量化该层,取值为false时不量化该层,将该层的配置删除也可跳过该层量化。在整网精度不达标的时候需要识别出网络中的量化敏感层(量化后误差显著增大),然后取消对量化敏感层的量化动作。识别量化敏感层有两种办法,一个是依据模型结构,一般网络中首层、尾层以及参数量偏少的层,量化后精度会有较大的下降;另外就是可以通过精度比对工具,逐层比对原始模型和量化后模型输出误差(例如以余弦相似度作为标准,需要相似度达到0.99以上),找到误差较大的层,优先对其进行回退。

  6. 若按照5中的量化配置进行量化后,精度满足要求,则调参结束,否则进行7
  7. 手动调整量化配置文件中的activation_quant_params和weight_quant_params:

    • activation_quant_params列表中的参数用于选取待量化数据的范围[left, right],不在该范围的数据将会被截断到范围内。通常情况下,数据分布处于边界附近的数值比较稀疏,均可做截断处理,以提高量化精度。min_percentile (max_percentile)越大,说明截断left(right)越靠近待量化数据的最小值(最大值)。search_range与search_step影响[left, right]的浮动范围,通常情况下,search_range越大、search_step越小,可能获得更高的量化精度,但量化耗时更多。
    • weight_quant_params中的channel_wise控制权重量化时每个channel是否采用不同的量化因子,取值为true时,每个channel独立量化,量化因子不同;取值为false时所有channel同时量化,共享同一个量化因子。通常情况下,每个channel独立量化,量化后的精度会比较高,推荐使用。但全连接层没有channel,设置channel_wise为True时,会提示错误信息。

  8. 若按照7中的量化配置进行量化后,精度满足要求,则调参结束,否则表明量化对精度影响很大,不能进行量化,去除量化配置。
图1 调参流程
分享:

    相关文档

    相关产品

close