【2023 · CANN训练营第一季】MindSpore模型快速调优攻略 第二章——MindSpore调试调优

news/2024/11/7 22:36:09/

1.生态迁移

image.png

生态迁移工具使用示例

image.png

生态迁移工具技术方案

不同框架间模型定义前端表达差别巨大(相同算子的API技术难点 、
算子功能、模型构建方式差别较大);
对于同一框架,不管前端表达差异如何,最终对应的计算
图是相似的。因此提出:基于模型的迁移方案
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jZ1Xkxst-1685069610205)(https://bbs-img.huaweicloud.com/blogs/img/20230526/1685068836900161981.png)]
image.png

onnx介绍:

image.png

生态迁移工具迁移案例分享

image.png
教程步骤:

  1. ONNX模型导出;
  2. ONNX模型验证;
  3. MindConverter进行模型脚本和权重迁移;
  4. MindSpore模型验证;

2.模型精度调优

MindSpore调试器是为图模式训练提供的调试工具,可以用来查看并分析计算图节点的中间结果。
操作流程:
• 以调试器模式启动MindInsight,等待训练连接;
mindinsight start --port {PORT} --enable-debugger True --debugger-port {DEBUGGER_PORT}
• 配置相关环境变量,运行训练脚本;
export ENABLE_MS_DEBUGGER=1 export MS_DEBUGGER_PORT={DEBUGGER_PORT}
• 训练连接成功,在MindInsight调试器界面设置监测点;
• 在MindInsight调试器界面分析训练执行情况。
在MindSpore图模式的训练过程中,用户无法从Python层获取到计算图中间节点的结果,使得训练调试变得很困难。使用MindSpore调试器,用户可以:
• 在MindInsight调试器界面结合计算图,查看图节点的输出结果;
• 设置监测点,监测训练异常情况(比如检查张量溢出),在异常发生时追踪错误原因;
• 查看权重等参数的变化情况。

• 使用调试器功能对训练现场进行检查
– 配置“检查权重变化过小”监测点,检查权重是否变化过小;
– 配置“检查未变化权重”监测点,检查权重是否不更新;
– 配置“检查梯度消失”监测点,定位异常的梯度;
– 配置“检查张量溢出”监测点,定位NAN/INF出现位置;
– 配置“检查过大张量”监测点,定位出现大值的算子;
– 配置“检查权重变化过大”、“检查梯度消失”、“检查梯度过大”监测点,定位异常的权重或梯度;

3.模型性能调优

性能调优工具Profiler介绍

Profiler为MindSpore提供了性能调优能力,在算子性能、迭代性能、数据处理性能等方面提供了易用、丰富的调试功能,帮助用户快速定位性能瓶颈点,提升网络性能。
Profiler工具为用户提供的能力可以分成两部分:
 MindSpore侧在训练脚本中为用户提供性能数据收
集的启动接口和数据分析接口,最终生成性能数据
文件;
 MindInsight侧为用户提供可视化界面,将通过多个
维度展示性能数据以及统计分析结果。
image.png

使用方法:

  1. 训练开始阶段初始化Profiler,开始性能收集;
  2. 训练结束后使用analyse方法解析性能数据。

注意:
 目前Profiler已经支持GPU场景,GPU下的使用方法和
Ascend的使用方法一致;
 GPU初始化Profiler时只有output_path参数有效;

  1. 启动MindInsight可视化界面:
    mindinsight start --port 9001 --summary-base-dir ./
  2. 通过浏览器访问MindInsight交互式界面:
    <your server ip address>:9001/
  3. 停止MindInsight可视化服务:
    mindinsight stop --port 9001

本章总结

• 生态迁移工具的能力与基本使用:
mindconverter --help
• 精度调试器的能力与基本使用;
mindinsight start --port {PORT} --enable-debugger True --debugger-port {DEBUGGER_PORT}
• 性能调试器的能力与基本使用;
训练脚本中添加:profiler = Profiler(), …, profiler.analyse()
• ONNX模型的基本概念:
– Graph, Node, Value Info, Initializer;


http://www.ppmy.cn/news/87600.html

相关文章

每天一个面试题之==和equals的区别是什么?

&#xff1d;&#xff1d;和equals的区别是什么&#xff1f; ""是一个关系运算符&#xff0c;关系运算符可以用来进行数据和数据之间的比较&#xff0c;而在java中数据类型大致可以分为两大类分别是基本数据类型和引用数据类型。 基本数据类型包含 byte&#xff0c…

【C++】布隆过滤器

文章目录 布隆过滤器的引入布隆过滤器的概念如何选择哈希函数个数和布隆过滤器长度布隆过滤器的实现布隆过滤器的优缺点 布隆过滤器的引入 我们在使用新闻客户端看新闻时&#xff0c;它会给我们不停地推荐新的内容&#xff0c;它每次推荐时要去重&#xff0c;去掉那些已经看过…

RabbitMQ 小白教程,从安装到使用

主要内容 AMQP简介 RabbitMQ简介 RabbitMQ原理 Erlang安装 安装RabbitMQ RabbitMQ账户管理 交换器 学习目标 知识点要求AMQP简介掌握RabbmitMQ简介掌握RabbitMQ原理掌握Erlang安装掌握安装RabbitMQ掌握RabbitMQ账户管理掌握交换器掌握 一、 AMQP简介 1 AMQP是什么?…

[算法前沿]--018-中文大模型ChatGLM微调:P-Tuning,deepspeed,LoRA<下>

文章目录 1.模型部署使用自己的数据集对话数据集1.模型部署 首先载入Tokenizer: from transformers import AutoConfig, AutoModel, AutoTokenizer# 载入Tokenizer tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)如果需…

【深度剖析】JavaScript中块级作用域与函数作用域

前言 系列首发于公众号『前端进阶圈』&#xff0c;若不想错过更多精彩内容&#xff0c;请“星标”一下&#xff0c;敬请关注公众号最新消息。 面试官必问系列&#xff1a;深入理解JavaScript块和函数作用域 在 JavaScript 中&#xff0c;究竟是什么会生成一个新的作用域&#…

C语言基础知识:宏定义

目录 一.预处理 二.宏定义用法 ①宏常量 ②宏语句 ③宏函数 ④其它 1.#undef 是用来撤销宏定义的&#xff0c;用法如下&#xff1a; 2.使用ifndef防止头文件被重复包含和编译 三.宏定义相关作用符 ①换行符 "\" ②字符串化符 "#" ③片段连接符&…

计算机毕业论文选题推荐|软件工程|系列九

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于(***语言)学生在校信息管…

我们拆了一款Tof+AI避障的扫地机,小米铁蛋铁大机器人同款

追觅W10 Pro是2022年初推出的新品&#xff0c;相较前一代W10&#xff0c;两者间最大的区别是将LDS避障升级为了TofAI避障&#xff0c;扫地机本体前脸像给W10开了“大眼特效”的传感器和摄像头就是机械避障升级的最佳佐证。 在外观上扫地机还是延续了以往的设计&#xff0c;顶部…