本文分享自华为云社区《【MindStudio练习营第一季】MindStudio 高精度比照随笔》,作者:Tianyi_Li。

练习场景下,搬迁原始网络 (如TensorFlow、PyTorch) ,用于NPU上履行练习,网络搬迁可能会形成自有完成的算子运算成果与用原生规范算子运算成果存在误差。推理场景下, ATC模型转化进程对模型进行优化,包括算子消除、算子交融算子拆分,这些优化也可能会形成自有完成的算子运算成果与原生规范算子(如TensorFlow、ONNX、 Caffe ) 运算成果存在误差。

为了帮助开发人员快速处理算子精度问题,需求供给自有完成的算子运算成果与业界规范算子运算成果之间进行精度差异比照的东西。

对策

精度比对东西能够帮助开发人员定位本次使命两个网络间的精度差异。预备好具腾AI处理器运转生成的dump教据与Ground Truth数据 (依据GPU/CPU运转生成的数据)后,即可进行不同算法点评目标的数据比对。

MindStudio供给精度比对功用,支持Vector比对才能,支持下列算法:

  • 余弦相似度

  • 最大绝对误差

  • 累积相对误差

  • 欧氏相对距离

  • KL散度…

基于训练和推理场景下的MindStudio高精度对比

精度比对依据推理/练习和不同的结构分为多个比对场景。

基于训练和推理场景下的MindStudio高精度对比

原始模型数据即为原始网络在GPU/CPU侧生成的数据,首要依靠原始结构中的源生才能,将模型中每一个算子节点的输入输出数据进行保存。

NPU模型数据即为经过对原始模型的搬迁或练习在县腾A处理器上得到的数据,首要依靠华为侧供给对运用推理及练习供给的Dump才能,将模型中每一个算子节点的输入输出数据进行保存。

由于MindStudio精度比对东西的运用束缚,数据需求满意以下格局:

基于训练和推理场景下的MindStudio高精度对比

原始模型数据预备

以TensorFlow为例

在进行TensorFlow模型生成npy数据前,您需求已经有一套完好的、可履行的、规范的TensorFlow模型运用工程。然后运用TensorFlow官方供给的debug东西tfdbg调试程序,从而生成npy文件。通常情况下,TensorFlow的网络完成方式首要分为Estimator形式和session.run形式,具体操作如下:

修正tf练习脚本,增加debug选项设置

基于训练和推理场景下的MindStudio高精度对比

履行推理或练习脚本,使命运转到前面debug装备后暂停

进入调试指令行交互形式后,

3.1 输入run指令,练习会往下履行一个step
3.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.3 将上一步生成的tensor name cmd.txt文件内容张贴履行,即可存储一切npy文件,完成练习数据的Dump。

注: 愈加具体操作见《CANN开发辅助东西攻略》中“精度比对东西运用攻略”章节。

NPU模型数据预备

以推理场景为例

推理场景数据预备一NPU的交融后推理数据NPU采用AscendCL完成离线推理:

在代码中调用acllnit(“./acl.json”)

acl.json的文件内容如下:

基于训练和推理场景下的MindStudio高精度对比

运转推理运用,生成dump数据

基于训练和推理场景下的MindStudio高精度对比

以练习场景为例

练习场景数据预备-NPU的搬迁后网络练习数据

以TensorFlow为例,步骤如下:

设置“DUMP GE GRAPH=2”生成核算图文件,一起修正练习脚本,开启dump功用

基于训练和推理场景下的MindStudio高精度对比

履行练习脚本,生成dump数据和核算图文件

  • 核算图文件:“ge”最初的文件,存储在练习脚本所在目录

  • dump数据文件: 生成在dump path指定的目录下,即(dump path)/time)/(deviceid)/(model name)/(model id)/(data index) 。

选取核算图文件

可运用grep lterator* Build.txt指令快速查找出的核算图文件名称,如ge proto 00005 Build.txt.

选取dump数据文件

打开上述核算图文件,找出第一个graph中的name字段,即为dump文件寄存目录名称。

精度比照东西运用方法

创建比照使命

将预备好的规范数据文件与待比对数据文性作为输入文件,并装备对应的离线模型文件,经过对文件内一切参加核算的算子输入与输出进行精度比对。

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

基于训练和推理场景下的MindStudio高精度对比

整网比照成果

整网比对成果首要分为四大展现模块:

  • 整网比照成果表;

  • 精度散点图;

  • 模型可视化:

  • 精度专家主张

