更新时间:2025-11-19 GMT+08:00
分享

工具使用

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

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

  • 支持VeRL两种主流训练后端(FSDP、Megatron-LM)的精度数据采集。
  • 针对训练过程中的vLLM推理框架打桩,屏蔽推理框架及硬件设备上的有偏差。

约束限制

本工具当前支持验证或调试VeRL强化学习框架精度问题。

前置条件

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

pip install mindstudio-probe 

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

配置说明

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

+ascend_precision_collector: "precision_collector.yaml"
新建 precision_collector.yaml ,基本内容如下:
precision_collector:
  msprobe: False
  memory_dump: 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
  step_start: 0
  step_end: 0
  token_range_start: 0
  token_range_end: 0
  level: "L0"
  task: "statistics"
  enable_mock_inference: False
  mock_random_seed: None
  mock_data_path: "./collector_saved_path"
  mock_step_start: 0 
  mock_step_end: 0

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

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

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

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

参数

选项值

参数说明

msprobe

True/False

是否使能msprobe,开启后精度数据采集、模拟推理生效

默认False,表示不开启。

memory_dump

True/False

是否使能memory_dump,开启后内存数据采集生效。

启用后将生成 dump_path/memory_snapshot文件夹。需配合开启模型层dump。

默认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阶段的模型层数据。(注:使用critic网络的算法才会采集)

默认False,表示不采集。

step_start

int

采集开始步数。

默认为0,要求step>=0。

step_end

int

采集结束步数。

默认为0,要求step>=0。

token_range_start

int

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

默认为0。

token_range_end

int

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

默认为0。

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_random_seed

int

模拟推理的模式。

  • None为使用真实step模式。
  • -1 为根据mock_step指定范围使用顺序加载模式。
  • ≠-1为根据mock_step指定范围使用随机加载模式

    详细可见:后端推理框架打桩

mock_data_path

str

待加载数据保存路径。

默认值"./collector_saved_path"

mock_step_start

int

待加载数据开始步数。

默认为0,要求step>=0。

mock_step_end

int

待加载数据结束步数。

默认为0,要求step>=0。

* 注:LoRA模型调用FSDP后端时,由于同一step内actor_compute_log_prob 阶段会执行两次,因此开启actor_train_dump 采集训练数据时,需将step_end设置为 2*预采集步数。

落盘数据说明

全量落盘(除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_compute_values/   # critic compute_values阶段的模型层数据
├── 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  # 训练配置文件

相关文档