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

基于,训练,推理,场景,mindstudio,高精度,对比 · 浏览次数 : 165

小编点评

**精精度对比** 精精度对比是一个需要时间、精力和经验的操作,要充分利用好MindStudio工具,或查文档,或提问,可大大降低我们的工作量,提高效率。 **步骤** 1. **环境准备**:准备第三方框架原始模型的npy数据文件与离线模型的dump数据文件。 2. **数据准备**:准备基于推理场景和训练场景分别分析:推理场景:准备第三方框架原始训练网络训练网络npy数据文件与基于昇腾AI处理器运行生成的训练网络dump数据和计算图文件。训练场景:准备基于GPU运行生成的第三方框架原始训练网络训练网络npy数据文件与基于昇腾AI处理器运行生成的训练网络dump数据和计算图文件。 3. **准备**:进行环境准备、数据准备和对比三步。 4. **执行**:执行整网比对操作。开启MindStudio的“Ascend > Model Accuracy Analyzer”功能,将准备好的比对数据文件配置到对应参数下并配置具体比对参数。MindStudio执行比对操作并输出比对结果。 5. **分析**:分析比对结果,定位具体问题算子。 6. **执行单算子比对操作**:在整网比对基础上指定具体算子名,对单个算子进行详细数据的比对。

正文

摘要:MindStudio提供精度比对功能,支持Vector比对能力。

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

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

为了帮助开发人员快速解决算子精度问题,需要提供自有实现的算子运算结果与业界标准算子运算结果之间进行精度差异对比的工具。

对策:

精度比对工具能够帮助开发人员定位本次任务两个网络间的精度差异。准备好昇腾腾AI处理器运行生成的dump教据与Ground Truth数据 (基于GPU/CPU运行生成的数据)后,即可进行不同算法评价指标的数据比对。

MindStudio提供精度比对功能,支持Vector比对能力,支持下列算法:

  • 余弦相似度
  • 最大绝对误差
  • 累积相对误差
  • 欧氏相对距离
  • KL散度…

精度比对根据推理/训练和不同的框架分为多个比对场景。

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

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

由于MindStudio精度比对工具的使用约束,数据需要满足以下格式:

原始模型数据准备

以TensorFlow为例

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

1.修改tf训练脚本,添加debug选项设置

2.执行推理或训练脚本,任务运行到前面debug配置后暂停

3.进入调试命令行交互模式后,

  • 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完成离线推理:

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

acl.json的文件内容如下:

2.运行推理应用,生成dump数据

以训练场景为例

训练场景数据准备-NPU的迁移后网络训练数据

以TensorFlow为例,步骤如下:

1.设置“DUMP GE GRAPH=2”生成计算图文件,同时修改训练脚本,开启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菜单,进入比对界面。

整网对比结果

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

  • 整网对比结果表;
  • 精度散点图;
  • 模型可视化:
  • 精度专家建议

精度比对工具本身只提供自有实现算子在昇腾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数据溢出,请修正溢出问题,再进行比对。

单算子对比

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

使用约束

  • 精度比对功能不支持打开多个工程同时进行比对,可以先完成一个比对程序后再进行下一个。
  • 精度比对支持的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工具,或查文档,或提问,可大大降低我们的工作量,提高效率。但是不得不说,这是需要一定经验的,还是要多看多学习,多试多问啊。

 

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

与基于训练和推理场景下的MindStudio高精度对比相似的内容:

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

摘要:MindStudio提供精度比对功能,支持Vector比对能力。 本文分享自华为云社区《【MindStudio训练营第一季】MindStudio 高精度对比随笔》,作者:Tianyi_Li。 训练场景下,迁移原始网络 (如TensorFlow、PyTorch) ,用于NPU上执行训练,网络迁移

理论+实践,揭秘昇腾CANN算子开发

摘要: 本文介绍了CANN自定义算子开发的几种开发方式和算子的编译运行流程。然后以开发一个DSL Add算子为例,讲解算子开发的基本流程。 本文分享自华为云社区《昇腾CANN算子开发揭秘》,作者:昇腾CANN 。 开发者在利用昇腾硬件进行神经网络模型训练或者推理的过程中,可能会遇到以下场景: 训练场

本地推理,单机运行,MacM1芯片系统基于大语言模型C++版本LLaMA部署“本地版”的ChatGPT

OpenAI公司基于GPT模型的ChatGPT风光无两,眼看它起朱楼,眼看它宴宾客,FaceBook终于坐不住了,发布了同样基于LLM的人工智能大语言模型LLaMA,号称包含70亿、130亿、330亿和650亿这4种参数规模的模型,参数是指神经网络中的权重和偏置等可调整的变量,用于训练和优化神经网络

Llama2-Chinese项目:1-项目介绍和模型推理

Atom-7B与Llama2间的关系:Atom-7B是基于Llama2进行中文预训练的开源大模型。为什么叫原子呢?因为原子生万物,Llama中文社区希望原子大模型未来可以成为构建AI世界的基础单位。目前社区发布了6个模型,如下所示: FlagAlpha/Atom-7BFlagAlpha/Llama2

跨域推荐:嵌入映射、联合训练和解耦表征

跨域推荐旨在利用从其它相关源域收集的用户-物品交互信息以提升目标域的推荐质量。传统的跨域推荐方法常常基于嵌入和映射(Embedding and Mapping,EMCDR) 的思路,这种方法在进行对齐操作之前,各领域需要先通过预训练以独立地得到用户/物品的embeddings。因此,有偏的(biased) 预训练表征将无可避免地包含领域特有的(domain-specific) 信息,从而会导致对跨

CANN训练:模型推理时数据预处理方法及归一化参数计算

摘要:在做基于Ascend CL模型推理时,通常使用的有OpenCV、AIPP、DVPP这三种方式,或者是它们的混合方式,本文比较了这三种方式的特点,并以Resnet50的pytorch模型为例,结合训练营提供的sample,说明了分别是如何实现预处理的。 本文分享自华为云社区《【2023 · CA

又一重要进展发布!OpenMMLab算法仓支持昇腾AI训练加速

摘要:上海人工智能实验室的浦视开源算法体系(OpenMMLab)团队基于昇腾AI发布了MMDeploy 0.10.0版本,该版本已支持OpenMMLab算法仓库在昇腾异构计算架构CANN上的推理部署。 本文分享自华为云社区《又一重要进展发布!OpenMMLab算法仓支持昇腾AI训练加速》,作者:昇腾

Langchain-Chatchat项目:1.1-ChatGLM2项目整体介绍

ChatGLM2-6B是开源中英双语对话模型ChatGLM-6B的第2代版本,引入新的特性包括更长的上下文(基于FlashAttention技术,将基座模型的上下文长度由ChatGLM-6B的2K扩展到了32K,并在对话阶段使用8K的上下文长度训练);更高效的推理(基于Multi-QueryAtte

基于ChatGPT用AI实现自然对话

1.概述 ChatGPT是当前自然语言处理领域的重要进展之一,通过预训练和微调的方式,ChatGPT可以生成高质量的文本,可应用于多种场景,如智能客服、聊天机器人、语音助手等。本文将详细介绍ChatGPT的原理、实战演练和流程图,帮助读者更好地理解ChatGPT技术的应用和优势。 2.内容 在当今快

基于Llama2模型的开源模型

2023年7月18日Meta开源了Llama2,在2万亿个Token上训练,可用于商业和研究,包括从7B到70B模型权重、预训练和微调的代码。相比Llama1,Llama2有较多提升,评估结果如下所示: 基于Llama2模型的开源模型如下所示: 1.WizardCoder Python V1.0 h