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

使用场景

数据采集对比

  • 数据采集
    按如下配置运行模型将采集对应数据。如需对比同一模型在标杆Device与当前Device上的表现,可分别采集,(两次需要设置不同的dump_path)
    precision_collector:
      msprobe: True    # 使用以下采集、加载功能时,必须开启
      dump_path: "./benchmark_infer_data"
      key_data_dump: True    # 关键数据采集
      actor_infer_dump: True # 推理数据采集
      step_start: 0          # 从0开始采集
      step_end: 58           # 采集步数
      level: "L0"
      task: "statistics"
      enable_mock_inference: False   # 仅采集不加载数据时,需要禁用mock推理使能

    得到两次训练过程的关键阶段性数据,数据可用来定界到模型或代码块。

  • 对比data关键数据

    复制如下训练脚本py,将dump_path1和dump_path2改为需要比对的dump_path文件路径,output_path改为保存路径,执行该脚本:

    from msprobe.core import SingleComparator
    SingleComparator.compare(
        "dump_path1", 
        "dump_path2", 
        "output_path")

    获得对 data 中各关键数据的比对结果.xlsx表格。

  • 对比模型层数据

    如采集到模型层数据,将./dump_path1/step0和./dump_path2/step0改为需要比对的step层级路径(比如./benchmark_infer_data/actor_generate_sequences/step0)

    from msprobe.pytorch import *
    compare_distributed(
        './dump_path1/step0', 
        './dump_path2/step0', 
        './output_path')

    获得模型层比对结果.xlsx表格。

精度问题定位方法(后端推理框架打桩)

针对VeRL训练过程中的推理误差,提供精度问题定位方法 ,即vLLM推理框架打桩。

可通过mock_random_seed参数,选择以下三种数据加载模式:

(1)真实step模式【None】 :按实际训练的step顺序加载

(2)循环加载模式【-1】:根据mock_step指定范围,顺序生成加载序列,循环加载

(3)随机加载模式【≠-1】:根据mock_step指定范围,随机生成加载序列

如下图:

  • 标杆Device训练,开启推理数据采集,保存在 benchmark_infer_data/ 中,配置如下:
    precision_collector:
      msprobe: True          # 使用以下采集、加载功能时,必须开启
      dump_path: "./benchmark_infer_data"
      key_data_dump: True    # 关键数据采集
      step_start: 0          # 采集开始步数
      step_end: 58           # 采集结束步数
      enable_mock_inference: False   # 采集阶段不加载数据,需要禁用mock推理使能

    key_data_dump将采集关键的推理数据,包括 response、input_ids、attention_mask、 prompts、position_ids。Log 将给出日志:“>>>>>>>>>>>>> Save Key Data <<<<<<<<<<<<<<<

    注:真实step模式需从0开始采集,如要对比整个训练过程,step_end 需设置为训练总step数。

    循环、随机模式数据复用,可采集少量数据即可。

  • 当前Device、标杆Device训练,开启标杆Device推理数据加载

    开启Mock时,Log 将给出警告日志:Mock inference enabled - loading from {config.mock_data_path}, You can disable in precision_collector.yaml”

    (1)真实step模式,配置如下:
    precision_collector:
      msprobe: True    # 使用以下采集、加载功能时,必须开启
      enable_mock_inference: True  # 加载推理数据时,开启mock推理使能
      mock_random_seed: None       # 使用真实step加载模式
      mock_data_path: "./benchmark_infer_data"  # 待加载数据位置

    Log 将给出警告日志:>>>>>>>>>>>>>>>>Dump real step loading mode<<<<<<<<<<<<<<

    (2)循环加载模式,配置如下:
    precision_collector:
      msprobe: True    # 使用以下采集、加载功能时,必须开启
      enable_mock_inference: True  # 加载推理数据时,开启mock推理使能
      mock_random_seed: -1         # 使用循环加载模式
      mock_data_path: "./benchmark_infer_data"  # 待加载数据位置
      mock_step_start: 0           # 待加载数据开始步数。
      mock_step_end: 10            # 待加载数据结束步数。

    Log 将给出警告日志:“<<<<<<<<<<<Dump Sequential Loop Loading Mode<<<<<<<<<<<

    待加载序列:如“Sequence to be loaded:[0,1,2,3,4,5,6,7,8,9,10]

    Current step: xx, Loading step: xx (Loop index: xx)

    (3)随机加载模式,配置如下:
    precision_collector:
      msprobe: True    # 使用以下采集、加载功能时,必须开启
      enable_mock_inference: True  # 加载推理数据时,开启mock推理使能
      mock_random_seed: 42         # 使用随机加载模式,≠-1即可
      mock_data_path: "./benchmark_infer_data"  # 待加载数据位置
      mock_step_start: 0           # 待加载数据开始步数。
      mock_step_end: 10            # 待加载数据结束步数。

    Log 将给出警告日志:“>>>>>>>>>>>>>>>>Dump Random Loading Mode<<<<<<<<<<<<<<

    待加载序列:如“Sequence to be loaded:[10, 0, 8, 1, 10, 0, 9, 7, 9, 10, 2, 3, 7, ... ... ]"

    Current step: xx, Loading step: xx (Loop index: xx)

    注:加载同时可以采集(除key_data_dump、actor_generate_sequences),只需配置相应采集开关为True即可。

    但要注意此时 mock_data_path、dump_path 如果相同可能覆盖数据,Log将给出警告信息:“The dump_path and mock_data_path in the configuration are the same ... ”

  • 对比两个Device的训练Loss曲线、使用上节方法对比落盘数据

相关文档