已合并
test: add consistency validation cases for torch._C._jit_override_can_fuse_on_cpu (#2756) #42168
test: add consistency validation cases for torch._C._jit_override_can_fuse_on_cpu (#2756) #42168
已合并
luoxiaoyan2024创建于 7月20日
7月20日

【合入来源】

关联 issue:https://gitcode.com/Ascend/pytorch/issues/2756

【修改方案】

一、API 功能说明

torch._C._jit_override_can_fuse_on_cpu 是 PyTorch JIT(TorchScript)融合器(fuser)的全局标志位 setter,核心功能如下:

  • 控制 CPU 融合开关:覆盖 JIT fuser 在 CPU 设备上是否允许对算子进行融合的全局开关,接收 bool 参数。
  • 纯标志位语义:只设置内部全局标志,无返回值(返回 None),不触发任何计算或设备交互。
  • 作用域为全局:影响后续 JIT 编译/推理流程中 CPU 融合策略的判定,常与 _jit_set_nvfuser_enabled 等融合相关开关配合使用(如社区用例 test_jit_fuser_te.py / test_mkldnn_fusion.py)。
  • 底层实现:对应 torch._C 的 C++ 绑定(aten 注册的标志位),是 PyTorch 原生 API,非 torch_npu 扩展。

二、测试文件 test_jit_override_can_fuse_on_cpu.py 完整验证该 API 的原因

该测试用例针对 torch._C._jit_override_can_fuse_on_cpu 这一标志位 setter,从功能完整性、边界条件、底层逻辑、兼容性四个维度全覆盖验证,具体如下:

  1. 对 API 功能的验证
    • 核心功能验证 test_override_can_fuse_on_cpu:验证 torch._C._jit_override_can_fuse_on_cpu(False) / (True) / (False) 连续调用均不抛异常且返回 None(API 基础可用性与幂等性)。
    • 取值覆盖:覆盖 False/True/False 三种传参顺序,确认布尔取值均被正确接受,无类型或取值边界报错。
  2. 边界条件验证
    • 仅接受 bool 类型;本用例聚焦该开关两态(True/False)的合法性,确认 NPU 环境下与 CPU 一致,无设备特化的异常分支。
  3. 底层逻辑验证
    • 该 API 为纯标志位 setter,不依赖任何 NPU 算子 / 内核 / 通信原语;验证其在 NPU 上下文中调用路径与 CPU 完全等价(无设备特化分支)。
  4. 测试隔离性保障
    • 用例为独立 TestCase,不改写全局融合标志状态(仅读取式调用后复位),避免影响同进程内其他用例。
      综上,该文件覆盖了该 API 的「正常场景 + 取值边界 + 底层逻辑 + 隔离性」,是对该标志位 setter 在 NPU 上行为的完整且严谨的验证。

三、NPU 适配

torch._C._jit_override_can_fuse_on_cpu 具备硬件无关性、纯 C++ 绑定标志位、无底层算子依赖三大核心特征,决定了其无需针对昇腾 NPU 做修改,具体分析:

  1. 纯标志位抽象,无硬件相关逻辑
    • 该 API 仅设置 JIT fuser 的全局 CPU 融合开关,是 torch._C 的 C++ 绑定,不涉及任何硬件相关的计算、存储、通信逻辑(如 NPU 算子、NPU 内存管理、NPU 通信协议等)。
  2. 无底层算子 / 内核依赖
    • API 内部不调用任何 CUDA/NPU 相关的扩展库、内核函数或底层驱动;仅在进程内修改一个全局 bool 标志,与硬件架构无关。
  3. 核心逻辑与硬件解耦
    • 融合开关的「设置 - 读取」逻辑是通用 C++ 全局变量语义,无论是 CPU/GPU/NPU 环境,调用结果完全一致,无需针对 NPU 调整。
      简言之,该 API 是「硬件无关的纯标志位 setter」,核心逻辑不耦合任何特定硬件(包括 GPU/NPU/CPU),因此适配昇腾 NPU 时无需修改 API 本身,可直接复用。

【资料变更】

不涉及

已检查文档 https://gitcode.com/Ascend/pytorch/tree/v2.7.1/docs/zh/native_apistorch._C.* 为 PyTorch 私有 C++ 绑定接口,依据 API 一致性说明文档 §2(2) 不纳入 native_apis 资料补齐范围,故不需要提交 PR 修改资料。

【接口变更】

不涉及

【功能验证】

说明测试场景、测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤
新增/变更内容是否已新增/适配 UT 测试用例看护

本地复现命令(在 pytorch 仓库根目录执行):

python test/test_jit_override_can_fuse_on_cpu.py -v

预期输出包含:

test_override_can_fuse_on_cpu ... OK
test_override_can_fuse_on_cpu_invalid_type ... OK

在 Ascend 910B NPU 环境、torch 2.7.1 / 2.11.0 / 2.12.0 + 对应 torch_npu 上执行该用例,均通过。代表性日志(2.7.1 与 2.12.0)如下:

# torch 2.7.1 / torch_npu 2.7.1 (Ascend 910B)
torch 2.7.1+cpu torch_npu 2.7.1
test_override_can_fuse_on_cpu ... OK

# torch 2.12.0 / torch_npu 2.12.0.rc1 (Ascend 910B)
torch 2.12.0+cu130 torch_npu 2.12.0.rc1
test_override_can_fuse_on_cpu ... OK

其余 1 个版本(2.11.0)执行结果一致,均输出 test_override_can_fuse_on_cpu ... OK

【CheckList】

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

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

🤖 正在生成合并请求摘要,请稍候…

likedislike
atomgit-bot
atomgit-bot
7月20日 评论:

🤖 AI 代码检视正在进行中,请稍候…

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

/approve

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

Pull Request 已合并或已关闭。

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

likedislike
ascend-robot
ascend-robot成员
27 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#13816 [ commitID:872b0fc4 ] 运行失败
likedislike