MindSpore模型快速调优攻略笔记分享(上)

news2024/11/18 19:28:21

• 近年来,深度学习技术在语音识别、自然语言处理、计算机视觉、信息检索等任务上取得了突破性进展;

• 深度学习模型的复杂度与规模日益扩张,导致模型的调试调优成为了困扰算法工程师的一大难题;

• MindSpore是由华为自研的深度学习框架,最佳匹配昇腾Al处理器算力,为数据科学家和算法工程师提供设计友好、运行高效的开发体验;

• 在广泛吸纳行业用户诉求后,MindSpore推出Mindlnsight工具包,涵盖生态迁移、调试调优,以解决用户关键诉求。

1. 调试调优背景介绍

随着深度学习技术的普及,深度学习框架如雨后春笋般涌现...

目标用户:

1.对于从其他框架切换到MindSpore的用户

2.对于期望基于MindSpore做研究开发的用户。

模型训练\推理过程中可能遇到的问题:

代码编写错误,问题难以定位;

模型结构错误;

权重更新错误;·损失函数设计错误;

半精度下计算溢出;Loss scale调整不当;

过拟合、欠拟合;

梯度消失/爆炸;

激活值饱和;

学习率设置不当;

批大小(batch size)、期(Epoch)设置不当;

模型训练/推理慢

MindSpore介绍

关键特性

1.自动并行:动整图切分,感知集群拓扑,实现通信开销最小,融合数据并行与模型并行;

2.二阶优化:利用二阶计算修正梯度更新方向,找到训练梯度最

优下降路径,从而加速训练收敛过程;

3.动静态图结合:统一自动微分引擎支持动静态图,一行代码完

成模式切换,兼顾模型开发和执行效率;

4.全场景部署协同:超轻量技术,模型压缩、自适应模型生成、

loT超轻量运行时,基于异构的混合并行;

5.全栈协同加速:通过多级并行、图算融合等深度图优化,以及

跨层内存复用技术,发挥昇腾极致性能;

6.迁移及调试工具:覆盖生态迁移、精度调优、性能调优全场景、可视化,脚本迁移自动化,降低开发门槛,提高调试效率;

7.Alt科学计算,场景应用创新,拓展MindSpore的边界

8.安全可信,首个企业级Al可信计算框架(TrustedAl)

Mindlnsight介绍

生态迁移、精度调优、性能调优、模型解释

高效迁移,节省迁移人力

精度快速达标加速模型上市

助力框架性能、异构硬件算力发挥

模型结果可解释

 

2.MindSpore调试调优

生态迁移

根据TensorFlow pb/ONNX模型文件生成MindSpore模型定义脚本以及权重文件。

 

基于迁移后BERT模型做情感分类下游任务训练,在4000个样本的小训练集上训练10个epoch,模型精度达到91.49%。

节省Pre-training训练时间的同时,下游任务精度也不受影响.

√迁移后脚本正确性

√迁移后权重推理正确性

√迁移后权重微调正确性

 

生态迁移工具使用示例

mindconverter --model_file bert.onnx --shape 1,128 1,128 1,128 \

--input_nodes input_ids attention_mask token_type_ids \

--output_nodes output_e --output /home/user/output

 

生态迁移工具技术方案

不同框架间模型定义前端表达差别巨大(相同算子的API\算子功能、模型构建方式差别较大);

对于同一框架。不管前端表达差异如何,最终对应的计算图是相似的。因此提出:基于模型的迁移方案

 

opset算子集

graph存储模型的计算图

input存储计算图输入节点

output存储计算图输出节点

initializer存储模型权重(张量)

node存储计算图上的计算节点

value_info存储计算图上节点的输出信息

导出ONNX模型时训练阶段算子会丢失。需要转换后用户手动补回;

·推荐使用opset11+保存ONNX模型,若ONNX模型版本过低可能导致MindConverter转换失败;

MindConverter暂不支持包含控制流节点的模型;

