已开启
【API一致性任务】Ascend for PyTorch API 一致性验证:torch.testing._internal.common_utils.skipIfRocm(NPU 验证) #4116
村雨雨雨创建于 8月18日
8月18日 关联了看板:FrameworkPTAdapter 版本issue看板
8月18日 添加了label:help-wantedbot-triagedevent: accelerator-agnostic
TorchNPU-Bot
8月18日 评论:
8月18日 评论:
检测到社区任务相关 issue,自动添加标签:event: accelerator-agnostic、help-wanted


8月18日 修改了issue 的描述
此处折叠了5条事件消息 查看更多
8月20日 添加了label:event: api-consistency
TorchNPU-Bot
8月20日 评论:
8月20日 评论:
检测到社区任务相关 issue,自动添加标签:event: api-consistency、help-wanted


8月24日 修改了issue 的描述
8月25日 修改了issue 的描述
群青世界
9月1日 评论:
9月1日 评论:
社区任务交付件初审结论:✔
1. 现状分析
- 涉及 API:
torch.testing._internal.common_utils.skipIfRocm。 - 核心功能:PyTorch 官方测试装饰器,用于在 ROCm 环境下跳过特定测试或函数。支持无参
@skipIfRocm和带消息参数@skipIfRocm(msg="...")两种用法。 - 任务规范:依据《Torch-NPU API 一致性说明文档》,需验证该装饰器在 NPU 环境下的行为。由于 NPU 非 ROCm 环境,预期行为应为不跳过、正常执行测试,且装饰器逻辑本身不应影响 NPU 上的测试运行。
2. 适配方案
- 代码适配:无需修改。
- 该装饰器核心逻辑为判断
TEST_WITH_ROCM标志位。在 NPU 环境下,该标志位为 False,装饰器直接返回原函数/类,无副作用。无需 TorchNPU 进行代码适配。
- 该装饰器核心逻辑为判断
- 用例适配:补充验证用例。
- 官方用例缺乏对该装饰器行为(特别是跳过逻辑和装饰器保留属性)的直接验证。
- 已在 TorchNPU 仓库本地补充验证脚本
test/test_skip_if_rocm.py,覆盖函数装饰、类装饰、自定义消息等场景。
- 文档补齐:无需提交资料 PR。
- 该 API 为 PyTorch 私有测试接口,无独立公开文档条目,且行为与上游一致,无单独限制条目。
3. NPU 功能验证
-
验证策略:
- 在 NPU 环境(Ascend 910B3)下,运行本地补充的
test_skip_if_rocm.py。 - 验证点:
@skipIfRocm在 NPU 上不触发跳过,测试正常执行。@skipIfRocm(msg="custom")自定义消息逻辑在 mockTEST_WITH_ROCM=True时能正确抛出unittest.SkipTest。- 装饰器对类/函数的保留行为(Class/Function preservation)。
- 在 NPU 环境(Ascend 910B3)下,运行本地补充的
-
验证环境:
- OS: openEuler (具体版本未详述,通常配合 CANN 9.1.0)
- NPU: Ascend 910B3 (CANN 9.1.0)
- 版本: PyTorch/TorchNPU v2.7.1, v2.11.0, v2.12.0, master
-
验证结果:
- PASS。
- 在所有四个目标版本中,测试用例均成功运行并通过。
- 注意版本差异:
master版本:类装饰器保留TestCase子类属性(True),行为更完善。v2.7.1/v2.11.0/v2.12.0:类装饰器因实现细节(@wraps + wrapper)导致返回函数包装器,TestCase识别为False。此为 Python 装饰器实现差异,非 NPU 适配问题,且不影响 NPU 上函数/方法装饰器的正常使用。
-
版本结果汇总表:
| 目标版本 | torch / torch-npu | 验证结果 | 备注 |
|---|---|---|---|
| v2.7.1 | 2.7.1+cpu / 2.7.1.post8 | PASS | Ran 5 tests, OK (Class preservation: False) |
| v2.11.0 | 2.11.0+cu130 / 2.11.0 | PASS | Ran 5 tests, OK (Class preservation: False) |
| v2.12.0 | 2.12.0+cu130 / 2.12.0 | PASS | Ran 5 tests, OK (Class preservation: False) |
| master | 2.13.0+cpu / 2.13.0.rc1 | PASS | Ran 5 tests, OK (Class preservation: True) |
4. 资料检查
- 检查范围:PyTorch 2.7、2.11、2.12、2.13 原生文档及 Ascend 原生 API 支持表。
- 处理结论:
- 该 API 为私有测试接口,无独立公开文档条目,且行为与上游完全一致。
- 无需补充公开资料。
5. 最终结论
- API 适配:无需修改(纯逻辑装饰器,NPU 环境下无影响)。
- 用例适配:已补充本地验证用例,证明 NPU 环境下装饰器行为符合预期。
- 文档补齐:无需补齐。
- 验证结果:
- 在 Ascend 910B3 环境及多个 PyTorch 版本下,
skipIfRocm功能验证均通过。 - 确认该装饰器在 NPU 环境下行为与官方一致(即不跳过,正常执行)。
- 在 Ascend 910B3 环境及多个 PyTorch 版本下,
- 动作:不提交 PR(因属测试工具内部验证,且官方用例需跟踪处理),以 Issue 记录结论,请维护者复检并完成任务验收。


