48 Star 160 Fork 412

Ascend/msit

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
README.md 27.76 KB
一键复制 编辑 原始数据 按行查看 历史
yejiajun 提交于 1个月前 . fix cmp readme problem

msit debug compare功能使用指南

简介

  • compare一键式全流程精度比对(推理)功能将推理场景的精度比对做了自动化,适用于 TensorFlow、TensorFlow2.0、ONNX、Caffe、MindIE-Torch模型,用户输入原始模型,对应的离线模型和输入,输出整网比对的结果,还可以输入已dump的CPU和NPU侧的算子数据直接进行精度比对。离线模型为通过 ATC 工具转换的 om 模型,输入 bin 文件需要符合模型的输入要求(支持模型多输入)。在模型比对完成后,对首个精度问题节点进行误差定界定位,判断其是单层误差还是累计误差,并输出误差区间,相关信息存储在输出目录下。
  • 支持动态shape模型精度比对;支持单算子比对;支持AIPP(Artificial Intelligence Pre-Processing)数据预处理功能。
  • 该功能使用约束场景说明,参考链接:Tensor比对/说明与约束
  • 对于 Caffe 模型,目前不支持动态 shape 的模型比对。对于 yolov2 / yolov3 / ssd 等需要自定义实现层的模型,需要自行编译安装特定版本的 caffe。
  • 注意:请确保ATC工具转换的om与当前运行环境使用的芯片型号一致。

工具安装

  • 一般工具安装请见 msit 工具安装
  • 此外还提供容器安装方式(支持caffe精度比对)

容器方式安装

容器方式安装目前提供了Ubuntu 18.04的docker镜像。在<msit_project_root_path>/msit/components/debug/compare目录下运行以下命令以构建镜像:

docker build \
--build-arg CANN_TOOLKIT_PATH=Ascend-cann-tookit<version+arch>.run \
--build-arg CANN_AMCT_PATH=Ascend-cann-amct<version+arch>.tar.gz \ 
--build-arg CAFFE_SRC=caffe-ascend-amct.zip \
--build-arg UBUNTU_X86_ARCHIVE=http://.*archive.ubuntu.com \
--build-arg UBUNTU_X86_SECURITY=http://.*security.ubuntu.com \
--build-arg UBUNTU_ARM64=http://ports.ubuntu.com \
--build-arg APT_PATH=http://repo.huaweicloud.com \
--build-arg PYTHON_PATH=https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz \
--build-arg PYPI_PATH=https://repo.huaweicloud.com/repository/pypi/simple \
--build-arg PYPI_PATH_TRUST=repo.huaweicloud.com \
--build-arg MSIT_PATH=https://gitee.com/ascend/msit.git \
-f Dockerfile . -t msit-caffe:latest

注意:
1、非root用户请加上sudo
2、若出现以下报错:

Err:1 http://repo.huaweicloud.com/ubuntu-ports focal InRelease
  Temporary failure resoving 'repo.huaweicloud.com'
Err:2 http://repo.huaweicloud.com/ubuntu-ports focal-updates InRelease
  Temporary failure resoving 'repo.huaweicloud.com'

则参照下述代码位置,添加环境变量:

ARG PYPI_PATH_TRUST
ARG MSIT_PATH

# 添加环境变量
ENV http_proxy=http://${USER_NAME}:${PASSWORD}@${PROXY_SERVER}:${PORT}
ENV https_proxy=http://${USER_NAME}:${PASSWORD}@${PROXY_SERVER}:${PORT}

#安装python、CANN_TOOLKIT,软件包、依赖,并配置环境变量写入.bashrc
RUN groupadd HwHiAiUser && useradd -rm -d /home/HwHiAiUser -s /bin/bash -g HwHiAiUser -G HwHiAiUser -u 1001 HwHiAiUser  &&\
    if [ "$(uname -m)" = "x86_64" ]; then \

$USER_NAME$PASSWORD 等都是网络配置的相关参数,这里不予以介绍
$APT_PATH 用户可自行配置源地址 例如:http://repo.huaweicloud.com, https://mirrors.huaweicloud.com

