更新时间:2025-10-22 GMT+08:00
分享

工具使用

在强化学习训练过程中,往往存在多个模型(actor、reward、reference)和两个阶段(推理、训练),精度问题定界困难。

本工具基于msprobe提供关键阶段数据的灵活采集与对比能力,结合系统化定位方法论,助力VeRL框架精度问题分析与调优。

  • 支持VeRL两种训练后端(fsdp、megatron)的精度数据采集。
  • 针对训练过程中的vLLM推理框架打桩,提供精度问题定位方法。

约束限制

本工具当前仅支持验证或调试VeRL强化学习框架精度问题。支持VeRL两种训练后端(fsdp、megatron)的精度数据采集

暂不支持Critic数据采集,因此PPO算法采集时缺少Critic部分数据。

前置条件

通过以下命令安装msprobe三方库:

pip install mindstudio-probe

更多详细内容请参见msprobe安装指南

配置说明

精度工具通过VeRL YAML脚本中的 ascend_precision_collector 字段 配置,添加下图红框所示内容。

+ascend_precision_collector: "precision_collector.yaml"
新建 precision_collector.yaml ,基本内容如下:
precision_collector:
  msprobe: False
  dump_path: "./collector_save_path"
  configurations_dump: False
  key_data_dump: False
  reference_dump: False
  actor_train_dump: False
  actor_infer_dump: False
  critic_train_dump: False
  memory_dump: False
  step_start: -1
  step_end: -1
  token_range_start: -1
  token_range_end: -1
  level: "L0"
  task: "statistics"
  enable_mock_inference: False
  mock_data_path: "./collector_saved_path"

注意:当不使用 msprobe 采集功能时,以下两种配置均可保证模型正常运行:

  • yaml脚本中 不添加ascend_precision_collector字段。
  • yaml脚本中 添加ascend_precision_collector字段,但设为None。
    +ascend_precision_collector: None

工具参数配置说明如表1所示。

表1 msprobe工具参数配置说明表

参数

选项值

参数说明

msprobe

True/False

是否使能msprobe,开启后,下列采集项才会生效

默认False,表示不开启。

dump_path

str

数据存盘路径。

默认值"./collector_save_path"

configurations_dump

True/False

是否采集训练配置,开启后,将保存为 configurations.json。

默认False,表示不开启。

key_data_dump

True/False

是否采集关键过程数据,包括response、input_ids、attention_mask、prompts、position_ids、old_log_probs、entropys的统计量信息(最大值、最小值、均值、L2norm值)和真实数据。

默认False,表示不采集。

reference_dump

True/False

是否采集compute_ref_log_prob 阶段的模型层数据。

默认False,表示不采集。

actor_train_dump

True/False

是否采集actor_compute_log_prob、actor_update训练阶段的模型层数据。

默认False,表示不采集。

actor_infer_dump

True/False

是否采集actor_generate_sequences推理阶段的模型层数据,需要与token_range_start、token_range_end搭配使用。默认False,表示不采集。

critic_train_dump

True/False

(暂不支持)

是否采集critic_compute_values、critic_update阶段的模型层数据。

默认False,表示不采集。

当前主要采actor的训练数据,不采集critic数据。

memory_dump

True/False

是否启用内存快照功能,启用后将生成 dump_path/memory_snapshot文件夹。需与上述模型层采集配合开启。

默认False,表示不采集。

step_start

int

采集开始步数。从0开始。

默认为-1,表示不采集。

step_end

int

采集结束步数。至少采集两步。

默认为-1,表示不采集。

token_range_start

int

采集推理生成token的开始范围,与token_range_end搭配使用,表示采集推理生成的从第几个到第几个范围内的token数据。

默认为-1,表示不采集。

token_range_end

int

采集推理生成token的结束范围,如果只想采某一个token的数据,设置为与token_range_start相等。

默认为-1,表示不采集。

level

str

dump 级别,根据不同级别采集不同数据,可参考dump级别配置

默认值"L0”

task

str

dump 的任务类型。

  • "statistics"为仅采集统计信息。
  • "tensor"为采集统计信息和完全复刻整网真实数据。可参考dump任务类型配置

默认值"statistics"。

enable_mock_inference

True/False

是否使能模拟推理(加载标杆Device的推理样本)。默认为False,表示不开启。

开启后,训练的推理阶段将加载存于 mock_data_path的标杆Device推理数据。

当仅采集数据,不做mock推理数据加载时,必须禁用mock推理使能,设为False

(主要用于:标杆Device采集的推理结果样本在当前执行Device上加载,以避免推理带来的误差,对齐训练loss)详细可见:后端推理框架打桩

mock_data_path

str

待加载数据保存路径。

默认值"./collector_saved_path"

落盘数据说明

全量落盘(除enable_mock_inference参数外均设为True) 时,将在dump_path路径生成如下数据:

collector_save_path/
├── actor_generate_sequences/  # actor_generate_sequences阶段的模型层数据
├── actor_compute_log_prob/    # actor_compute_log_prob阶段的模型层数据
├── actor_update/  # actor_update阶段的模型层数据
│  └── rank0/  # rank数
│         └── construct.json   
│         └── dump.json   
│         └── stack.json  
├── critic_update/     # critic_update阶段的模型层数据
├── reference_compute_log_prob/  # reference的模型层数据
├── memory_snapshot/   # memory_snapshot内存使用数据
├── data/    # 训练过程关键数据
│   └── attention_mask/  
│   └── entropys/  
│   └── input_ids/
│   └── old_log_probs/
│   └── position_ids/  
│   └── prompts/  
│   └── prompts/  
│   └── responses/  # 关键数据名称,来自SingleSave.save的时候的key
│           └── step0/   # step数
│               └── rank0/    # rank数
│                     └── micro_step0/   # micro_step数
│                              └── response0.npy   # 存储的关键数据的真实npy文件
│                              └── response0.json  # 存储的关键数据的统计量文件,包括tensor的最大、最小、均值、norm、shape
├── configurations.json  # 训练配置文件

相关文档