已合并
test: add Ascend NPU UT for torch.autograd.profiler.parse_nvprof_trace #42230
yuhongming-2026创建于 7月20日
test: add Ascend NPU UT for torch.autograd.profiler.parse_nvprof_trace #42230
已合并
yuhongming-2026创建于 7月20日
yuhongming-2026
7月20日

【合入来源】

https://gitcode.com/Ascend/pytorch/issues/2975
请勿携带内部流程信息(需求链接、问题单、内部issue等)

【修改方案】

  1. 新增 test/profiler/test_parse_nvprof_trace.py,针对原生 API torch.autograd.profiler.parse_nvprof_trace / load_nvprof 做 Ascend NPU 适配一致性看护。
  2. 社区用例情况:pytorch 官方侧主要为 CUDA/CUPTI nvprof SQLite 解析场景;Ascend 不产出该格式,社区缺少 NPU 栈下的适配看护。故在 test/profiler/ 新增本文件(路径与 profiler 测试目录一致),而非 test_upstream patch。
  3. Ascend 不生成 nvprof CUPTI SQLite,因此本 PR 构造 Marker/Kernel SQLite 正向解析夹具;覆盖点为:
    • API 在 torch_npu 栈上仍可导入/调用;
    • 真实 NPU 算子下 profile(use_device="npu") 事件采集;
    • EnforceUniqueparse_nvprof_trace 内部依赖);
    • 缺失 nvprof DB 时 parse_nvprof_trace / load_nvprof 负向路径仍可用。
  4. 无 NPU 时通过 skipTest 跳过,避免在纯 CPU/CUDA 环境误跑。

【资料变更】

本 PR 仅新增测试用例,不修改文档。资料补齐见文档 PR #42617

【接口变更】

不涉及代码/接口实现变更,仅新增 UT。

【功能验证】

测试场景:

  • Ascend NPU 下 API 可用性(parse_nvprof_trace / load_nvprof
  • profile(use_device="npu") 采集 mm/add 等 NPU 算子事件与 timing
  • EnforceUnique 行为
  • 缺失 nvprof DB 的负向调用

测试方法:

cd test/profiler
python test_parse_nvprof_trace.py

说明: 请在本地/CI NPU 环境执行;既有运行截图可继续参考。
801f665cb58e9c70d8c811b23b7aab62.png

【Issue 关闭策略】

  • 本 PR 不勾选「PR 合入则关闭 issue」
  • 原因:issue #2975 仍关联 #42226/#42228/#42229/#42617,需多分支测试与资料 PR 收尾后再关闭

【CheckList】

PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x]

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 yuhongming-2026 的贡献)
yuhongming-2026yuhongming-2026
7月20日 创建了 pull request,commit 474f7a83
yuhongming-2026yuhongming-2026
7月20日 关联了issue:【社区任务】7月社区任务第二期-Ascend for PyTorch API 一致性开发(43)
atomgit-bot
atomgit-bot
7月20日 评论:

变更摘要

本 PR 新增了 Ascend NPU 环境下对 torch.autograd.profiler.parse_nvprof_traceload_nvprof 接口的适配性单元测试文件 test/profiler/test_parse_nvprof_trace.py。通过构造最小 nvprof 兼容 SQLite 数据库(含 Marker、Runtime、Concurrent Kernel 表结构),覆盖仅 Marker 解析、Marker+Kernel 关联解析、EnforceUnique 行为、NPU 算子负载后解析可用性等场景,确保该接口在 torch_npu 栈上行为正确。

