已关闭
test: add upstream test_proxy_tensor.py for ShapeEnv APIs #36453
小辉懂编程创建于 5月22日关闭于 5月22日
test: add upstream test_proxy_tensor.py for ShapeEnv APIs #36453
已关闭
小辉懂编程创建于 5月22日关闭于 5月22日
小辉懂编程
5月22日

【合入来源】

如有社区issue,请关联issue链接
请勿携带内部流程信息(需求链接、问题单、内部issue等)

Torch-NPU ShapeEnv API 补齐任务。

PyTorch v2.7.0 官方社区在 test/test_proxy_tensor.py 中已有相关测试用例,覆盖以下 ShapeEnv API:

  • torch.fx.experimental.symbolic_shapes.ShapeEnv.produce_guards
  • torch.fx.experimental.symbolic_shapes.ShapeEnv.get_nontrivial_guards

Torch-NPU 当前 v2.7.1 分支下 test/ 目录中没有对应的 test_proxy_tensor.py,因此本 PR 直接添加 PyTorch 官方社区已有用例,将 PyTorch 官方社区已有用例适配到 Torch-NPU 的 NPU 测试场景。

本 PR 属于:

1.1 pytorch 官方社区有用例,并且需要做 NPU 适配
1.1.1 torch-npu 社区 test 目录无对应文件

【修改方案】

本 PR 新增文件:

test/test_proxy_tensor.py

具体修改内容如下:

  1. 从 PyTorch 官方 v2.7.0 源码复制 test/test_proxy_tensor.py 到 Torch-NPU v2.7.1 分支的 test/ 目录。
  2. 该文件包含对 ShapeEnv.produce_guards 和 ShapeEnv.get_nontrivial_guards 的官方测试用例。
  3. 由于 Torch-NPU v2.7.1 分支没有此文件,直接添加官方文件可以覆盖这两个 API 的测试需求。

一、API 功能

1. torch.fx.experimental.symbolic_shapes.ShapeEnv.produce_guards

该 API 用于根据 ShapeEnv 中记录的符号形状约束生成 guards 表达式,用于保证后续运行时输入形状满足 tracing 阶段建立的符号约束。

在 symbolic tracing 场景下,当输入 Tensor 的 shape 被符号化后,produce_guards 会根据符号变量、输入来源以及约束关系生成运行时检查条件。

2. torch.fx.experimental.symbolic_shapes.ShapeEnv.get_nontrivial_guards

该 API 用于获取 ShapeEnv 中非平凡的 guards,用于判断当前符号形状环境中是否存在需要保留的动态形状约束。

在部分 shape 等价或可化简场景下,如果所有 guards 都可以被消除或证明为平凡条件,则 get_nontrivial_guards 应返回空结果。

二、官方测试用例完整性分析

PyTorch v2.7.0 官方测试文件:

test/test_proxy_tensor.py

已经包含对上述 API 的测试覆盖。

1. ShapeEnv.produce_guards

官方用例:

TestSymbolicTracing.test_mega_guard

该用例通过 symbolic tracing 构造动态 shape 约束,随后调用 fx_g.shape_env.produce_guards(...) 并验证生成的 guards 内容符合预期。

因此,该用例可以覆盖 ShapeEnv.produce_guards 的核心功能。

2. ShapeEnv.get_nontrivial_guards

官方 helper:

_assert_no_guards

其中调用 fx_g.shape_env.get_nontrivial_guards() 并断言当前场景下不存在非平凡 guards。

官方用例:

TestSymbolicTracing.test_guards_equal

该用例通过多个 symbolic tracing 场景调用 _assert_no_guards,验证了在 shape 约束可以被化简或无需保留非平凡 guards 时,ShapeEnv.get_nontrivial_guards 能正确返回空 guards。

3. 完整性结论

综上,PyTorch v2.7.0 官方用例已经覆盖:

API 官方测试用例
ShapeEnv.produce_guards TestSymbolicTracing.test_mega_guard
ShapeEnv.get_nontrivial_guards _assert_no_guards / TestSymbolicTracing.test_guards_equal

因此,本 PR 不重复新增自写测试,而是直接添加 PyTorch 官方已有用例到 Torch-NPU。

三、NPU 适配

3.1 API 适配

不需要修改 API 实现。

ShapeEnv.produce_guards 和 ShapeEnv.get_nontrivial_guards 属于 symbolic shape / guard 管理相关的 Python 层逻辑,主要负责符号形状约束生成、查询和化简。

这两个 API 不涉及:

  1. NPU kernel 实现。
  2. NPU 显存管理。
  3. NPU stream / event。
  4. 分布式通信算子。
  5. 设备侧数值计算逻辑。

因此,本次不需要修改 API 源码实现。

3.2 测试用例适配

