推理离线模型一键式精度比对

简介

离线模型一键式精度比对(推理)功能将推理场景的精度比对做了自动化,适用于ONNX、OM模型,用户输入原始模型、对应的离线模型,输出整网比对的结果。离线模型为通过ATC工具转换的OM模型。
支持动态shape模型精度比对;支持AIPP(Artificial Intelligence Pre-Processing)数据预处理功能。
注意:请确保ATC工具转换的OM模型与当前运行环境使用的芯片型号一致。

使用前准备

环境准备

安装msProbe工具,具体请参见《msProbe安装指南》。
比对OM模型依赖aisbench包和aclruntime包,用户使用前可通过以下命令安装这两个依赖包。

 msprobe install_deps -m offline [--no_check]

需要注意的是,–no_check参数,会跳过检查目标网站的证书信息,有一定的安全风险,用户需要谨慎使用并自行承担后果。

约束

仅支持ONNX、OM模型比对。

一键式精度比对依赖CANN功能,用户可通过环境变量ASCEND_TOOLKIT_HOME修改CANN路径,默认路径为/usr/local/Ascend/cann。

安全风险提示

在模型文件传给工具加载前,用户需要确保传入文件是安全可信的,若模型文件来源官方有提供SHA256等校验值,用户必须要进行校验,以确保模型文件没有被篡改。

推理离线模型一键式精度比对功能介绍

功能说明

使用命令行工具对离线模型进行一键式比对,只需输入模型,无需提前采集数据,输出比对结果。

注意事项

仅支持ONNX、OM模型比对。

一键式精度比对依赖CANN功能,用户可通过环境变量ASCEND_TOOLKIT_HOME修改CANN路径,默认路径为/usr/local/Ascend/cann。

命令格式

 msprobe compare -m offline_model -gp /golden_path/golden_model.onnx -tp /target_path/target_path.om -o /compare_output_path

参数说明

参数名称

可选/必选

说明

-m或–mode

必选

比对模式,需要指定为offline_model。

-gp或–golden_path

必选

模型文件[.onnx, .om]路径,分别对应ONNX、OM模型。

-tp或–target_path

必选

昇腾AI处理器的离线模型[.om]路径。

–input_data

可选

模型的输入数据路径,路径须指定到具体文件名。默认根据模型的input随机生成。多个输入以英文逗号分隔,例如:/home/input_0.bin,/home/input_1.bin,/home/input_2.npy。注意:使用aipp模型时该输入为OM模型的输入,且支持自动将npy文件转为bin文件。

-o或–output_path

可选

输出文件路径,默认为当前路径的output文件夹。

–input_shape

可选

模型输入为静态shape时使用。模型输入的shape信息,默认为空,例如"input_name1:1,224,224,3;input_name2:3,300",使用双引号,节点中间使用英文分号隔开。input_name必须是转换前的网络模型中的节点名称。

–dym_shape_range

可选

模型输入为动态shape时使用。动态shape的阈值范围。如果设置该参数,那么将根据参数中所有的shape列表进行依次推理和精度比对。如果模型转换时指定了某个维度值为-1,比对时需要指定特定范围,该维度在比对时不能设置为-1。
配置格式为:“input_name1:1,3,200~224,224-230;input_name2:1,300”。
其中,input_name必须是转换前的网络模型中的节点名称;"~“表示范围,a~b~c含义为[a: b :c];”-"表示某一位的取值。

–rank

可选

指定运行设备[0,255],可选参数,默认0。

–output_size

可选

指定模型的输出size,有几个输出,就设几个值,每个值默认为90000000,如果模型输出超出大小,请指定此参数以修正。动态shape场景下,获取模型的输出size可能为0,用户需根据输入的shape预估一个较合适的值去申请内存。多个输出size用英文逗号隔开, 例如"10000,10000,10000"。

–onnx_fusion_switch

可选

onnxruntime算子融合开关,默认开启算子融合,如存在onnx dump数据中因算子融合导致缺失的,建议关闭此开关。使用方式:–onnx_fusion_switch False。

输出说明

比对完成则打印提示信息msprobe compare ends successfully. 在配置的输出路径中,生成dump_data文件夹、 input文件夹、model文件夹和.csv后缀的文件,csv文件名称基于时间戳自动生成,格式为:result_{timestamp}.csv。

输出结果文件说明

{output_path}/{timestamp}/{input_name-input_shape}  # {input_name-input_shape}用来区分动态shape时不同的模型实际输入,静态shape时没有该层
├-- dump_data
│   ├-- npu                          # npu dump数据目录      ├-- {timestamp}              # 模型所有npu dump的算子输出,dump为False情况下没有该目录         └-- 0                    # Rank设备ID号             └-- {om_model_name}  # 模型名称                 └-- 1            # 模型ID号                     ├-- 0        # 针对每个Task ID执行的次数维护一个序号,从0开始计数,该Task每dump一次数据,序号递增1                        ├-- Add.8.5.1682067845380164
│                        ├-- ...
│                        └-- Transpose.4.1682148295048447
│                     └-- 1                         ├-- Add.11.4.1682148323212422
│                         ├-- ...
│                         └-- Transpose.4.1682148327390978
│      ├-- {timestamp}         ├-- output_0.bin
│         └-- output_0.npy
│      └-- {timestamp}_summary.json
│   └-- {onnx} # 原模型dump数据存放路径,onnx对应ONNX模型       ├-- Add_100.0.1682148256368588.npy
│       ├-- input_Add_100.0.1682148256368588.npy  # 如果是ONNX模型,则会dump输入数据,并增加对应的input前缀       ├-- ...
│       └-- Where_22.0.1682148253575249.npy
├-- input
│   └-- input_0.bin                          # 随机输入数据,若指定了输入数据,则该文件不存在
├-- model
│   ├-- {om_model_name}.json                    # 离线模型OM模型(.om)通过atc工具转换后的json文件   └-- new_{onnx_model_name}.onnx              # 把每个算子作为输出节点后新生成的ONNX模型
└-- result_{timestamp}.csv                   # 比对结果文件

查看比对结果

请前往对比结果说明