PyTorch Bert迁移案例

 

教程步骤:

1. ONNX模型导出;

2. ONNX模型验证;

3. MindConverter进行模型脚本和权重迁移;

4. MindSpore模型验证;

https://gitee.com/mindspore/mindinsight/blob/master/mindinsight/mindconverter/tutorial/pytorch_bert_migration_tutorial.ipynb 

模型精度调优

MindSpore调试器是为图模式训练提供的调试工具,可以用来查看并分析计算图节点的中间结果。

操作流程

以调试器模式启动MindInsight,等待训练连接;

配置相关环境变量,运行训练脚本;

训练连接成功,在MindInsight调试器界面设置监测点;

在MindInsight调试器界面分析训练执行情况。

调试器介绍

• 在MindSpore图模式的训练过程中,用户无法从Python层获取到计算图中间节点的结果,使得训练调试变得很困难。使用MindSpore调试器,用户可以:

• 在MindInsight调试器界面结合计算图,查看图节点的输出结果;·设置监测点,监测训练异常情况(比如检查张量溢出),在异常发生时追踪错误原因;

• 查看权重等参数的变化情况。

模型精度调优

丰富的训练信息检查能力

检查计算过程溢出

检查权重变化过大

检查张量是否全为0

检查权重变化过小

检查张量溢出

检查未变化权重

检查张量值范围

检查权重溢出

检查过大张量

检查过大权重

检查过小张量

检查过小权重

检查梯度爆炸

检查激活值范围

检查梯度过大

检查梯度消失

推荐监测点,开箱即用

Re-check,不漏过可疑点

调优建议,引导定位思路

张量关系图,查找问题源头

使用调试器功能对训练现场进行检查

• 配置“检查权重变化过小”监测点,检查权重是否变化过小;

• 配置“检查未变化权重”监测点,检查权重是否不更新;

• 配置“检查梯度消失”监测点,定位异常的梯度;

• 配置“检查张量溢出”监测点,定位NAN/INF出现位置;

• 配置“检查过大张量”监测点,定位出现大值的算子;

• 配置“检查权重变化过大”、“检查梯度消失”、“检查梯度过大”监测点,定位异常的权重或梯度;

Debugger演示视频

背景:

1.基于迁移后的BERT模型,在mindspore下开发情感分类模型。经过训练发现模型loss不收敛,因此尝试通过调试器定位问题根因;

2.在算法实现层面已经做过排查,损失函数.优化器都没问题;

3.由于BERT模型的正确性已经验证过了,并且在训练过程中只训练下游任务分类器的权重(model.weight, model.bias):;因此,将问题定位思路集中在下游任务分类器的权重更新以及模型训练数据:

a. weightFObias的初始值、weight和bias的梯度、模型的学习率;

b.训练数据错误;

性能调优工具Profiler介绍

Profiler为MindSpore提供了性能调优能力,在算子性能、迭代性能、数据处理性能等方面提供了易用、丰富的调试功能,帮助用户快速定位性能瓶颈点,提升网络性能。

Profiler工具为用户提供的能力可以分成两部分:

MindSpore侧在训练脚本中为用户提供性能数据收集的启动接口和数据分析接口,最终生成性能数据文件;

MindInsight侧为用户提供可视化界面,将通过多个维度展示性能数据以及统计分析结果。

使用方法:

1.训练开始阶段初始化Profiler,开始性能收集;

2.训练结束后使用analyse方法解析性能数据。

注意:

目前Profiler已经支持GPU场景,GPU下的使用方法和Ascend的使用方法一致;

GPU初始化Profiler时只有output_path参数有效;

使用方法:

1.启动MindInsight可视化界面;

mindinsight start --port 9081 --summary-base-dir ./

2通过浏览器访问MindInsight交互式界面:

cyour server ip address> : 9001/

2. 停止MindInsight可视化服务:

mindinsight stop --port 9ee1

注意:

由于安全原因,非本机访问MindInsight服务。需要在

