开发者
下载
[object Object][object Object]

Monitor训练状态轻量化监测工具,能够在较低性能损耗下收集和记录模型训练过程中的激活值、权重梯度、优化器状态和通信算子的中间值,实时呈现训练状态。

[object Object]

安装

安装msProbe工具,详情请参见《》。

约束

  • PyTorch场景:torch不低于2.1
  • MindSpore场景:mindspore不低于2.4.10,仅支持MindSpore动态图,支持MSAdapter套件
[object Object]

根据需求监测相应对象。比如在loss上扬,grad norm正常的异常训练过程中,优先考虑监测模型前向过程;在grad norm异常的训练过程中,监测权重和激活值的梯度。 推荐使用方式:权重梯度的监测性能损耗小(20B dense模型全量权重梯度监测,时间增加<1%,内存增加<1%),可以长期开启。激活值监测性能损耗大,在必要时开启或者仅监测部分。

[object Object]

请在当前目录下创建一个[object Object]文件(配置文件各个字段具体信息请查看),此处以最常见的权重梯度采集为例:

[object Object]
[object Object]

在实际训练代码中找到模型、优化器定义完成后、训练开始前的位置,加入工具使能代码,不同场景使能方式如下:

  • Pytorch使能方式:
[object Object]

deepspeed与accelerate、transformers同时使用时,optimizer传值方式为[object Object],若未使用deepspeed,单独使用accelerate、transformers,optimizer传值方式为[object Object]

同时使用deepspeed和accelerate时,工具使能位置参考如下:

[object Object]

同时使用deepspeed和transformers时,工具使能位置参考如下:

[object Object]
  • MindSpore使能方式:
[object Object]
[object Object]

若框架为FSDP1,请先保证model包裹FSDP时设置use_orig_params=True。

[object Object]

下表中字段为训练状态轻量化监测工具的完整功能点:

[object Object]undefined
[object Object]
  • 该功能可开启权重监测,工具配置示例:
[object Object]

[object Object]中指定module包含的所有权重都会被监测。[object Object]为空时,默认监测全部module。 设置[object Object]为true,表示开启权重监测功能,默认值为false。

[object Object]
  • 该功能可开启权重梯度监测,监测聚合前后的权重梯度,工具配置示例:
[object Object]

[object Object]中指定module包含的所有权重都会被监测。[object Object]为空时,默认监测全部module。 设置[object Object](weight grad, noted as [object Object]) 为true,表示开启权重梯度监测功能,默认值为false。

[object Object]
  • 该功能可开启激活值监测,工具配置示例:
[object Object]

[object Object]为true表示监测全量module激活值,若需要对指定模块设置监测对象,在[object Object]中进行配置,配置方式参考

设置[object Object]为true表示开启激活值监测功能,默认值为false。

注意:[object Object][object Object]均为true时,触发warning,前反向均不采集;默认值均为false时,前反向均采集。

[object Object]
  • 该功能可开启优化器状态监测,工具配置示例:
[object Object]

[object Object]中指定module包含的所有权重都会被监测。[object Object]为空时,默认监测全部module。 设置[object Object]为true表示开启优化器状态监测功能(1st moment noted as [object Object], 2nd moment noted as [object Object]),默认值为false。

本工具针对分布式计算框架megatron和deepspeed框架做了适配,暂不支持其他框架。

[object Object]
  • 该功能可采集module堆栈详细信息,工具配置示例:
[object Object]

开启 [object Object] 后会采集监测的第一个 step 的所有 module 的堆栈信息,输出格式仅支持 csv 。

[object Object]

工具支持对指定nn.Module进行状态监测,在配置文件的[object Object]字段中指定,[object Object]格式为{module_name: {}}。

module_name可以通过nn.Module的接口named_modules()获取。

[object Object]

工具提供可选项[object Object]打印模型结构,帮助配置targets。工具会在在第一个step后打印结构并停止训练进程,每张卡上的模型结构默认保存在[object Object], 其中{rank}为对应的卡号。

[object Object]

输出样例:

[object Object]

对于module对象,通常关心前向/反向传播的输入和输出:

  • 前向的输入(input)
  • 前向的输出(output)
  • 反向的输入,表示前向输出的梯度(output_grad)
  • 反向的输出,表示前向输入的梯度(input_grad)
[object Object]

targets字段指定监测对象示例如下:

[object Object]

对于parameter对象,通常会关注其在一个训练迭代中的梯度(weight grad)、adam类优化器中的动量(1st moment, 2nd moment)。 parameter归属于某一module,可以通过指定module_name来监测包含在这一module中的所有parameter。

param_name可以通过nn.Module的接口[object Object]获取。

[object Object]
[object Object]

工具提供简便的全量module对象监测方式。

[object Object]
[object Object]
  • 该功能可开启模型状态的高阶监测,工具配置示例:
[object Object]
[object Object]undefined
[object Object][object Object]undefined
[object Object]

当配置梯度监测任务时,工具默认[object Object]粒度进行梯度监测。当需要监测[object Object]粒度梯度信息时,在配置文件中配置[object Object][object Object],配置示例如下:

[object Object]

应用范围

  • 仅支持采集聚合前梯度,在梯度累积场景下,聚合后梯度已无法区分[object Object]数据。
  • PyTorch场景下,Megatron和DeepSpeed训练框架下均支持,FSDP训练框架下暂不支持。
  • MindSpore场景下均支持。
