msprobe工具应用场景--网络训练溢出

msprobe工具应用场景–网络训练溢出

现象

在动态图场景下,部分算子在错误的输入下可能会溢出。

思路

  1. msprobe进行溢出dump:使用msprobe进行溢出dump。

配置

  1. 用户脚本
  from msprobe.mindspore import PrecisionDebugger
  
  debugger = PrecisionDebugger(config_path='./config.json')
  # 在训练循环中启动工具
  debugger.start()
  # 训练循环体
  ...
  # 结束工具
  debugger.stop()
  1. 配置项
  • MindSpore 场景

    • 动态图场景:支持 API 级别("L1")或 Cell 级别("L0")的溢出检测。
    • 静态图场景:支持 Kernel 级别("L2")的溢出检测。
  • MSAdapter 场景

    • 支持 API 级别("L1")或模块级别("L0")的溢出检测。
  • task: 必须设置为 "overflow_check",表示启用溢出检测功能。

  • dump_path: 指定溢出数据的存储路径。

  • rank: 指定需要检测的设备 rank,留空则表示所有 rank。

  • step: 指定需要检测的训练步骤(iteration),留空则表示所有步骤。

  • level: 检测的粒度级别:

    • MSAdapter、MindSpore 动态图: 支持 "L0"(API 级别)或 "L1"(模块级别)。
    • MindSpore 静态图: 必须设置为 "L2"(kernel 级别),且模型编译优化等级(jit_level)必须为 "O2" 3
  • overflow_check: 配置溢出检测的详细参数:

    • overflow_nums: 最大溢出次数,表示第 N 次溢出后停止检测。默认为 1,设置为 -1 表示持续检测直到训练结束。
    • check_mode(仅适用于 MindSpore 静态图场景): 溢出类型,可选 "aicore""atomic""all",默认为 "all"
  1. 配置示例
     {
         "task": "overflow_check",
         "dump_path": "/home/data_dump",
         "rank": [ ],
         "step": [ ],
         "level": "L0",
         "overflow_check": {
             "overflow_nums": -1
         }
     }
    

性能

开启溢出dump,在不溢出的情况下,性能会膨胀2-3倍。如果发生溢出,性能影响则与溢出数据量有关

资源占用

  1. 磁盘:只保存溢出算子的输出,占用较少。
  2. 显存:理论上不会增加显存占用。

注意事项

  1. 路径设置
  • 确保path字段设置为绝对路径,避免因路径错误导致数据无法保存。
  • 工具读写的路径(如 config_pathdump_path 等)只能包含大小写字母、数字、下划线、斜杠、点和短横线。
  1. 数据采集范围
  • 确保溢出检测的API或模块在 startstop 接口之间被调用,否则数据可能无法被采集。
  • 如果API是通过直接导入(如 from torch import relu)调用的,工具可能无法对其进行patch,导致数据缺失。
  1. 溢出数据的控制
  • 可以通过配置 overflow_number 控制溢出dump的数据个数,当达到指定数值后,溢出数据将不再dump。
  1. 框架与版本限制
  • 在MindSpore框架下,静态图场景的L2 Level数据采集需要MindSpore版本高于2.5.0,并且需要使用特定编包选项安装的whl包。
  1. 数据完整性与格式
  • 在dump.json中,API或Module的统计信息可能出现 nullNone 值,常见原因包括输入输出为None、工具不支持某些数据类型,或Tensor的dtype为bool。
  • 在动态图场景下,使用 mindspore.jit 装饰的部分会以静态图模式执行,此时的Kernel级数据采集方式与静态图场景相同。
  1. 工具性能与兼容性
  • 使用 msprobe 工具可能会增加运行时的耗时,尤其是在初始化阶段。
  • 工具在某些场景下可能会出现流同步失败或GlobalLock报错,这些问题可能需要修复工具版本或调整配置。

通过以上配置和注意事项,可以有效定位和解决动态图算子溢出问题。