工具使用
在强化学习训练过程中,往往存在多个模型(actor、reward、reference)和两个阶段(推理、训练),精度问题定界困难。
本工具基于msprobe提供关键阶段数据的灵活采集与对比能力,结合系统化定位方法论,助力VeRL框架精度问题分析与调优。
- 支持VeRL两种训练后端(fsdp、megatron)的精度数据采集。
- 针对训练过程中的vLLM推理框架打桩,提供精度问题定位方法。
约束限制
本工具当前仅支持验证或调试VeRL强化学习框架精度问题。支持VeRL两种训练后端(fsdp、megatron)的精度数据采集。
暂不支持Critic数据采集,因此PPO算法采集时缺少Critic部分数据。
配置说明
精度工具通过VeRL YAML脚本中的 ascend_precision_collector 字段 配置,添加下图红框所示内容。
+ascend_precision_collector: "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所示。
参数 |
选项值 |
参数说明 |
---|---|---|
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"。 |
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 # 训练配置文件