工具使用
在强化学习训练过程中,往往存在多个模型(Actor、Reward、Reference)和两个阶段(推理、训练),精度问题定界困难。
本工具基于msprobe提供关键阶段数据的灵活采集与对比能力,结合系统化定位方法论,助力VeRL框架精度问题分析与调优。
- 支持VeRL两种主流训练后端(FSDP、Megatron-LM)的精度数据采集。
- 针对训练过程中的vLLM推理框架打桩,屏蔽推理框架及硬件设备上的固有偏差。
约束限制
本工具当前支持验证或调试VeRL强化学习框架精度问题。
配置说明
精度工具通过VeRL YAML脚本中的 ascend_precision_collector 字段 配置,添加下图红框所示内容。

+ascend_precision_collector: "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所示。
|
参数 |
选项值 |
参数说明 |
|---|---|---|
|
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"。 |
|
enable_mock_inference |
True/False |
是否使能模拟推理(加载标杆Device的推理样本)。默认为False,表示不开启。 开启后,训练的推理阶段将加载存于mock_data_path的标杆Device推理数据。 注:当仅采集数据,不做mock推理数据加载时,必须禁用mock推理使能,设为False。 (主要用于:标杆Device采集的推理结果样本在当前执行Device上加载,以避免推理带来的误差,对齐训练loss)详细可见:后端推理框架打桩。 |
|
mock_random_seed |
int |
模拟推理的模式。
|
|
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 # 训练配置文件