常见框架dump工具使能

概述

本文档介绍常见框架中调试工具的使能方法,包括dump工具和monitor工具的配置位置。

工具使能

工具资料说明

工具添加位置查找方法

想要找该在哪添加工具的时候,我们可以任意打印一个API的调用栈信息出来看,从调用栈里可以看出工具的添加位置。

比如打印linear的调用栈代码有以下两种方式:

方法1:在torch里直接打印调用栈

image.png

方法2:在启动脚本里替换掉原有linear

import torch
import torch.nn.functional as F
import traceback

# 保存原始函数
original_linear = F.linear

# 替换functional中的linear,使用*args和**kwargs适配所有参数
def custom_linear(*args, **kwargs):
    print("="*50)
    print("调用F.linear,调用栈如下:")
    traceback.print_stack()
    # 将接收的参数原封不动地传给原始函数
    return original_linear(*args, **kwargs)

F.linear = custom_linear

说明:有了调用栈之后就很好找工具的添加位置了。

image.png

各框架工具添加位置

MindSpeed-LLM

image.png

MindSpeed-MM

image.png

LLaMA-Factory

image.png

accelerate + DeepSpeed

image.png

torchtitan (FSDP2后端)

image.png

VERL (fsdp后端)

使能确定性的位置:
image.png

generate_sequences
image.png

以上使能方式只针对vllm eager模式后端,不同配置或使能方式可能会变化。

update_actor
image.png

compute_log_prob
image.png

compute_ref_log_prob
image.png

VERL (sglang后端)

示例版本说明
组件 版本
CANN 8.5.0
python 3.11
torch 2.7.1
torch_npu 2.7.1.post2
verl 0.7.1
sglang 0.5.8
MindSpeed 2.3.0_core_r0.12.1
Megatron-LM core_v0.12.1
1. 创建config.json文件,用于配置dump参数

config.json配置文件详细介绍请参见配置文件介绍

2. SGLang框架中使能msProbe工具

找到SGLang框架ModelRunner类所属文件:sglang/srt/model_executor/model_runner.py

  • ModelRunner类的__init__方法中添加PrecisionDebugger接口,传入config.json文件真实路径。

        from msprobe.pytorch import PrecisionDebugger, seed_all
        seed_all(mode=True)
        self.debugger = PrecisionDebugger(config_path="/home/config.json")
    

    image.png

  • ModelRunner类的forward方法中添加startstopstep接口。

    • forward方法开始处

          if hasattr(self, 'debugger'):
              self.debugger.start(model=self.model, rank_id=self.gpu_id)
      

      image.png

    • forward方法结束处

          if hasattr(self, 'debugger'):
              self.debugger.stop()
              self.debugger.step()
      

      image.png

3. 注意
  1. 使能方式只针对eager模式后端,使能方式和位置可能会随版本变化,verl启动训推脚本需要添加

        actor_rollout_ref.rollout.enforce_eager=True
    +   actor_rollout_ref.rollout.engine_kwargs.sglang.attention_backend="ascend"
    +   actor_rollout_ref.rollout.engine_kwargs.sglang.disable_cuda_graph=True
    
  2. verl中使用ray自动纳管npu会导致卡不可见,需要设置环境变量export RAY_EXPERIMENTAL_NOSET_ASCEND_RT_VISIBLE_DEVICES=1