主要改动

  • 新增测试模块 test/profiler/test_parse_nvprof_trace.py:包含环境检测函数 _require_ascend_npu_stack() 和 SQLite 构造函数 _create_nvprof_sqlite(),无 NPU 时通过 @unittest.skipIf 整模块跳过,避免在纯 CPU/CUDA 环境误跑。
  • 新增测试类 TestParseNvprofTraceAscendNPU:继承自 torch_npu.testing.testcase.TestCase,在 setUpClass 中初始化 NPU 设备并打印版本信息,提供 6 个测试用例覆盖 API 可用性、仅 Marker 解析、带 Kernel 关联解析、load_nvprof 返回 EventListEnforceUnique 异常抛出、以及 NPU 算子执行后再次解析等场景。
  • 构造最小 nvprof SQLite 数据库_create_nvprof_sqlite()parse_nvprof_trace 查询的表结构创建 CUPTI_ACTIVITY_KIND_MARKERCUPTI_ACTIVITY_KIND_RUNTIMECUPTI_ACTIVITY_KIND_CONCURRENT_KERNELStringTable 表,插入两组测试数据(aten::add / aten::mm),支持含 Kernel 与不含 Kernel 两种模式。
  • 验证 parse_nvprof_trace 回调 FunctionEvent 字段正确性:断言解析结果数量、nametime_range.start 顺序、cpu_time 值以及 kernels 列表的名称和耗时均符合预期。
  • 验证 load_nvprofEnforceUnique 在 NPU 环境下行为一致load_nvprof 返回 EventList 实例且事件名称正确;EnforceUnique 重复注册相同键时抛出 RuntimeError
likedislike
atomgit-bot
atomgit-bot
7月20日 评论:

代码审查

经过全面分析,该测试文件编写质量良好,我未发现任何需要报告的实质性问题。以下是我的详细审查结果:

逐项审查结论:

  1. 模块级 skip 逻辑(第 24-31 行,第 96 行)_require_ascend_npu_stack() 在模块加载时计算 _SKIP_REASON,与 @unittest.skipIf 装饰器 + setUpClass 双重检查形成合理防护。符合该仓库中 NPU 测试的惯例。

  2. _create_nvprof_sqlite 辅助函数(第 34-93 行):SQLite 表结构(CUPTI_ACTIVITY_KIND_MARKERCUPTI_ACTIVITY_KIND_RUNTIMECUPTI_ACTIVITY_KIND_CONCURRENT_KERNELStringTable)与 parse_nvprof_trace 的查询需求对齐。Marker id=100/200 起止配对正确,runtime-kernel 通过 correlationId 关联正确。

  3. 测试数据一致性

    • events[0].cpu_time = 5000-1000 = 4000.0
    • events[1].cpu_time = 9000-6000 = 3000.0
    • add_evt.kernels[0].duration = 1700-1600 = 100
    • mm_evt.kernels[0].duration = 6900-6600 = 300
  4. 临时文件清理(第 140-153 行,第 157-176 行,第 180-189 行,第 207-217 行):所有测试方法均使用 try/finally + os.remove(path) 确保临时 SQLite 文件被清理。

  5. API 可用性检查(第 132-136 行)hasattr + callable 双验证模式正确。

  6. EnforceUnique 测试(第 191-196 行):正确验证重复 see() 调用抛出 RuntimeError

  7. 导入路径(第 16-21 行)parse_nvprof_traceload_nvprofEnforceUnique 来自 torch.autograd.profilerEventListFunctionEvent 来自 torch.autograd.profiler_util,均为 PyTorch 公开 API 的正确导入路径。


审查结论

  • 文件test/profiler/test_parse_nvprof_trace.py — 无问题
  • 发现问题数:P0: 0, P1: 0, P2: 0, P3: 0
  • 总体风险判断:低风险。该测试文件结构清晰,SQLite schema 与 parse_nvprof_trace 解析逻辑对齐,断言值与测试数据一致,资源清理完备。可以安全合入。

⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。

likedislike
此处折叠了99条消息 查看更多
htchu成员
10 天前 评论:

/approve

likedislike
ascend-robotascend-robot成员
10 天前 添加了label:approvedlgtm
ascend-robotascend-robot成员
10 天前 合入了pull request
ascend-robot
ascend-robot成员
10 天前 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike
ascend-robot
ascend-robot成员
10 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#13812 [ commitID:ad2d6256 ] 运行失败
likedislike