问题定位
定位流程
传统模型精度问题定位流程如图1所示。
定位步骤
- 检查环境配置。
- 执行以下命令,使用ATC工具进行模型转换。
atc --model=model_path --framework=5 --output=output_path --soc_version=soc_version
其中,命令中的参数解释如表1所示。
- 使用msit debug compare工具快速获取模型比对结果。compare一键式全流程精度比对(推理)功能将推理场景的精度比对做了自动化。用户输入原始模型(onnx)、对应的离线模型和数据,自动输出整网比对的结果,也可以输入dump好的cpu、npu侧的算子数据直接进行精度比对。msit debug compare工具安装请参见msit debug compare功能使用指南。
- 执行以下命令,启动精度对比。
msit debug compare -gm golden_model path -om om_model path [可选参数]
如果已经有真实场景的输入数据,推荐优先指定输入数据进行调测。示例如下:
msit debug compare -gm /home/HwHiAiUser/onnx_produce_data/resnet_official.onnx -om /home/HwHiAiUser/onnx_produce_data/model/resnet50.om \ -i /home/HwHiAiUser/result/test/input_0.bin -c /usr/local/Ascend/ascend-toolkit/latest -o /home/HwHiAiUser/result/test
其中,-i,–-input为模型的输入数据路径,多个输入以英文逗号分隔,例如:/home/input_0.bin,/home/input_1.bin。
本场景会根据文件输入size和模型实际输入size自动进行组batch,但需保证数据除batch size以外的shape与模型输入一致。如果输入为npy文件,该功能会自动将npy文件转化为bin文件。
- 落盘数据的目录结构可参见对比输出结果说明。
其中result_{timestamp}.csv文件为比对结果文件,包含了整网所有算子的dump数据比对结果,主要用于分析模型精度问题。比对结果的含义与基础精度比对工具完全相同,其中每个字段的说明可参见《精度调试工具用户指南》中的“完整比对结果参数说明”“章节。
其中,核心比对指标如表2所示,任意一个指标超出阈值即为精度异常。
- 执行以下命令,启动精度对比。
- 问题分析。
- 核心分析
由于比对结果文件中的算子呈现,并不是完全的执行顺序,因此算子在文件中的先后顺序,并不完全代表其在模型结构拓扑图中的先后顺序。在分析时我们需要从文件中找到第一个出现精度异常的算子,并查看它在模型拓扑图中的位置,寻找它以及它上一个算子,查看精度是否符合标准。主要分为以下几种情况:
- 算子的输入一致,输出不一致,说明该算子存在精度问题,需要分析误差原因。
- 算子有多个输入和多个输出,部分输入出现NaN的情况,其他一致,但是输出不一致,该算子也可能存在精度问题,需要根据模型结构找到算子的前一个节点的输出,作为下一个节点的输入来进一步分析。
- 算子有多个输入和多个输出,输入一致,部分输出出现NaN的情况,并且其后续算子输入不一致,说明该算子可能存在精度问题。
- 累积误差和前后处理问题分析
- 核心分析
父主题: 精度问题