yolov2
/ yolov3
/ ssd
等需要自定义实现层的模型,需要自行编译安装特定版本的 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镜像, 其中要求:
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
注意:
{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场景-整网算子精度对比场景 |
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 | 用于查看全部的参数 | 否 |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。