MindInsight启动前,修改MindInsight安装目录下的conf/constant.py中相关配置;

迭代轨迹展示了每个迭代各个阶段的性能信息:包括迭代间隙、前向反向、迭代拖尾以及每个all_reduce的信息。

数据准备阶段性能分析分为两部分:

1. 迭代间隙数据处理分析;

2. .数据处理pipeline分析。

右图展示了迭代间隙阶段执行的操作的流程,其中两个队列是连接三个操作的通道通过分析队列中数据的情况判断出现性能问题的步骤。

训练过程可视

训练看板

计算图可视

参数分布可视

张量可视

生态迁移工具的能力与基本使用;

mindconverter --help

精度调试器的能力与基本使用;

mindinsight start --port{PORT}--enable-debugger True --debugger-port {DEBUGGER_PORT}

性能调试器的能力与基本使用;

训练脚本中添加:profiler = Profiler(),, profiler.analyse(

ONNX模型的基本概念:

- Graph,Node, Value lnfo, Initializer;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/125159.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

整理收集python面试常见题目

1.多进程和多线程 1.python多进程和多线程看这一篇就够了_T型人小付的博客-CSDN博客 2.多进程和多线程的实现:一文看懂Python多进程与多线程编程(工作学习面试必读) - 知乎 3.多线程的补充:一文看懂Python多进程与多线程编程(工作学习面试必读) - 知乎…

软件测试面试技巧 这么准备,拿下心仪offer不是问题

拥有一个心仪的offer,是每个软件测试工程师们都梦寐以求的事情,那如何才能通过最后的面试一关,拿到offer呢? 俗话说,知己知彼百战不殆,作为测试员,在面试前对面试官可能提出的问题进行总结和准…

UDS - 14.2.1 RoutineControl (31) service

来自:ISO 14229-1-2020.pdf 目录 14.2.1 服务描述 14.2.1.1 概述 14.2.1.2 通过引用routineIdentifier来启动一个例程 14.2.1.3 通过引用routineIdentifier来停止一个例程 14.2.1.4 通过引用routineIdentifier来请求例程结果 14.2.2请求消息 14.2.2.1请求消…

【从零开始学习深度学习】31. 卷积神经网络之残差网络(ResNet)介绍及其Pytorch实现

和之前介绍的批量归一化层作用类似,残差网络(ResNet)提出的主要目的也是为了优化深度神经网络中数值稳定性问题。 1. 残差块介绍 假设输入为x\boldsymbol{x}x,希望学出的理想映射为f(x)f(\boldsymbol{x})f(x)。下图左右为普通网…

【GO】 K8s 管理系统项目[API部分--Namespace]

K8s 管理系统项目[API部分–Namespace] 1. 接口实现 service/dataselector.go type namespaceCell corev1.Namespacefunc(n namespaceCell) GetCreation() time.Time {return n.CreationTimestamp.Time }func(n namespaceCell) GetName() string {return n.Name }2. Namespa…

景联文科技:赋能智能安防,详谈其中运用到的数据标注类型

“数据显示,2013-2020年我国智能安防行业市场规模由101亿元增长至511亿元。随着智能安防在多个领域的深化应用,预计2023年我国智能安防行业市场规模将超1000亿元。 智能安防领域中,数据标注主要应用于计算机视觉与语音识别两个主要领域,具体…

人口数据可视化,深圳是人口密度最高的城市,东莞上海位居二三名

进入2022年以来,人口问题频频引起热议,人口老龄化、生育意愿再创新低、男女比例失衡等等问题频出。具体的人口问题如何,跟随可视化互动平台的数据可视化大屏一起来了解吧! 我国各省人口数量从地图分布图看,广东省、山…

安装Pytorch

太难了 之前在学校就没安装好 各种报错 终于安装好了 浅浅记录一下 撒花撒花 菜鸡经验: 1.本地python 与 Anaconda 是两个独立的东西 2.可直接在Anaconda中创建不同新的虚拟环境以适配不同的需求 3.cuda 的版本与 NVIDIA版本需要一致,与Python环境也需要…

Echarts图表相关知识

一个基于 JavaScript 的开源可视化图表库。目前我们的前端框架中已经集成了Echarts库v5.3.2),使用的时候不需要再次安装,直接使用即可,具体安装方法不再赘述。 有些时候官网的例子不满足我们的需求,这个时候就要求我们…

