写点什么

推理网络精度不达标,5 个方法轻松搞定

  • 2022 年 9 月 09 日
    广东
  • 本文字数:1743 字

    阅读完需:约 6 分钟

推理网络精度不达标,5个方法轻松搞定

本文分享自华为云社区《【CANN文档速递10期】推理网络精度调优》,作者: 昇腾 CANN 。

一、推理时精度错误或不达标,怎么办?

模型推理时,模型推理功能调测 OK,但推理精度错误,或推理精度与标杆数据存在少量差距,这时该怎么做呢?我们可以从以下两种导致精度问题的原因入手,建议先检查配置问题、再检查算子精度问题。



二、推理前,哪些配置可能影响精度?

1、JPEGD 解码后的输出图片可能存在补边的无效数据,可能影响推理精度。

建议:JPEGD+VPC 串联使用时,由于 JPEGD 解码后的输出图片的宽 stride*高 stride 有 128*16 对齐的约束,因此解码后的输出图片的宽、高有一些补边的无效数据,所以 VPC 在处理图片前,应首先对 JPEGD 对齐后的输出图片进行原分辨率裁剪,目的是去除无效数据对图像精度的影响。



2、VPC 输出图片格式与 AIPP 输入图片格式不一致,可能影响推理精度。

建议:AIPP 色域转换配置中的源图片格式要与 VPC 的输出图片格式保持一致,如果不一致,例如,VPC 的输出格式是 YUV420SP(NV12),而 AIPP 色域转换的配置是 YUV420SP(NV21)-->RGB888,则 UV 分量的顺序不同会影响模型推理的精度。

三、模型中算子精度不达标,怎么定位呢?

模型中算子精度不达标导致整网推理精度不达标时,可以借助精度比对工具、一键 Dump 比对工具,根据下文中具体的问题定位流程获取各类数据后,再进行比对、分析,逐一解决问题。



在定位问题前,我们先需要获取相关辅助工具:

• 精度比对工具:用于比对昇腾算子与业界标准算子的运算结果,也可用于比对昇腾算子多次运算结果,但需用户自行准备昇腾算子或业界标准算子的运算结果数据(即 Dump 数据)。该工具的获取及用法请参见配套版本的《精度比对工具使用指南》。

• 一键 Dump 比对工具:仅用于比对昇腾算子与 TensorFlow/ONNX 标准算子的运算结果,无需用户准备昇腾算子和 TensorFlow/ONNX 标准算子的运算结果数据,只需指定昇腾模型和 TensorFlow/ONNX 模型的路径即可。该工具的获取及用法请参见https://gitee.com/ascend/tools/tree/master/msquickcmp

通过工具比对数据时,我们还需要修改或检查以下配置:

1、配置模型高精度模式

• 原因分析:

当前默认采用 fp16(float16)数据类型进行计算。配置模型高精度模式后推理,可提升精度,但可能会影响推理性能,如果在精度达标的同时,需要保持性能,则可以配置部分算子保持原始网络中的数据类型。

• 配置方法:

模型高精度模式:模型转换时增加--precision_mode=allow_fp32_to_fp16

部分算子保持原始网络中的数据类型:模型转换时增加--keep_dtype 参数以及--precision_mode=force_fp16

2、关闭数据缓存优化

• 原因分析:

当前默认开启数据缓存优化,开启数据缓存优化可提高计算效率、提升性能,但由于部分算子在实现上可能存在未考虑的场景,导致影响精度,因此在出现精度问题时可以尝试关闭数据缓存优化。如果关闭数据缓存优化功能后,精度达标,则还是需要识别出问题算子,反馈给华为工程师进一步分析、解决算子问题,解决算子问题后,建议保持开启数据缓存优化。

• 配置方法:

模型转换时增加--buffer_optimize=off_optimize

3、关闭融合规则

• 原因分析:

当前默认开启融合规则,开启融合规则可提高计算效率、提升性能,但算子之间可能会融合,融合后的部分算子在实现上可能存在未考虑的场景,导致影响精度,因此在出现精度问题时可以尝试关闭融合规则。如果关闭融合规则功能后,精度达标,则还是需要识别出问题算子,反馈给华为工程师进一步分析、解决算子问题,解决算子问题后,建议保持开启融合规则功能。

• 配置方法:

模型转换时增加--fusion_switch_file 参数,指定融合规则配置文件,一键式关闭融合规则。融合规则配置文件内容如下:



4、检查数据处理或配置

推理精度不达标可能是由于数据集预处理或推理结果后处理方式与标杆不一致导致,也有可能是由于 AIPP 配置不正确导致,需一一检查、修改后,重新推理。

5、与标杆计算数据比对

上面的配置、检查都完成后,如果推理精度还是不达标,最后,我们可以使用一键 Dump 比对工具比对昇腾算子与 TensorFlow/ONNX 标准算子的运算结果的差异,然后联系华为工程师,进一步定位算子问题并解决。

四、更多介绍

了解更详细的内容,登录昇腾社区,在开发者文档中心:https://www.hiascend.com/document?tag=community-developer


点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 5
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
推理网络精度不达标,5个方法轻松搞定_人工智能_华为云开发者联盟_InfoQ写作社区