dump数据对比

数据准备

将precision_tool和precision_data(包括GPU/CPU标杆数据和NPU的精度数据)文件夹上传到Toolkit安装环境的任意目录下,目录结构示例:

├── precision_tool
│    ├── cli.py
│    ├── ...
├── precision_data
│    ├── npu
│    │    ├── debug_0  // 存放NPU dump数据
│    ├── tf
│    │    ├── dump     // 存放GPU/CPU dump数据
│    ├── ...

安装依赖

# graphviz为可选依赖,只有当需要绘制算子子图时才需要安装
pip3 install rich graphviz
# ubuntu/Debian
sudo apt-get install graphviz
# fedora/CentOS
sudo yum install graphviz
修改工具precision_tool/lib/config目录下的config.py
# 依赖Toolkit包中的atc和msaccucmp.py工具,配置为Toolkit包安装目录
# 默认Toolkit包安装在/usr/local/Ascend,可以不用修改,指定目录安装则需要修改
CMD_ROOT_PATH = '/usr/local/Ascend'

数据对比

  1. 启动PrecisionTool交互命令行:

    python3 ./precision_tool/cli.py

  2. 进入交互命令行界面(如需退出,可执行Ctrl + c)。

    PrecisionTool >

  3. 执行ac -l [limit_num] (-c)命令进行整网精度比对,具体可参考《TensorFlow 1.15模型迁移指南》的“precision_tool命令参考”章节

    PrecisionTool > ac -c

    根据数据量大小,比对过程需要时间不同。

    对比结果会以csv的格式存放在“precision_data/temp/vector_compare”目录中。

精度分析

打开precision_data/temp/vector_compare目录下的csv文件,从上向下查找第一个输出余弦相似度小于0.98的算子,具体可参考《TensorFlow 1.15模型迁移指南》的“整网精度比对结果文件说明”章节;或者使用vcs -f [file_name] -c [cos_sim_threshold] -l [limit]命令(可参考《TensorFlow 1.15模型迁移指南》的“precision_tool命令参考”章节)筛选比对结果,vcs命令默认筛选余弦相似度小于0.98的结果,找到输出的第一个算子。如果阈值0.98无法筛选出结果,可以提高阈值继续筛选。

下图为vcs命令结果举例:

从上图的比对结果可以看到,算子的输入基本一致,但第一个输出与标杆存在明显差异(余弦相似度为0.806927,小于0.98),说明该算子可能存在精度问题;如果算子的输入就存在明显差异,需要继续找输入节点的比对结果。

执行ni (-n) [op_name] -g [graph] -a [attr] -s [save sub graph deep]命令,可以查询算子的输入输出节点信息,具体可参考《TensorFlow 1.15模型迁移指南》的“precision_tool命令参考”章节

ni命令可以根据传入的算子名称,得到如下关键信息:

[ ]内部为算子类型,以上图为例,算子类型为Add,如果包含PassName,表示该算子为融合算子,对应值表示融合规则名称,OriginOp为融合前的算子。