Pull Request已成功合入, 合并人@ascend-robot
(感谢 yuhongming-2026 的贡献)变更摘要
本 PR 新增了 Ascend NPU 环境下对 torch.autograd.profiler.parse_nvprof_trace 和 load_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返回EventList、EnforceUnique异常抛出、以及 NPU 算子执行后再次解析等场景。 - 构造最小 nvprof SQLite 数据库:
_create_nvprof_sqlite()按parse_nvprof_trace查询的表结构创建CUPTI_ACTIVITY_KIND_MARKER、CUPTI_ACTIVITY_KIND_RUNTIME、CUPTI_ACTIVITY_KIND_CONCURRENT_KERNEL和StringTable表,插入两组测试数据(aten::add/aten::mm),支持含 Kernel 与不含 Kernel 两种模式。 - 验证
parse_nvprof_trace回调FunctionEvent字段正确性:断言解析结果数量、name、time_range.start顺序、cpu_time值以及kernels列表的名称和耗时均符合预期。 - 验证
load_nvprof与EnforceUnique在 NPU 环境下行为一致:load_nvprof返回EventList实例且事件名称正确;EnforceUnique重复注册相同键时抛出RuntimeError。


代码审查
经过全面分析,该测试文件编写质量良好,我未发现任何需要报告的实质性问题。以下是我的详细审查结果:
逐项审查结论:
-
模块级 skip 逻辑(第 24-31 行,第 96 行):
_require_ascend_npu_stack()在模块加载时计算_SKIP_REASON,与@unittest.skipIf装饰器 +setUpClass双重检查形成合理防护。符合该仓库中 NPU 测试的惯例。 -
_create_nvprof_sqlite辅助函数(第 34-93 行):SQLite 表结构(CUPTI_ACTIVITY_KIND_MARKER、CUPTI_ACTIVITY_KIND_RUNTIME、CUPTI_ACTIVITY_KIND_CONCURRENT_KERNEL、StringTable)与parse_nvprof_trace的查询需求对齐。Marker id=100/200 起止配对正确,runtime-kernel 通过correlationId关联正确。 -
测试数据一致性:
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✓
-
临时文件清理(第 140-153 行,第 157-176 行,第 180-189 行,第 207-217 行):所有测试方法均使用
try/finally+os.remove(path)确保临时 SQLite 文件被清理。 -
API 可用性检查(第 132-136 行):
hasattr+callable双验证模式正确。 -
EnforceUnique测试(第 191-196 行):正确验证重复see()调用抛出RuntimeError。 -
导入路径(第 16-21 行):
parse_nvprof_trace、load_nvprof、EnforceUnique来自torch.autograd.profiler,EventList、FunctionEvent来自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解析逻辑对齐,断言值与测试数据一致,资源清理完备。可以安全合入。
⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。


Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.




【合入来源】
【修改方案】
test/profiler/test_parse_nvprof_trace.py,针对原生 APItorch.autograd.profiler.parse_nvprof_trace/load_nvprof做 Ascend NPU 适配一致性看护。test/profiler/新增本文件(路径与 profiler 测试目录一致),而非 test_upstream patch。profile(use_device="npu")事件采集;EnforceUnique(parse_nvprof_trace内部依赖);parse_nvprof_trace/load_nvprof负向路径仍可用。skipTest跳过,避免在纯 CPU/CUDA 环境误跑。【资料变更】
本 PR 仅新增测试用例,不修改文档。资料补齐见文档 PR #42617。
【接口变更】
不涉及代码/接口实现变更,仅新增 UT。
【功能验证】
测试场景:
parse_nvprof_trace/load_nvprof)profile(use_device="npu")采集 mm/add 等 NPU 算子事件与 timingEnforceUnique行为测试方法:
cd test/profiler python test_parse_nvprof_trace.py说明: 请在本地/CI NPU 环境执行;既有运行截图可继续参考。

【Issue 关闭策略】
【CheckList】