本 PR 直接添加官方测试文件,暂不进行 NPU 设备适配。后续如需 NPU 适配,可在单独 PR 中处理。

【资料变更】

不涉及。

本 PR 仅新增官方测试文件,不修改文档资料。

【接口变更】

不涉及。

本 PR 不新增、不删除、不修改 Python API 或 C++ 接口,仅新增测试文件。

【功能验证】

本 PR 直接添加 PyTorch 官方测试文件,该文件已在 PyTorch 官方社区验证通过。

【CheckList】

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

关联 PR

v2.7.1 自写测试 PR:

https://gitcode.com/Ascend/pytorch/pull/36447

v2.12.0 同类 upstream patch PR:

https://gitcode.com/Ascend/pytorch/pull/36439

v2.11.0 同类 upstream patch PR:

https://gitcode.com/Ascend/pytorch/pull/36418

v2.10.0 同类 upstream patch PR:

https://gitcode.com/Ascend/pytorch/pull/36396

v2.9.0 同类 upstream patch PR:

https://gitcode.com/Ascend/pytorch/pull/36369
likedislike
当前Pull Request已关闭, 关闭人@小辉懂编程
小辉懂编程小辉懂编程
5月22日 创建了 pull request,commit 665c7e6a
ascend-robotascend-robot成员
5月22日 添加了label:stat/needs-squash
ascend-robot
ascend-robot成员
5月22日 评论:

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

⚠️ This PR does not yet meet the following requirements:lgtm (requires ≥ 2 person(s) per module)、approve (requires ≥ 1 person(s) per module)

Module Approval Details

module lgtm status approve status
test ❌ (0/2)(You can also ask: 王朝, huangyunlong2022, liangsongwei, zqwenn, wangmin0104) ❌ (0/1)(You can also ask: wangmin0104, wasd1111222, crazyDannyBoy, zqwenn, 陈豪)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

gehui-2026, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
ascend-robotascend-robot成员
5月22日 添加了label:ascend-cla/yes
ascend-robot
ascend-robot成员
5月22日 评论:

当前仓库存在以下 保护分支 :

Protected Branch Version Release
master
v2.9.0
v2.7.1
v2.10.0
v2.11.0
v2.12.0

评论 /sync <branch1> <branch2> ... 可将当前 PR 修改同步到其它分支(创建同步 PR):
a) 如果当前 PR 是 Open 状态,同步操作将延迟到 PR 被合并时执行
b) 如果当前 PR 已经 Merged,将立即执行同步操作

注意:

  1. /sync 命令可以指定同步到多个分支,仅最后一个 /sync 命令生效
  2. 如果创建的同步 PR 不正确,可通过向同步 PR 的源分支提交轻量级 PR 完善,或使用 /close 命令关闭
likedislike
小辉懂编程
小辉懂编程
5月22日 评论:

compile

likedislike
ascend-robotascend-robot成员
5月22日 添加了label:ci-pipeline-running
ascend-robot
ascend-robot成员
5月22日 评论:

Ascend docs pipeline is running...

likedislike
ascend-robotascend-robot成员
5月22日 添加了label:docs-ci-pipeline-running
ascend-robot
ascend-robot成员
5月22日 评论:

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

likedislike
ascend-robotascend-robot成员
5月22日 删除了label:docs-ci-pipeline-running
ascend-robotascend-robot成员
5月22日 添加了label:docs-ci-pipeline-success
ascend-robot
ascend-robot成员
5月22日 评论:

Ascend docs pipeline is running...

likedislike
ascend-robotascend-robot成员
5月22日 删除了label:docs-ci-pipeline-success
ascend-robotascend-robot成员
5月22日 添加了label:docs-ci-pipeline-running
ascend-robot
ascend-robot成员
5月22日 评论:

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

likedislike
ascend-robotascend-robot成员
5月22日 删除了label:docs-ci-pipeline-running
ascend-robotascend-robot成员
5月22日 添加了label:docs-ci-pipeline-success
ascend-robotascend-robot成员
5月22日 删除了label:ci-pipeline-running
ascend-robotascend-robot成员
5月22日 添加了label:ci-pipeline-passed
ascend-robot
ascend-robot成员
5月22日 评论:
流水线 PR-pipeline_pytorch#25066 [ commitID:27065761 ] 已完成
阶段 任务名 状态 详情
编译构建 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 🛑 >>>
流水线 PR-pipeline_pytorch ✅ >>>
此流水线已支持下列评论快捷指令,仅PR创建者评论有效
  • compile : 运行流水线
  • retry : 重试流水线所有失败子任务
  • retry <任务名> : 仅重试指定失败子任务
  • stop : 停止流水线
likedislike
小辉懂编程小辉懂编程
5月22日 关闭了 pull request