3、如果在 wget ${PYTHON_PATH} 的时候出现报错,显示需要 use --no-check-certificate。则在 wget ${PYTHON_PATH} 处添加 --no-check-certificate,示例如下:

wget --no-check-certificate ${PYTHON_PATH}

4、请将Ascend-cann-tookit<version+arch>.run改为实际上的toolkit路径(必须是相对路径)
5、从这个仓库下载zip代码,得到的zip包叫ascend-amct.zip或caffe-ascend-amct.zip
6、从这里下载amct的包Ascend-cann-amct_5.1.RC1.1_linux-aarch64.tar.gz(注意下载对应需要的版本如:X86,aarch64等)
7、构建docker镜像, 其中要求:

  • CANN_AMCT_PATH为步骤6下载的amct包所在路径
  • CAFFE_SRC为步骤5下载的caffe代码zip包所在路径

8、运行以下命令,使用上述镜像启动容器:

docker run -it -v=`pwd`:/work   -v /usr/local/Ascend/driver:/usr/local/Ascend/driver -v /usr/bin/npu-smi:/usr/bin/npu-smi \
-v /usr/local/Ascend/add-ons:/usr/local/Ascend/add-ons --device /dev/davinci0 --device /dev/davinci_manager --device /dev/hisi_hdc --device /dev/devmm_svm  msit-caffe:latest

在启动容器时将driver路径挂载到容器中,指定映射的device设备。 -v=pwd:/work 为将当前目录映射到容器work目录下(非必须)。

使用方法

功能介绍

使用入口

compare功能可以直接通过msit命令行形式启动精度对比。启动方式如下:

不指定模型输入 命令示例,其中路径需使用绝对路径

msit debug compare -gm /home/HwHiAiUser/onnx_prouce_data/resnet_offical.onnx -om /home/HwHiAiUser/onnx_prouce_data/model/resnet50.om \
-c /usr/local/Ascend/ascend-toolkit/latest -o /home/HwHiAiUser/result/test

输出结果说明

注意

  • 单独compare功能:指定cpu侧以及npu侧的dump数据进行精度比对时,只生成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                    # Device 设备 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
│   │   ├-- {time_stamp}
│   │   │   ├-- output_0.bin
│   │   │   └-- output_0.npy
│   │   └-- {time_stamp}_summary.json
│   └-- {onnx or tf or caffe} # 原模型 dump 数据存放路径,onnx / tf / caffe 分别对应 ONNX / Tensorflow / Caffe 模型
│       ├-- 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 模型
│   └-- custom_op_{onnx_model_name}.onnx        # 若指定了--custom-op,删除自定义算子后的onnx子图模型
│   └-- new_custom_op_{onnx_model_name}.onnx    # 若指定了--custom-op,删除自定义算子后的onnx子图模型,并把每个算子作为输出节点后新生成的 onnx 模型
├-- result_{timestamp}.csv                   # 比对结果文件
└-- tmp                                      # 如果 -m 模型为 Tensorflow pb 文件, tfdbg 相关的临时目录

输出结果说明和分析步骤参考

请移步对比结果分析步骤

命令行入参说明

