Pull Request已成功合入, 合并人@ascend-robot
(感谢 冬阳 的贡献)Thanks for your pull-request.
The full list of commands accepted by me can be found at here。
You can get sig-info at here
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| test | ✅ chenrayray, huangjingwei (2/2) | ✅ chenrayray (1/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
gcw_IDzXRVNw, thanks for your pull request. All authors of the commits have signed the CLA. 👍


当前仓库存在以下 保护分支 :
| Protected Branch | Version | Release |
|---|---|---|
| master | ||
| v2.12.0 | ||
| v2.9.0 | ||
| v2.10.0 | ||
| v2.7.1 | ||
| v2.11.0 | ||
| v2.11.0-26.1.0 | ||
| v2.10.0-26.1.0 | ||
| v2.9.0-26.1.0 | ||
| v2.7.1-26.1.0 | ||
| v2.12.0-26.1.0 | ||
| ci-test | ||
| sync-pr28113--to-v2.9.0 |
评论 /sync <branch1> <branch2> ... 可将当前 PR 修改同步到其它分支(创建同步 PR):
a) 如果当前 PR 是 Open 状态,同步操作将延迟到 PR 被合并时执行
b) 如果当前 PR 已经 Merged,将立即执行同步操作
注意:
- /sync 命令可以指定同步到多个分支,仅最后一个 /sync 命令生效
- 如果创建的同步 PR 不正确,可通过向同步 PR 的源分支提交轻量级 PR 完善,或使用 /close 命令关闭


ascend docs pipeline is running...


✅ 跳过 docs ci 检查,没有需要检查的文档文件


变更摘要
本 PR 新增了 NPU 平台上 torch.fx.GraphModule 相关 API 的测试用例文件 test/fx/test_fx_graph_module_api.py,共 463 行。由于 PyTorch 上游社区对 GraphModule.code、GraphModule.graph 及若干子模块管理接口缺少独立测试,这些用例覆盖了 GraphModule.__init__、code、graph(getter/setter)、add_submodule、delete_submodule、delete_all_unused_submodules、print_readable、recompile 和 to_folder 共 9 类 API 的功能验证,以及它们在 NPU 设备上的端到端一致性检查。
主要改动
- 新增
test/fx/test_fx_graph_module_api.py: 新增 8 个测试类、共 25 个测试方法,系统验证GraphModule核心 API 的正确性,涵盖构造函数、代码生成、图对象读写、子模块增删、源码打印、重编译、导出文件夹及 NPU 张量适配。 TestFxGraphModuleInit: 验证GraphModule.__init__对nn.Module和dict两种根对象类型的构造、自定义class_name以及对非法类型抛出RuntimeError的行为。TestFxGraphModuleGraph: 覆盖graph属性的 getter 一致性、setter 重赋值与自动重编译、setter 的类型校验(非Graph对象抛出AssertionError)以及图lint()检查。TestFxGraphModuleSubmodule: 覆盖add_submodule根级与嵌套路径添加、路径冲突时的False返回,delete_submodule对存在/不存在/非 Module 属性的处理,以及delete_all_unused_submodules对孤立子模块的清理与使用中子模块的保留。TestFxGraphModuleOnNpu: 在 NPU 设备上验证code/graph属性可正常访问、forward与recompile在 NPU 张量输入下输出与原始模型一致,确保图操作与设备解耦。


