
# 使用场景
#### 数据采集对比
- **数据采集**
  按如下配置运行模型将采集对应数据。如需对比同一模型在标杆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表格。
  

- **观察结果表格** ，找到首个出现差异的位置
  具体差异对比标准和方法可见：[关键数据比对指南（key_data_dump）](https://gitcode.com/Ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/zh/other_functions/rl_collect_instruct.md)、[模型层数据比对指南（actor_train_dump、reference_dump、critic_train_dump）](https://gitcode.com/Ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/zh/accuracy_compare/pytorch_accuracy_compare_instruct.md#pytorch-场景的精度比对)
  
#### 精度问题定位方法（后端推理框架打桩）
针对VeRL训练过程中的推理误差，提供精度问题定位方法 ，即vLLM推理框架打桩。
可通过mock_random_seed参数，选择以下三种数据加载模式：
（1）真实step模式【None】 ：按实际训练的step顺序加载
（2）循环加载模式【-1】：根据mock_step指定范围，顺序生成加载序列，循环加载
（3）随机加载模式【≠-1】：根据mock_step指定范围，随机生成加载序列
如下图：
![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002480972824.png "点击放大")
- **标杆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](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_train_590817.html#ZH-CN_TOPIC_0000002535647239__zh-cn_topic_0000002512932639_table6213114084619)即可。
  但要注意此时 mock_data_path、dump_path 如果相同可能覆盖数据，Log将给出警告信息：*"The dump_path and mock_data_path in the configuration are the same ... "*
  

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