linhan37
9月9日 评论:
9月9日 评论:
审核结论:该API用于在 ROCm 环境下跳过特定测试或函数,对硬件后端有依赖,非纯python逻辑。上游测试用例不完整的情况下需要在TorchNPU目录下新增测试用例文件补齐测试场景。因此该API为非issue-only场景,请开发者重新提交PR后由社区maintainer进一步检视。


9月10日 修改了issue 的描述
9月10日 添加了label:event: accelerator-agnostic
TorchNPU-Bot
9月10日 评论:
9月10日 评论:
检测到社区任务相关 issue,自动添加标签:event: accelerator-agnostic、help-wanted


27 天前 关联了pull request:test: add NPU coverage for torch.testing._internal.common_utils.skipIfRocm
27 天前 关联了pull request:test: add NPU coverage for torch.testing._internal.common_utils.skipIfRocm
27 天前 关联了pull request:test: add NPU coverage for torch.testing._internal.common_utils.skipIfRocm
27 天前 关联了pull request:test: add NPU coverage for torch.testing._internal.common_utils.skipIfRocm
27 天前 关联了pull request:test: add NPU coverage for torch.testing._internal.common_utils.skipIfRocm
27 天前 关联了pull request:test: add NPU coverage for torch.testing._internal.common_utils.skipIfRocm
27 天前 关联了pull request:test: add NPU coverage for torch.testing._internal.common_utils.skipIfRocm
27 天前 关联了pull request:test: add NPU coverage for torch.testing._internal.common_utils.skipIfRocm
Jinfan Liu
27 天前 评论:
27 天前 评论:
本任务按 2026-09-09 审核结论(非 issue-only,需在 TorchNPU 目录下新增测试用例文件补齐测试场景)重新提交测试 PR:test/test_skip_if_rocm.py(仅新增测试,不改动实现代码)。
- v2.7.1: https://gitcode.com/Ascend/pytorch/merge_requests/46596
- v2.11.0: https://gitcode.com/Ascend/pytorch/merge_requests/46597
- v2.12.0: https://gitcode.com/Ascend/pytorch/merge_requests/46598
- master: https://gitcode.com/Ascend/pytorch/merge_requests/46599
用例覆盖:skipIfRocm 裸装饰器 / 带 msg 两种用法的运行路径(NPU 不跳过),以及 TEST_WITH_ROCM 打开时的跳过路径与 reason(默认 msg / 自定义 msg),并通过 unittest runner 断言用例被上报为 skipped。


任务背景
torch.testing._internal.common_utils.skipIfRocm是 PyTorch 官方测试装饰器:在 ROCm 环境下跳过被装饰的测试/函数,支持@skipIfRocm与@skipIfRocm(msg="...")两种用法,默认跳过消息为"skipIfRocm: test doesn't currently work on the ROCm stack"。官方用例检索结果
官方
test/test_testing.py等使用该装饰器(如TestImports.test_circular_dependencies),但未发现对其行为(运行路径、跳过路径、reason 消息、两种用法)的直接验证用例,也没有 NPU 专项覆盖。源码片段(官方装饰器定义):def skipIfRocm(fn=None, *, msg=None): ... return skipIf(TEST_WITH_ROCM, msg or "test doesn't currently work on the ROCm stack")(fn)NPU 适配验证情况(四版本环境)
在 NPU 上补充直接验证(本地验证文件
test/test_skip_if_rocm.py):NPU 上装饰器不跳过、正常执行;TEST_WITH_ROCM=True(mock)时按默认/自定义消息抛unittest.SkipTest。运行命令与结果(v2.7.1 / v2.11.0 / v2.12.0 / master 四环境,Ascend 910B3 单卡):补充说明(类装饰器版本差异,纯 Python 行为、与设备无关):master 的
skipIfRocm基于lazy_skip_if,对类目标原样返回类(类装饰用法有效,NPU 上正常执行);v2.7.1 / v2.11.0 / v2.12.0 实现为@wraps + wrapper,类装饰后返回函数包装器、类不再被 unittest 识别为 TestCase。资料补齐
torch.testing._internal.common_utils.skipIfRocm属 PyTorch 私有测试内部接口,master 文档树docs/zh/api/native_api下无对应 Native API 文档条目,按验收标准「PyTorch 私有接口不需要补充资料」,无需资料补齐。结论
该 API 在 NPU 上行为与官方一致(装饰器仅在 ROCm 环境生效,NPU无关);官方用例缺乏对该装饰器行为的直接覆盖,本 issue 已附运行日志与源码片段,按社区用例硬件解耦任务跟踪处理。
A2 补充实测(2026-09-10,Atlas A2 / 910B3 单卡,torch 2.9.0)