调优流程
通过create_quant_config接口生成的config.json文件中的默认配置进行量化,若量化后的推理精度不满足要求,则按照如下步骤调整量化配置文件中的参数。
- 根据create_quant_config接口生成的默认配置进行量化。若精度满足要求,则调参结束,否则进行2。
- 对quantize_model修改后的图进行推理时,适当增加数据集的batch_size。
通常情况下,量化过程中使用的数据样本越多,量化后精度损失越小,但过多的数据并不会带来精度的提升,反而会占用较多的内存,降低量化的速度,并可能引起内存、显存、线程资源不足等情况。因此,建议使用的batch_size为16或者32。
- 若按照2中的量化配置进行量化后,精度满足要求,则调参结束,否则进行4。
- 手动修改quant_enable,跳过量化某些层。
quant_enable可以指定该层是否量化,取值为true时量化该层,取值为false时不量化该层,将该层的配置删除也可跳过该层量化。
在整网精度不达标的时候需要识别出网络中的量化敏感层(量化后误差显著增大),然后取消对量化敏感层的量化动作,识别量化敏感层有两种方法:
- 依据网络模型结构,一般网络中首层、尾层以及参数量偏少的层,量化后精度会有较大的下降。
- 通过精度比对工具,逐层比对原始模型和量化后模型输出误差(例如以余弦相似度作为标准,需要相似度达到0.99以上),找到误差较大的层,优先对其进行回退。
- 若按照4中的量化配置进行量化后,精度满足要求,则调参结束,否则进行6。
- 手动修改activation_quant_params和weight_quant_params,调整量化算法及参数:
算法参数的意义请分别参见IFMR数据量化算法、ARQ权重量化算法。
- 若按照6中的量化配置进行量化后,精度满足要求,则调参结束,否则表明量化对精度影响很大,不能进行量化,去除量化配置。
图1 调参流程
父主题: 手动调优