cq:fast lookup argument

1. 引言 Ariel Gabizon等人2022年论文《cq: Cached quotients for fast lookups》。 lookup argument的核心思想为: 对于特定的quotient多项式,经某种预处理之后,将更易于计算其commitments。 当前的lookup argument系列方案主要有&#…

实拍视频、图片素材库,高质量、免费下载。

这几个网站的实拍素材,质量高,还可以免费下载。 1、菜鸟图库 https://www.sucai999.com/?vNTYwNDUx 菜鸟图库有超多设计类素材,像平面、UI、电商、办公类等等在这个网站都能找到,网站还有很多实拍视频素材,质量很高&a…

k8s集群部署01

k8s集群部署01Kubernetes简介Kubernetes部署节点部署关于yum缓存提示满了,Rhel7换源解决报错解决过程配置文件内容—要自己看链接是否过期集群初始化Kubernetes-kubectl命令出现错误【The connection to the server localhost:8080 was refused - did you specify t…

git chrry pickup

git chrry pickup目录概述需求:设计思路实现思路分析1.java2.转移分支3.git merge4.cherry pick.切换到 master 分支Cherry pick 操作参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,…

基于MVC的在线影票售卖系统/基于ASP.NET的电影院售票系统

摘 要 随着电影院规模的不断扩大,人流数量的急剧增加,有关电影院的各种信息量也在不断成倍增长。面对庞大的信息量,就需要有在线影票售卖系统来提高电影院工作的效率。通过这样的系统,我们可以做到信息的规范管理和快速查询&…

副业项目分享,旧衣回收项目怎么做

大家好,我是蝶衣王的小编,今天分享一个简单的项目 我们每个家庭都有多余的旧衣服。许多人会直接把它们扔进垃圾桶。然而,这里隐藏着巨大的商机。说到这里,每个人都应该想到:旧衣服的回收。 事实上,目前国…

《位图布隆过滤器》

【一】位图的概念 位图,就是用每一个比特位来存放某种状态,适用于海量数据,整数,数据无重复的场景,通常是用来判断某个数据存不存在的。例如:10个整数本应该存放四十个字节,此时用位图只需要十…

Ajax(JavaWebAjax、源生Ajax、跨域)

1.JavaWeb - Ajax 概念:AJAX(Asynchronous Java JavaScript And Xml ):异步的JavaScript和Xml AJAX作用: 与服务器进行数据交换:通过AJAX可以给服务器发送请求,并获取服务器响应的数据。 使用…

2022-12-28-面试题整理

1. Spring中Bean创建完成后执行指定代码的几种实现方式 实现ApplicationListener接口 实现ApplicationListener接口并实现方法onApplicationEvent()方法,Bean在创建完成后会执行onApplicationEvent()方法 Component public class DoByApplicationListener impleme…

Java操作redis数据库之读取csv文件

csv文件 要想对某个文件进行具体操作,首先要了解这个文件的结构。csv 全称“Comma-Separated Values”,是一种逗号分隔值格式的文件,是一种用来存储数据的纯文本格式文件。CSV 文件由任意数目的记录组成,记录间以某种换行符分隔&…

FPGA再入门——UART IP核调用

我的工作偏向硬件设计与调试,但是经过几年的发展,发觉不会调程序发展真的很受限制。最近越来越被这种限制折磨的很难受,所以开始学习调调程序。其实,本科与研究生阶段都有过做写代码的经历,算是入过门。但是&#xff0…