基于训练和推理场景下的MindStudio高精度对比

精度比对东西本身只供给自有完成算子在昇腾AI处理器上的运算成果与业界规范算子的运算成果的差异比对功用,而输出的比对成果需求用户自行剖析并找出问题。而对成果的剖析作业关于用户来说也是一大难点,而专家体系东西为用户供给精度比对成果的成果剖析功用,有效削减用户排查问题的时刻。只需在比对操作装备使命时勾选“Advisor”选项,体系则会在比对完成后自动进行成果文件的剖析,并输出优化主张。

当时支持的剖析检测类型有:FP16溢出检测、输入不一致检测、整网一致性检测(整网一致性检测包括:问题节点检测、单点误差检测和一致性检测三个小点)

这里特别阐明下FP16溢出检测,针比照对数据中数据类型为FP16的数据,进行溢出检测。如果存在溢出数据,输出专家主张,示例图如下所示。

专家体系剖析成果:
Detection Type: FP16 overflow
Operator Index: 228
Expert Advice: Float16 data overflow occurs. Rectify the fault and perform comparison again.
检测类型:FP16溢出检测
Operator Index:228
专家主张:存在Float16数据溢出,请修正溢出问题,再进行比对。

基于训练和推理场景下的MindStudio高精度对比

单算子比照

可针对整网使命中的某个算子进行单算子比对,剖析某个算子的具体精度差异。

基于训练和推理场景下的MindStudio高精度对比

运用束缚

  • 精度比对功用不支持打开多个工程一起进行比对,能够先完成一个比对程序后再进行下一个。

  • 精度比对支持的dump数据的类型:

    FLOAT FLOAT16 DT_INT8 DT_UINT8 DT_INT16 DT_UINT16 DT_INT32 DT_INT64 DT_UINT32 DT_UINT64 DT_BOOL DT_DOUBLE

特别阐明

dump文件无法经过文本东西直接查看其内容,为了查看dump文件内容,需求用脚本将dump文件转化为numpy格局文件后,再经过numpy官方供给的才能转为txt文档进行查看。脚本在/home/HwHiAiUser/Ascend/ascend-toolkit/latest/tools/operator_cmp/compare目录,名为msaccucmp.py。举例用法如下:

python3 msaccucmp.py convert -d dump_file [-out output] [-f format -s shape] [-o output_tensor] [-i input_tensor] [-v version] [-t type]

调用Python,转化numpy文件为txt文件的完好示例如下:

$ python3
>>> import numpy as np
>>> a = np.load("/home/HwHiAiUser/dumptonumpy/Pooling.pool1.1147.1589195081588018.output.0.npy")
>>> b = a.flatten()
>>> np.savetxt("/home/HwHiAiUser/dumptonumpy/Pooling.pool1.1147.1589195081588018.output.0.txt", b)

但转化为.txt格局文件后,维度信息、Dtype均不存在。具体的运用方法请参阅numpy官网介绍。

总结

精度比照总计分为环境预备、数据预备和比照三步。

数据预备要依据推理场景和练习场景分别剖析:

  • 推理场景:预备第三方结构原始模型的npy数据文件与离线模型的dump数据文件。

  • 练习场景:预备依据GPU运转生成的第三方结构原始练习网络npy数据文件与依据昇腾AI处理器运转生成的练习网络dump数据和核算图文件。

预备后上述步骤,可进行比照:

  • 履行整网比对操作。

  • 开启MindStudio的“Ascend > Model Accuracy Analyzer”功用,将预备好的比对数据文件装备到对应参数下并装备具体比对参数。

  • MindStudio履行比对操作并输出比对成果。

  • 比对成果专家主张(可选)。请拜见比对成果专家主张。

  • 依据剖析成果定位具体问题算子。

  • 履行单算子比对操作。

  • 剖析单算子具体问题。

最终说下Tensor比对,Tensor比照供给整网比对和单算子比对两种精度比对方式,需求依据比对场景选择比对方式。其间,整网比对:将预备好的规范数据文件与待比对数据文件作为输入文件,经过对文件内一切参加核算的算子进行精度比对。而单算子比对:在整网比对的基础上指定具体算子名,对单个算子进行具体数据的比对。

个人认为,精度比照这是一个需求时刻、精力和经验的操作,要充分运用好MindStudio东西,或查文档,或发问,可大大降低咱们的作业量,提高效率。可是不得不说,这是需求一定经验的,仍是要多看多学习,多试多问啊。

点击关注,第一时刻了解华为云新鲜技能~