MindSpore调试器笔记分享

转载地址:MindSpore调试器笔记分享_MindSpore_昇腾论坛_华为云论坛

作者:Jack20

快速定位模型精度问题--MindSpore调试器

在图模式下,用户难以从Python层获取到计算图中间节点的结果。MindSpore调试器是为图模式训练提供的调试工具,可以用来查看并分析计算图节点的中间结果。

使用MindSpore调试器,可以:

(1)在MindInsight调试器界面结合计算图,查看图节点的输出结果;

(2)设置监测点,监测训练异常情况(比如检查张量溢出),在异常发生时追踪错误原因;

(3)查看权重等参数的变化情况。

MindSpore调试器笔记分享_第1张图片

一、常见精度问题和定位思路

(1)常见现象

  1. loss:跑飞,不收敛,收敛慢
  2. metrics:accuracy、precision等达不到预期
  3. 梯度:梯度消失、梯度爆炸
  4. 权重:权重不更新、权重变化过小、权重变化过大
  5. 激活值:激活值饱和、dead relu

(2)常见问题

  1. 模型结构问题:算子使用错误、权重共享错误、权重冻结错误、节点连接错误、 loss函数错误、优化器错误等
  2. 超参问题:超参设置不合理等
  3. 数据问题:缺失值过多、异常值、未归一化等

(3)常用定位思路

MindSpore调试器笔记分享_第2张图片

(1定位准备

  1. 回顾算法设计,全面熟悉模型
    •算法设计、超参、loss、优化器、数据处理等
    •参考论文、其它实现
  2. 熟悉可视化工具
    •安装MindInsight https://www.mindspore.com/install
    •加入SummaryCollector callback,收集训练信息
    •在summary_dir的父目录中启动MindInsight
    •mindinsight start
    •熟悉调试器使用
  3. 熟悉调试器
    •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检查代码、超参、模型结构

  1. 走读脚本,检查代码
    •小黄鸭调试法
    •检查代码同模型设计、论文、参考脚本等是否一致
  2. 超参常见问题:
    •学习率不合理
    •权重初始化参数不合理等
  3. MindInsight辅助检查:训练列表->训练参数详情
  4. 模型结构常见问题:
    •算子使用错误(使用的算子不适用于目标场景,如应该使用浮点除,错误地使用了整数除),
    •权重共享错误(共享了不应共享的权重),
    •权重冻结错误(冻结了不应冻结的权重),
    •节点连接错误(应该连接到计算图中的block未连接),
    •loss函数错误,
    •优化器算法错误(如果自行实现了优化器)等。
  5. MindInsight辅助检查:训练列表->训练看板->计算图

(3检查输入数据

  1. 输入数据常见问题:
    •数据缺失值过多 •每个类别中的样本数目不均衡 •数据中存在异常值 •数据标签错误
    •训练样本不足 •未对数据进行标准化,输入模型的数据不在正确的范围内 •finetune和pretrain的数据处理方式不同
    •训练阶段和推理阶段的数据处理方式不同 •数据处理参数不正确等。
  2. MindInsight辅助检查:训练列表->训练看板->数据抽样

(4检查loss曲线

  1. 常见现象
    •loss跑飞
    回顾脚本、模型结构和数据,
    •检查超参是否有不合理的特别大/特别小的取值,
    •检查模型结构是否实现正确,特别是检查loss函数是否实现正确,
    •检查输入数据中是否有缺失值、是否有特别大/特别小的取值。
    使用参数分布图检查参数更新是否有剧烈变化
    使用调试器功能对训练现场进行检查
    •配置“检查张量溢出”监测点,定位NAN/INF出现位置
    •配置“检查过大张量”监测点,定位出现大值的算子
    •配置“检查权重变化过大”、“检查梯度消失”、“检查梯度过大”监测点,定位异常的权重或梯度

MindSpore调试器笔记分享_第3张图片



•loss收敛慢

  1. MindInsight辅助检查:训练列表->训练看板->标量曲线/参数分布图

MindSpore调试器笔记分享_第4张图片

  1. 调试器定位

(5检查精度是否达到预期

  1. 回顾代码、模型结构、输入数据和loss曲线,
    •检查超参是否有不合理的值
    •检查模型结构是否实现正确
    •检查输入数据是否正确
    •检查loss曲线的收敛结果和收敛趋势是否存在异常
  2. 尝试使用“溯源分析”和调参器优化超参
    •mindoptimizer --config ./config.yaml --iter 10
  3. 尝试模型解释
  4. 尝试优化模型算法

MindSpore调试器笔记分享_第5张图片

注意事项

  1. 场景支持
    •调试器暂不支持分布式训练场景。
    •调试器暂不支持推断场景。
    •调试器暂不支持单机多卡/集群场景。
    •调试器暂不支持连接多个训练进程。
    •调试器暂不支持CPU场景。
  2. 性能影响
    •使用调试器时,会对训练性能产生一定影响。
    •设置的监测点数目过多时,可能会出现系统内存不足(Out-of-Memory)的异常。
  3. GPU场景
    •在GPU场景下,只有满足条件的参数节点可以与自身的上一轮次结果作对比:使用下一个节点执行过的节点、使用运行到该节点时选中的节点、作为监测点输入的参数节点。其他情况均无法使用上一轮次对比功能。
    •由于GPU上一个轮次是一个子图(而非完整的图),GPU上多图做重新检查时,只能重新检查当前的子图。
  4. 重新检查只检查当前有张量值的监测点。
  5. 检查计算过程溢出需要用户开启异步Dump的全部溢出检测功能,开启方式请参照异步Dump功能介绍
  6. 调试器展示的图是优化后的最终执行图。调用的算子可能已经与其它算子融合,或者在优化后改变了名称。

参考

[1]www.mindspore.cn

[2]gitee.com/mindspore

[3]github.com/mindspore-ai

你可能感兴趣的:(python,人工智能)