[object Object]

工具的异常告警功能旨在自动判断训练过程中的异常现象,用户可通过在配置文件中配置alert字段来指定告警规则,并在训练过程中根据该规则及时打印告警信息。

异常告警规则

当前支持的异常告警规则如下:

[object Object]undefined

除此之外,我们在alert中支持dump配置项,如果打开"[object Object]"选项,则会将异常信息落盘到目录[object Object]

  • 历史均值偏离告警案例如下:
[object Object]
  • nan值/极大值告警案例如下:
[object Object]

注:当配置多条异常告警规则时,优先告警第一条,如以下配置时每一层会优先报AnomalyNan的告警(一般不建议配置多条规则):

[object Object]

异常提示说明

训练过程中,检测到异常后打印提示信息,并将异常信息按照rank分组写入json文件,文件路径默认为[object Object],异常信息示例如下:

[object Object]

其中call_{xxx}中的xxx为API的执行调用顺序,为后续异常事件排序做准备。

异常事件排序

当模型训练过程中出现较多异常数据,需要对异常事件排序。工具提供topk的异常排序能力,按照api的执行顺序进行排序,便于定界首次异常点。异常分析命令示例:

[object Object]

异常事件分析结束,将topk事件写入文件[object Object]。异常分析支持以下参数配置:

[object Object]undefined
[object Object]

将csv数据转换为tensorboard格式数据。

[object Object]

参数详细介绍请参见的“csv输出件转tensorboard输出件”

[object Object]

动态启停模式:支持用户在训练过程中随时启动/更新监测。

用户可在训练开始前通过配置环境变量[object Object]来确认进入动态启停模式,该模式下需要配合config.json文件中的[object Object]字段来使用。

在动态启停模式下,启动和停止分别由如下控制:

  • 启动
    • 首次监测:查看config.json文件中[object Object]字段,若为[object Object]则在下一步开启监测。
    • 非首次监测:查看config.json文件时间戳,若时间戳更新且config.json文件中[object Object]字段为[object Object]则在下一步开启监测。
  • 停止: 到达[object Object]之后自动停止并修改config.json文件中[object Object]字段为[object Object],可再通过上述操作重启。

注意事项:

  • 默认监测启动皆统一在配置初始化或查询到更新后的下一步,即第n步挂载hook将在第n+1步启动采集,如需采集第0步数据请使用静态模式。
  • config.json中途修改错误时,若此时不在监测则不生效,若在监测则用原配置继续。
  • 达到[object Object]之后程序会自动将该值置为[object Object],待下次修改为[object Object]时重启。

支持的使用场景说明如下:

[object Object]undefined
[object Object]

此功能将在2026年废弃。请使用功能代替。

  • 统计量 可以在训练过程中修改[object Object]实例的[object Object]属性, 调整监测的统计量。
[object Object]
  • 训练过程中开关激活值监测 激活值监测的性能损耗较大, 推荐仅在必要时开启, 比如发现loss出现尖刺, 根据loss的异常开启激活值监测.
[object Object]
[object Object][object Object]

通过环境变量[object Object]设置monitor输出路径,默认为[object Object]

[object Object]
[object Object]

通过可选配置项[object Object]指定,当前支持[object Object][object Object][object Object]。其中[object Object]为默认缺省值。

  • tensorboard 监测结果写入tensorboard的event文件,启动tensorboard查看。
    激活值监测任务的tag为{vpp_stage}:{module_name}.{input or output}:{micro_step}/{rank}/{task}_{ops} 其他监测任务的tag为{vpp_stage}:{param_name}/{rank}/{task}_{ops}

    [object Object]

    之后,运行以下SSH命令来建立端口转发,可以在本地通过[object Object]访问tensorboard:

    [object Object]
  • csv 监测结果写入csv文件中,可以通过[object Object]字段设置小数位数。
    表头为 vpp_stage | name | step | micro_step(optional) | *ops |。 仅在激活值监测的输出文件中包含micro_step。 激活值监测的name为[object Object], 其他任务的name为[object Object]

  • api 监测结果不落盘,在训练过程中可以通过[object Object][object Object]等接口获取,使用方式参考

[object Object]

提供csv输出件合并功能,在配置json文件中设置[object Object],表示每个csv文件存储多个step的监测数据。默认值为1,表示每个csv文件记录一个step的监测数据。

如下图所示为梯度监测结果示例,配置[object Object]为5,连续监测10个step,每个csv文件记录了5个step的梯度数据。其中[object Object]为step0至step4共计5个step的聚合后梯度数据,[object Object]为step0至step4共计5个step的聚合前梯度数据。

[object Object]
  • monitor工具初始化
[object Object]
[object Object]undefined
  • 模型挂载monitor工具
[object Object]
[object Object]undefined
  • csv输出件转tensorboard输出件
[object Object]
[object Object]undefined
  • 在模型任意位置获取当前参数梯度统计量
[object Object]

具体使用方式如下:

[object Object]
  • 在模型任意位置获取当前参数激活值统计量
[object Object]

具体使用方式如下:

[object Object]
  • 老版接口说明, 将在2026年废弃
[object Object]
[object Object]undefined
[object Object]
[object Object]undefined

具体接口变更说明如下:

[object Object]undefined
[object Object]
[object Object]

下面详细解释各个字段:

[object Object]undefined