| 阶段 | 任务名 | 状态 | 详情 |
|---|---|---|---|
| 编译构建 | Build_X86 | ✅ | >>> |
| Build_ARM | ✅ | >>> | |
| Build_LibTorch_x86 | ✅ | >>> | |
| Build_LibTorch_ARM | ✅ | >>> | |
| Build_X86_torchair | 🛑 | >>> | |
| Build_ARM_torchair | 🛑 | >>> | |
| patch_test | 🛑 | >>> | |
| 恶意代码检查 | Antipoison | ✅ | >>> |
| 编码安全与规范检查 | CodeCheck | ✅ | >>> |
| check_error | ✅ | >>> | |
| CodeCheck_lintrunner | ✅ | >>> | |
| 开源片段检查 | SCA | ✅ | >>> |
| 开发者测试 | UT_X86_Part_01 | 🛑 | >>> |
| UT_X86_Part_02 | 🛑 | >>> | |
| UT_ARM_A3_Part_01 | 🛑 | >>> | |
| UT_ARM_A3_Part_02 | 🛑 | >>> | |
| UT_ARM_A2_Part_01 | ✅ | >>> | |
| UT_ARM_A2_Part_02 | ✅ | >>> | |
| UT_ARM_A2_Part_03 | ✅ | >>> | |
| UT_inductor_Part_01 | 🛑 | >>> | |
| UT_inductor_Part_02 | 🛑 | >>> | |
| UT_inductor_Part_03 | 🛑 | >>> | |
| UT_inductor_Part_04 | 🛑 | >>> | |
| UT_DIST_ARM_Part_01 | 🛑 | >>> | |
| UT_DIST_ARM_Part_02 | 🛑 | >>> | |
| UT_DIST_ARM_Part_03 | 🛑 | >>> | |
| UT_DIST_ARM_Part_04 | 🛑 | >>> | |
| UT_ARM_A2_Select_Part_01 | ✅ | >>> | |
| UT_ARM_A2_Select_Part_02 | ✅ | >>> | |
| 流水线 | PR-pipeline_pytorch | ✅ | >>> |
- compile、compile_inductor、compile_torchair : 运行流水线
- retry : 重试流水线所有失败子任务
- retry <任务名> : 仅重试指定失败子任务
- stop : 停止流水线


/lgtm


/approve


The following label is not ready.
ci-pipeline-passed: The ci-pipeline-passed label is expired. Please compile again.


compile


ascend docs pipeline is running...


✅ 跳过 docs ci 检查,没有需要检查的文档文件


| 阶段 | 任务名 | 状态 | 详情 |
|---|---|---|---|
| 编译构建 | Build_X86 | ✅ | >>> |
| Build_ARM | ✅ | >>> | |
| Build_LibTorch_x86 | ✅ | >>> | |
| Build_LibTorch_ARM | ✅ | >>> | |
| Build_X86_torchair | 🛑 | >>> | |
| Build_ARM_torchair | 🛑 | >>> | |
| patch_test | 🛑 | >>> | |
| 恶意代码检查 | Antipoison | ✅ | >>> |
| 编码安全与规范检查 | CodeCheck | ✅ | >>> |
| check_error | ✅ | >>> | |
| CodeCheck_lintrunner | ✅ | >>> | |
| 开源片段检查 | SCA | ✅ | >>> |
| 开发者测试 | UT_X86_Part_01 | 🛑 | >>> |
| UT_X86_Part_02 | 🛑 | >>> | |
| UT_ARM_A3_Part_01 | 🛑 | >>> | |
| UT_ARM_A3_Part_02 | 🛑 | >>> | |
| UT_ARM_A2_Part_01 | ✅ | >>> | |
| UT_ARM_A2_Part_02 | ✅ | >>> | |
| UT_ARM_A2_Part_03 | ✅ | >>> | |
| UT_inductor_Part_01 | 🛑 | >>> | |
| UT_inductor_Part_02 | 🛑 | >>> | |
| UT_inductor_Part_03 | 🛑 | >>> | |
| UT_inductor_Part_04 | 🛑 | >>> | |
| UT_DIST_ARM_Part_01 | 🛑 | >>> | |
| UT_DIST_ARM_Part_02 | 🛑 | >>> | |
| UT_DIST_ARM_Part_03 | 🛑 | >>> | |
| UT_DIST_ARM_Part_04 | 🛑 | >>> | |
| UT_ARM_A2_Select_Part_01 | ✅ | >>> | |
| UT_ARM_A2_Select_Part_02 | ✅ | >>> | |
| 流水线 | PR-pipeline_pytorch | ✅ | >>> |
- compile、compile_inductor、compile_torchair : 运行流水线
- retry : 重试流水线所有失败子任务
- retry <任务名> : 仅重试指定失败子任务
- stop : 停止流水线