参数名 描述 必选
-gm,--golden-model 模型文件 [.pb与saved_model, .onnx, .prototxt, .om] 路径,分别对应 TF, ONNX, Caffe, OM 模型。
其中.pb为TF1.15版本模型文件,saved_model为TF2.6.5版本模型文件
-om,--om-model 昇腾AI处理器的离线模型 [.om, .mindir, saved_model]。
TF2.6.5版本可以输入saved_model模型
-w,--weight -w 为权重文件,当模型为caffe模型时,该参数为必选参数
-i,--input 模型的输入数据路径,默认根据模型的input随机生成,多个输入以英文逗号分隔,例如:/home/input_0.bin,/home/input_1.bin,/home/input_2.npy。注意:使用aipp模型时该输入为om模型的输入,且支持自动将npy文件转为bin文件
-c,--cann-path CANN包安装完后路径,默认会从从系统环境变量ASCEND_TOOLKIT_HOME中获取CANN 包路径,如果不存在则默认为 /usr/local/Ascend/ascend-toolkit/latest
-o,--output 输出文件路径,默认为当前路径
-is,--input-shape 模型输入的shape信息,默认为空,例如"input_name1:1,224,224,3;input_name2:3,300",节点中间使用英文分号隔开。input_name必须是转换前的网络模型中的节点名称
-d,--device 指定运行设备 [0,255],可选参数,默认0
-n,--output-nodes 用户指定的输出节点。多个节点用英文分号隔开。例如:"node_name1:0;node_name2:1;node_name3:0"
-outsize,--output-size 指定模型的输出size,有几个输出,就设几个值,每个值默认为90000000,如果模型输出超出大小,请指定此参数以修正。动态shape场景下,获取模型的输出size可能为0,用户需根据输入的shape预估一个较合适的值去申请内存。多个输出size用英文逗号隔开, 例如"10000,10000,10000"
--advisor 在比对结束后,针对比对结果进行数据分析,给出专家建议
-dr,--dym-shape-range 动态Shape的阈值范围。如果设置该参数,那么将根据参数中所有的Shape列表进行依次推理和精度比对。(仅支持onnx模型)
配置格式为:"input_name1:1,3,200~224,224-230;input_name2:1,300"。
其中,input_name必须是转换前的网络模型中的节点名称;"~"表示范围,a~b~c含义为[a: b :c];"-"表示某一位的取值。
--dump 是否dump所有算子的输出并进行精度对比。默认是True,即开启全部算子输出的比对。(仅支持onnx模型)
使用方式:--dump False
--convert 支持om比对结果文件数据格式由bin文件转为npy文件,生成的npy文件目录为./dump_data/npu/{时间戳_bin2npy} 文件夹。使用方式:--convert True
-cp, --custom-op 支持存在NPU自定义算子的模型进行精度比对,onnx模型中存在的NPU自定义算子类型名称,当前支持范围:"DeformableConv2D"、"BatchMultiClassNMS"、"RoiExtractor",使用方法:--custom-op="DeformableConv2D",或者传入多个自定义算子类型:--custom-op="BatchMultiClassNMS,RoiExtractor",中间使用英文逗号隔开。
--locat 开启后,自动在每次比对结束后,对误差超阈值的首个节点(任一类误差),执行误差定位流程,自动定位误差的区间范围(无论单节点还是累计误差)。使用方式:--locat True
-ofs, --onnx-fusion-switch onnxruntime算子融合开关,默认开启算子融合,如存在onnx dump数据中因算子融合导致缺失的,建议关闭此开关。使用方式:--onnx-fusion-switch False
-single, --single-op 单算子比对模式,默认关闭,开启时在输出路径下会生成single op目录,存放单算子比对结果文件使用方式:-single True
--fusion-switch-file 昇腾模型融合规则配置文件,传入该文件后,compare工具会关闭文件中指定的融合规则,(1)对于om模型,根据--golden-model重新生成一个om文件,和--om-model传入的模型进行精度比较;(2)对于TensorFlow框架,在NPU上运行关闭指定融合规则的模型,和标杆模型进行比较。参数使用方法:--fusion-switch-file ./fusion_switch.cfg,其中fusion_switch.cfg文件配置方法参见:关闭融合规则
-max, --max-cmp-size 表示每个dump数据比较的最大字节数,用于精度比对过程提速,默认0(0表示全量比较),当模型中算子的输出存在较大shape的、比较过于耗时情况,可以尝试打开。注意:需要使用cann(>=6.3.RC3)。使用方式:--max-cmp-size 1024
-q, --quant_fusion_rule_file 量化算子映射关系文件(昇腾模型压缩输出的json文件)。仅推理场景支持本参数。使用方式:-quant_fusion_rule_file xxx.json (量化算子映射关系json文件)
--saved_model_signature tensorflow2.6框架下saved_model模型加载时需要的签名。使用方式:--saved_model_signature serving_default,默认为serving_default
--saved_model_tag_set tensorflow2.6框架下saved_model模型加载为session时的标签,可根据标签加载模型的不同部分。使用方式:--saved_model_tag_set serve,默认为serve,目前支持传入多个tagSet,使用如:--saved_model_tag_set ['serve', 'genenal_parser']
-mp, --my-path 用于单独进行精度比对的npu侧dump数据路径
-gp, --golden-path 用于单独进行精度比对的cpu侧dump数据路径
--ops-json 用于单独进行精度比对时,cpu侧与npu侧算子的匹配规则json文件路径
-h --help 用于查看全部的参数具体信息

