将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'
python3 ./precision_tool/cli.py
PrecisionTool >
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为融合前的算子。