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

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;

猜你喜欢

转载自blog.csdn.net/qq_45257495/article/details/130882367