转载地址:MindSpore调试器笔记分享_MindSpore_昇腾论坛_华为云论坛
作者:Jack20
快速定位模型精度问题--MindSpore调试器
在图模式下,用户难以从Python层获取到计算图中间节点的结果。MindSpore调试器是为图模式训练提供的调试工具,可以用来查看并分析计算图节点的中间结果。
使用MindSpore调试器,可以:
(1)在MindInsight调试器界面结合计算图,查看图节点的输出结果;
(2)设置监测点,监测训练异常情况(比如检查张量溢出),在异常发生时追踪错误原因;
(3)查看权重等参数的变化情况。
一、常见精度问题和定位思路
(1)常见现象
- loss:跑飞,不收敛,收敛慢
- metrics:accuracy、precision等达不到预期
- 梯度:梯度消失、梯度爆炸
- 权重:权重不更新、权重变化过小、权重变化过大
- 激活值:激活值饱和、dead relu
(2)常见问题
- 模型结构问题:算子使用错误、权重共享错误、权重冻结错误、节点连接错误、 loss函数错误、优化器错误等
- 超参问题:超参设置不合理等
- 数据问题:缺失值过多、异常值、未归一化等
(3)常用定位思路
(1定位准备
- 回顾算法设计,全面熟悉模型
•算法设计、超参、loss、优化器、数据处理等
•参考论文、其它实现 - 熟悉可视化工具
•安装MindInsight https://www.mindspore.com/install
•加入SummaryCollector callback,收集训练信息
•在summary_dir的父目录中启动MindInsight
•mindinsight start
•熟悉调试器使用 - 熟悉调试器
•MindSpore调试器是为图模式训练提供的调试工具
•在MindInsight调试器界面结合计算图,查看图节点的输出结果;
•设置监测点,监测训练异常情况(比如检查张量溢出),在异常发生时追踪错误原因;
•查看权重等参数的变化情况。
使用指南请见 https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/summary_record.html
•debugger使用指南请见https://www.mindspore.cn/tutorial/training/zh-CN/r1.1/advanced_use/debugger.html
(2检查代码、超参、模型结构
- 走读脚本,检查代码
•小黄鸭调试法
•检查代码同模型设计、论文、参考脚本等是否一致 - 超参常见问题:
•学习率不合理
•权重初始化参数不合理等 - MindInsight辅助检查:训练列表->训练参数详情
- 模型结构常见问题:
•算子使用错误(使用的算子不适用于目标场景,如应该使用浮点除,错误地使用了整数除),
•权重共享错误(共享了不应共享的权重),
•权重冻结错误(冻结了不应冻结的权重),
•节点连接错误(应该连接到计算图中的block未连接),
•loss函数错误,
•优化器算法错误(如果自行实现了优化器)等。 - MindInsight辅助检查:训练列表->训练看板->计算图
(3检查输入数据
- 输入数据常见问题:
•数据缺失值过多 •每个类别中的样本数目不均衡 •数据中存在异常值 •数据标签错误
•训练样本不足 •未对数据进行标准化,输入模型的数据不在正确的范围内 •finetune和pretrain的数据处理方式不同
•训练阶段和推理阶段的数据处理方式不同 •数据处理参数不正确等。 - MindInsight辅助检查:训练列表->训练看板->数据抽样
(4检查loss曲线
- 常见现象
•loss跑飞
回顾脚本、模型结构和数据,
•检查超参是否有不合理的特别大/特别小的取值,
•检查模型结构是否实现正确,特别是检查loss函数是否实现正确,
•检查输入数据中是否有缺失值、是否有特别大/特别小的取值。
使用参数分布图检查参数更新是否有剧烈变化
使用调试器功能对训练现场进行检查
•配置“检查张量溢出”监测点,定位NAN/INF出现位置
•配置“检查过大张量”监测点,定位出现大值的算子
•配置“检查权重变化过大”、“检查梯度消失”、“检查梯度过大”监测点,定位异常的权重或梯度
•loss收敛慢
- MindInsight辅助检查:训练列表->训练看板->标量曲线/参数分布图
- 调试器定位
(5检查精度是否达到预期
- 回顾代码、模型结构、输入数据和loss曲线,
•检查超参是否有不合理的值
•检查模型结构是否实现正确
•检查输入数据是否正确
•检查loss曲线的收敛结果和收敛趋势是否存在异常 - 尝试使用“溯源分析”和调参器优化超参
•mindoptimizer --config ./config.yaml --iter 10 - 尝试模型解释
- 尝试优化模型算法
注意事项
- 场景支持
•调试器暂不支持分布式训练场景。
•调试器暂不支持推断场景。
•调试器暂不支持单机多卡/集群场景。
•调试器暂不支持连接多个训练进程。
•调试器暂不支持CPU场景。 - 性能影响
•使用调试器时,会对训练性能产生一定影响。
•设置的监测点数目过多时,可能会出现系统内存不足(Out-of-Memory)的异常。 - GPU场景
•在GPU场景下,只有满足条件的参数节点可以与自身的上一轮次结果作对比:使用下一个节点执行过的节点、使用运行到该节点时选中的节点、作为监测点输入的参数节点。其他情况均无法使用上一轮次对比功能。
•由于GPU上一个轮次是一个子图(而非完整的图),GPU上多图做重新检查时,只能重新检查当前的子图。 - 重新检查只检查当前有张量值的监测点。
- 检查计算过程溢出需要用户开启异步Dump的全部溢出检测功能,开启方式请参照异步Dump功能介绍
- 调试器展示的图是优化后的最终执行图。调用的算子可能已经与其它算子融合,或者在优化后改变了名称。
参考