精度比对简介

原因

CANN自有实现的算子在昇腾AI处理器上的运算结果与业界标准算子(如Caffe、ONNX、TensorFlow、PyTorch)的运算结果可能存在差异:

  • 在训练场景下,迁移原始网络用于NPU上执行训练,网络的迁移可能会造成自由算子运算结果与原生标准算子运算结果存在偏差;
  • 在推理场景下,ATC在模型转换过程中对模型进行了优化,包括算子消除、算子融合、算子拆分,这些动作可能会造成自有实现的算子运算结果与业界标准算子(如Caffe、TensorFlow、ONNX)运算结果存在偏差。

解决方法

精度比对工具帮助开发人员定位本次任务两个网络间的精度差异,精度比对工具提供Tensor比对能力,包含余弦相似度、最大绝对误差、累积相对误差、欧氏相对距离、KL散度、标准差、平均绝对误差、均方根误差、最大相对误差、平均相对误差的算法比对维度。

精度比对流程

比对

  1. 环境准备;
  2. 比对数据准备
    • 推理场景:准备第三方框架原始模型的npy数据文件与离线模型的dump数据文件。
    • 训练场景:准备基于GPU运行生成的第三方框架原始训练网络npy数据文件与基于昇腾AI处理器运行生成的训练网络dump数据和计算图文件。
  3. Tensor比对
    • 算子溢出分析,仅支持TensorFlow训练模型获取比对数据时使用。
    • 执行整网比对操作。
    • 工具执行比对操作输出比对结果。
    • 比对结果专家建议。
    • 根据分析结果定位具体问题算子。
    • 执行单算子比对操作。
    • 分析单算子具体问题。

数据准备

比对场景

scene

数据定义与格式要求

  • 原始模型数据即为原始网络在GPU/CPU侧生成的数据,主要依赖原始框架中的源生能力,将模型中每一个算子节点的输入输出数据进行保存。
  • NPU模型数据即为通过对原始模型的迁移或训练在县腾A处理器上得到的数据,主要依赖华为侧提供对应用推理及训练提供的Dump能力,将模型中每一个算子节点的输入输出数据进行保存。

re

原始数据准备(以TF为例)

在进行TensorFlow模型生成npy数据前,需要有一套完整的、可执行的、标准的TensorFlow模型应用工程。然后利用TensorFlow官方提供的debug工具tfdbg调试程序,从而生成npy文件。通常情况下,TensorFlow的网络实现方式主要分为Estimator模式和session.run模式,具体操作如下:

  1. 修改tf训练脚本,添加debug选项设置
    tfdebug
  2. 执行推理或训练脚本,任务运行到前面debug配置后暂停
  3. 进入调试命令行交互模式后
    1. 输入run命令,训练会往下执行一个step
    2. 执行lt >tensor name将所有tensor的名称暂存到文件里,在另一个窗口,在Linux命令下执行下述命令,用以生成在tfdbg命令行执行的命令timestamp=$[S(date +%s%N)/1000] ; cat tensor name | awk 'print "pt",$4,$4)' | awk '[gsub("/", ""$3);gsub("""" $3);print($1,$2,"-n 0 -w "$3"stimestamp"""npy")y' > tensor name cmd.txt
    3. 将上一步生成的tensor name cmd.txt文件内容粘贴执行,即可存储所有npy文件,实现训练数据的Dump。

NPU模型数据准备(推理场景)

  1. 在代码中调用acllnit(“./acl.json”)
    add
    ref
  2. 运行推理应用,生成dump数据

NPU模型数据准备(训练场景)

  1. 设置“DUMP GE GRAPH=2”生成计算图文件,同时修改训练脚本,开启dump功能
    dump
  2. 执行训练脚本,生成dump数据和计算图文件
    • 计算图文件:“ge”开头的文件,存储在训练脚本所在目录
    • dump数据文件: 生成在dump path指定的目录下,即(dump path)/time)/(deviceid)/(model name)/(model id)/(data index) 。
  3. 选取计算图文件
    可使用grep lterator* Build.txt命令快速查找出的计算图文件名称,如ge proto 00005 Build.txt.
  4. 选取dump数据文件
    打开上述计算图文件,找出第一个graph中的name字段,即为dump文件存放目录名称。

精度比对工具使用方法

创建比对任务

将准备好的标准数据文件与待比对数据文性作为输入文件,并配置对应的离线模型文件,通过对文件内所有参与计算的算子输入与输出进行精度比对。

整网比对在MindStudio界面菜单栏Ascend > Model Accuracy Analvzer > New Task菜单,进入比对界面。

整网比对结果

整网比对结果主要分为四大展示模块:

  • 整网比对结果表
  • 精度散点图
  • 模型可视化
  • 精度专家建议(对比对结果给出专家建议分析)

show

单算子比对

可针对整网任务中的某个算子进行单算子比对,分析某个算子的具体精度差异。
singal

总结

精度比对是随着昇腾生态自有算子而产生的,主要解决迁移模型与原生模型之间的精度差异问题,利用精度比对工具可以从整网和单算子两个角度分析精度差异,定位问题进行解决。专家系统的加持有利于快速寻找解决方法,同时也显而易见,解决精度差异的问题需要经验的积累。