使用场景

请移步compare使用示例

使用示例 使用场景
01_basic_usage 基础示例,运行onnx和om模型精度比对
02_specify_input_data 指定模型输入数据
03_save_output_data 指定结果输出目录
04_specify_input_shape_info 指定模型输入的shape信息(动态场景必须进行指定)。
05_aipp_model_compare 提供模型转换开启aipp参数的om模型与onnx模型进行精度比对的功能。
06_npu_custom_op onnx模型中存在NPU自定义算子场景
07_caffe_model 标杆模型为Caffe框架的一键式精度比对
08_accuracy_error_location 误差及累计误差一键式自动定位
09_single_op 单算子比对模式
10_fusion_switch_file 关闭融合规则.om模型和原始.om模型精度比对
11_mixing_precison_compare 混合精度策略的.om模型和.om模型的精度比对
14_alone_compare 指定dump数据的精度比对
15_saved_model 标杆模型为tensorflow2.6框架下saved_model模型的一键式精度比对
16_mindie_torch_compare MindIE-Torch场景-整网算子精度对比场景

常见问题FAQ

TFDebugRunner使用说明

简介

  • 此脚本用于dump TensorFlow1.x框架下.pb模型在GPU上的算子输出数据,基于TensorFlow Debugging工具(tf_debug)。
  • 此功能包含在msit debug dump中,直接运行该脚本较复杂,不建议直接使用

工具安装

  • 安装命令:
  • 注: 目前 dump 相关的功能安装集成到了 debug compare 命令里,用户只需要安装debug compare即可实现debug dump功能,命令如下:
msit install compare

使用方法

功能介绍

使用入口

保存数据的路径下运行tf debug runner相关命令,命令示例如下,其中路径需使用绝对路径

python3 /msit_path/msit/components/debug/compare/msquickcmp/tf_debug_runner.py -m /model_path/tf/model.pb -i /path/tf/input.bin -o /output_path/tf/output --output_nodes "output_node:0"

视图进入调试命令交互模式tfdbg,执行run命令

tfdbg> run

run命令执行完成后,参考CANN资料准备GPU侧npy数据文件 收集npy数据文件章节进行数据收集

输出结果说明

{output_path}  # 设定的保存文件路径
├-- {op_name}.{output_index}.{timestamp}.npy #dump的npy数据文件

命令行入参说明

参数名 描述 必选
-m,--model-path 模型文件 [.pb]路径,其中saved_model.pb为TF2.6.5版本模型文件
-i,--input-path 模型的输入数据路径,多个输入以逗号分隔,例如:/home/input_0.bin,/home/input_1.bin,/home/input_2.npy。注意:使用aipp模型时该输入为om模型的输入,且支持自动将npy文件转为bin文件
-o,--out-path 输出文件路径,默认为当前路径
-s,--input-shape 模型输入的shape信息,默认为空,例如"input_name1:1,224,224,3;input_name2:3,300",节点中间使用英文分号隔开。input_name必须是转换前的网络模型中的节点名称
--output-nodes 用户设定的需要输出的算子
-h --help 用于查看全部的参数
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/ascend/msit.git
git@gitee.com:ascend/msit.git
ascend
msit
msit
master

搜索帮助