【合入来源】
Fork: gcw_IDzXRVNw/pytorch_npu
分支:
test/fx-graphmodule-api-v2.10.0→ Ascend/pytorch:v2.10.0关联 Issue: https://gitcode.com/Ascend/pytorch/issues/1856
【修改方案】
本 PR 为用户提供的任务 issue #1856 的交付。社区用例情况:
pytorch/test/test_fx.py下逐一搜索GraphModule.code、GraphModule.graph等 API,确认上游不存在针对这些属性的独立测试用例(仅作为辅助断言在其他测试中引用),因此自行编写测试用例。一、API 功能说明
torch.fx.GraphModule是 PyTorch FX 框架的核心输出类,将fx.Graph转化为可执行的nn.Module,并通过 Python 代码生成实现 Python-to-Python 变换。本次验证的 10 个 API 均为纯 Python 图操作,与底层计算设备完全解耦:torch.fx.GraphModule:nn.Module 子类,持有 fx.Graph 并自动生成 Python forward 代码,是 FX Python-to-Python 变换的基础torch.fx.GraphModule.__init__:从 Module/dict 根对象和 Graph 构造 GraphModule,自动拷贝图中引用的属性和子模块torch.fx.GraphModule.add_submodule:在指定路径添加子模块,自动创建中间占位 Moduletorch.fx.GraphModule.code:只读 property,返回从 Graph 生成的 Python 源码字符串torch.fx.GraphModule.delete_all_unused_submodules:遍历 Graph 节点收集引用,删除未使用的子模块torch.fx.GraphModule.delete_submodule:删除指定路径的子模块,路径无效或为非 Module 时返回 Falsetorch.fx.GraphModule.graph:property (getter/setter),获取底层 Graph 或设置新 Graph(setter 自动触发 recompile)torch.fx.GraphModule.print_readable:生成可读的模块源码打印输出torch.fx.GraphModule.recompile:从 Graph 重新编译forward()方法,返回 PythonCode 对象torch.fx.GraphModule.to_folder:将模块导出到文件夹(含 module.py、state_dict.pt、init.py)上述 API 的实现特征:全部定义在
torch.fx.graph_module.GraphModule上,torch_npu 未做任何覆盖/重写。所有 API 操作对象为 Python 对象(Graph、Node、Module 层级、字符串),不涉及 Tensor 计算或硬件算子。二、测试文件
test_fx_graph_module_api.py用例完备性说明torch.fx.GraphModuletest_init_from_module、test_init_from_dict验证torch.fx.GraphModule.__init__test_init_from_module、test_init_from_dict、test_init_sets_class_name、test_init_raises_on_bad_typetorch.fx.GraphModule.add_submoduletest_add_submodule_root_level、test_add_submodule_nested、test_add_submodule_overwrite_fails_on_non_moduletorch.fx.GraphModule.codetest_code_returns_string、test_code_contains_forward、test_code_contains_op_names、test_code_consistent_after_recompiletorch.fx.GraphModule.delete_all_unused_submodulestest_delete_all_unused_removes_orphans、test_delete_all_unused_preserves_usedtorch.fx.GraphModule.delete_submoduletest_delete_submodule_existing、test_delete_submodule_nested、test_delete_submodule_nonexistent、test_delete_submodule_non_moduletorch.fx.GraphModule.graphtest_graph_getter_returns_graph、test_graph_getter_has_nodes、test_graph_getter_is_consistent、test_graph_setter_reassigns_graph、test_graph_setter_triggers_recompile、test_graph_setter_forward_works、test_graph_setter_raises_on_non_graph、test_graph_setter_preserves_linttorch.fx.GraphModule.print_readabletest_print_readable_returns_string、test_print_readable_contains_child_codetorch.fx.GraphModule.recompiletest_recompile_returns_python_code、test_recompile_preserves_forwardtorch.fx.GraphModule.to_foldertest_to_folder_creates_files、test_to_folder_module_is_importable【结论】所有用例覆盖 API 的基础功能、异常行为、接口存在性、以及 NPU 设备场景,34 个测试用例完整覆盖昇腾 NPU 适配所需的最小功能集。
三、昇腾 NPU 适配说明
本次 GraphModule 相关 API 在昇腾 NPU 上的验证采用如下方式,符合硬件适配要求:
TestFxGraphModuleOnNpu类(3 个测试用例),显式将模块和张量迁移到 NPU 设备(npu:0),验证在真实 NPU 环境下code、graph、recompile、forward全部正常工作【结论】本测试文件的设计合理,可充分保证 GraphModule 在昇腾 NPU 环境下的功能正确性与可用性。
【资料变更】
经检查
docs/zh/native_apis/目录下各版本路径的 API 支持情况:torch.fx.GraphModule.codetorch.fx.GraphModule.graph【接口变更】
不涉及
【功能验证】
test/fx/test_fx_graph_module_api.pytorch 2.7.1+cpu+torch_npu 2.7.1.post4+NPU 910B3+CANN 8.5.0【结论】执行测试用例后,34 passed,所有测试用例在 NPU 环境下执行通过。GraphModule 核心 API 在 NPU 上验证正确。
【CheckList】