Prhub

#24835 [NPU] fix npu profiler

原始 PR 作者 zhaozx-cn 合并时间 2026-06-01 21:44 文件变更 1 提交数 9 评论 26 代码增减 +15 / -0

执行摘要

修复 NPU profiler 算子形状缺失

根据 PR body,动机是修复 NPU 上 profiling 时算子形状信息缺失的问题,即使设置了 SGLANG_PROFILE_RECORD_SHAPES 环境变量。该 PR 旨在修复此问题并同时收集算子统计信息。

该 PR 改动简单直接,对于 NPU 用户来说是一个重要的 profiling 修复。值得精读以了解 NPU profiling 配置方式。

讨论亮点

Reviewer McZyWu 询问为何添加这些可选参数并给出默认值,以及建议添加 export_type 的注释(另一个选项为 Db)。作者 zhaozx-cn 回应请参考 Ascend 主页了解收集 profiling 信息的更多信息。该讨论已解决。

实现拆解

  1. python/sglang/srt/managers/scheduler_components/profiler_manager.py_start_profile 方法中,当 _is_npu 为 True 时,为 torch.profiler.profile 调用添加了 experimental_config 参数。
  2. experimental_config 使用 torch_npu.profiler._ExperimentalConfig 配置了导出类型为 Text、profiler 等级为 Level1、禁用 msprof_tx、设置 AI 核心度量指标为 PipeUtilization 等参数。
  3. 此变更仅在 NPU 路径生效,不影响其他设备。
文件 模块 状态 重要度
python/sglang/srt/managers/scheduler_components/profiler_manager.py 性能分析 modified 5.85

关键符号

ProfilerManager._start_profile

关键源码片段

python/sglang/srt/managers/scheduler_components/profiler_manager.py core-logic

唯一变更文件,添加 NPU 特定的 profiling 配置

# 在 _start_profile 方法中,当 torchprof_activities 存在时,创建 profiler 实例
self.torch_profiler = torch.profiler.profile(
    activities=torchprof_activities,
    with_stack=with_stack if with_stack is not None else True,
    record_shapes=record_shapes if record_shapes is not None else False,
    on_trace_ready=(
        None
        if not _is_npu
        else torch_npu.profiler.tensorboard_trace_handler(
            str(self.torch_profiler_output_dir)
        )
    ),
    experimental_config=(
        None
        if not _is_npu
        else torch_npu.profiler._ExperimentalConfig(
            export_type=torch_npu.profiler.ExportType.Text, # 导出类型为文本,也可选 Db
            profiler_level=torch_npu.profiler.ProfilerLevel.Level1, # 性能分析级别
            msprof_tx=False, # 禁用 msprof 传输
            aic_metrics=torch_npu.profiler.AiCMetrics.PipeUtilization, # AI Core 度量:流水线利用率
            l2_cache=False, # 禁用 L2 cache 分析
            op_attr=False, # 不记录算子属性
            data_simplification=False, # 不简化数据
            record_op_args=False, # 不记录算子参数
            gc_detect_threshold=None, # 不设置 GC 检测阈值
        )
    ),
)
self.torch_profiler.start()

评论区精华

关于 experimental_config 参数的默认值选择 question

Reviewer McZyWu 询问为何添加这些可选参数并设置了默认值 false 或 none,以及建议添加 export_type 的注解(另一个选项为 Db)。

结论:Author zhaozx-cn 回应请参考 Ascend 主页获取更多信息。 · 已解决

风险与影响

变更仅影响 NPU 平台下的 profiling 路径,增加 experimental_config 配置,不影响其他功能。风险较低,但缺乏针对该配置的单元测试,可能导致 NPU 特定场景下配置不正确。

此 PR 对用户的影响:使用 NPU 进行 profiling 的用户现在可以获得正确的算子形状信息和更丰富的算子统计信息。对系统无影响。对团队的影响:维护者需确保 NPU 环境兼容此配置。

平台特定代码 缺少测试覆盖

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论