已合并
test(fx): add NPU alignment tests for unspecified symbols #35868
test(fx): add NPU alignment tests for unspecified symbols #35868
已合并
m0_53076416创建于 5月16日
m0_53076416
m0_53076416
5月16日

【合入来源】

https://gitcode.com/Ascend/pytorch/issues/1623
请勿携带内部流程信息(需求链接、问题单、内部issue等)

【修改方案】

请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列
如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容)

  1. 架构上下文补充说明(CPU vs NPU)
    本次任务涉及的ShapeEnv` 系列接口属于 PyTorch Dynamo 编译引擎前端(图追踪阶段)的基础设施。其核心功能是在编译期处理动态形状推导中的逻辑符号对象(如产生SymInt, SymFloat或施加运行时期望断言),而非处理存储实际数据的物理张量(Tensor)。因此,这些接口的逻辑天然且必须在宿主机(CPU)上由 Python/SymPy 解释器完成,物理上无法也不需要迁移至 NPU 设备执行。本次 NPU 一致性对齐的核心目的,是验证昇腾编译后端在接收到前端抛出的这些未确定动态符号时,能否正确解析包装且不发生编译期崩溃。

  2. 本PR属于开源实习任务中的功能测试用例补齐。该任务共包含 5 个ShapeEnv相关接口。经客观排查与环境验证:
    -torch.fx.experimental.symbolic_shapes.ShapeEnv.create_unbacked_symfloat与torch.fx.experimental.symbolic_shapes.ShapeEnv.create_unbacked_symint官方已具备完善的原生用例覆盖,在 NPU 环境下天然支持。
    -torch.fx.experimental.symbolic_shapes.ShapeEnv.defer_runtime_assert接口已在 v2.7.1 跑通官方原生用例,且自 v2.8.0 起被官方重命名为torch.fx.experimental.symbolic_shapes.ShapeEnv.guard_or_defer_runtime_assert,高版本已包含原生覆盖。

    • 以上 3 个接口属于 NPU 天然支持/上游变更,无需在本仓补充代码。
  3. 上游 PyTorch 官方测试库中,对核心接口torch.fx.experimental.symbolic_shapes.ShapeEnv.create_unspecified_symbol和torch.fx.experimental.symbolic_shapes.ShapeEnv.create_unspecified_symint_and_symbol的测试存在空白。本 PR 专门在test/fx/目录下新增专项测试文件test_unspecified_symbols.py进行看护。

  4. 新增测试用例严格根据底层源码逻辑进行设计:

    • 针对create_unspecified_symbol:重点验证传入0和1边界值时,触发其内部do_not_specialize_zero_one=True特性,断言其返回未确定的符号表达式对象(自由符号),确保其不被静态折叠。
    • 针对create_unspecified_symint_and_symbol:验证其成功将底层的符号表达式正确包装并转化为上层编译栈所需的SymInt类型对象。

【资料变更】

请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及”

不涉及。
经核查官方文档目录https://gitcode.com/Ascend/pytorch/tree/v2.7.1/docs/zh/native_apis,本次对齐的torch.fx.experimental.symbolic_shapes.ShapeEnv.create_unspecified_symbol等接口属于torch.fx.experimental下的底层编译期实验性内部接口,非对外暴露的常规 Native API。该文档目录严格记录向外部最终用户开放的稳定核心算子与工具级 API,本内部方法不属于该文档的收录统计范围,故无需在 md 文件中补充登记,当前资料状态已核查闭环。

【接口变更】

请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及”

不涉及

【功能验证】

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

  1. 测试场景:昇騰 NPU 单卡算力开发环境,执行图追踪核心工具类接口的功能一致性、边界值看护与原生用例兼容性验证。
  2. 测试方法:
    • 新增自主测试:针对存在上游测试空白的接口,执行新增的专项看护脚本。
    • 原生用例复测:针对上游已覆盖的接口,直接在 NPU 环境下复测原生测试集,验证底层符号推导的兼容性。
  3. 测试步骤:
    • 步骤一:执行新增看护用例
      验证torch.fx.experimental.symbolic_shapes.ShapeEnv.create_unspecified_symbol与torch.fx.experimental.symbolic_shapes.ShapeEnv.create_unspecified_symint_and_symbol接口:

      执行命令如下:

      python ./fx/test_unspecified_symbols.py
      

      0c2e63e92e95db852a9ab4fe080e955.png

    • 步骤二:执行官方原生用例看护
      验证torch.fx.experimental.symbolic_shapes.ShapeEnv.create_unbacked_symfloat和torch.fx.experimental.symbolic_shapes.ShapeEnv.create_unbacked_symint接口,这两个接口可同时在test/dynamo/test_misc.py中的test_shape_env_equal_unbacked下一起验证。
      由于原生用例test_shape_env_equal_unbacked涉及特殊的图编译验证,在本地执行时需进行以下特殊处理:
      1.注释@onlyIfTranslationValidation装饰器:该装饰器限制了用例仅在开启 Translation Validation(翻译验证)的环境下激活。本地测试环境默认未使能 TV 导致用例被跳过(Skipped),为了在本地环境中强制触发并验证该用例在 NPU 底座下的兼容性,需手动注释此行限制。
      2. 使用EXPECTTEST_ACCEPT=1环境变量:该用例底层引入了expecttest框架进行符号环境输出的字面量强比对。在本地强制执行该用例时,由于环境差异或输出格式的微调,会导致原硬编码的预期字符串(Expect String)不匹配。通过声明EXPECTTEST_ACCEPT=1,可指示测试框架自动接受当前的实际正确运行输出,并自动覆写/刷新代码中的预期字面量,从而完成校验闭环。

      执行命令如下:

      EXPECTTEST_ACCEPT=1 python ./dynamo/test_misc.py -v -k test_shape_env_equal_unbacked
      

      ae0cc83ceb693fa56ec2ffba44af9c4.png

    • 步骤三:执行官方原生用例看护
      torch.fx.experimental.symbolic_shapes.ShapeEnv.defer_runtime_assert被官方重命名为torch.fx.experimental.symbolic_shapes.ShapeEnv.guard_or_defer_runtime_assert
      验证torch.fx.experimental.symbolic_shapes.ShapeEnv.guard_or_defer_runtime_assert接口,该接口可同时在test/test_dynamic_shapes.py中的test_floor_clean_div_axioms下验证。

      执行命令如下:

      python ./test_dynamic_shapes.py -v -k test_floor_clean_div_axioms
      

      1d2e4bb56f204b364de9f8b202aa90b.png

【CheckList】

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

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 m0_53076416 的贡献)
m0_53076416m0_53076416
5月16日 创建了 pull request,commit 549feec5
m0_53076416m0_53076416
5月16日 关联了issue:【开源实习】Torch-NPU API一致性对齐:补齐测试用例、API功能对齐、补齐文档(17)
ascend-robot
ascend-robot成员
5月16日 评论:

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 李伟, sunyu-xuan (2/2) 李伟 (1/1)

💡 Tip:

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

CLA Signature Pass

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

likedislike
ascend-robotascend-robot成员
5月16日 添加了label:ascend-cla/yes
此处折叠了86条消息 查看更多
liwei386成员
5月28日 评论:

/approve

likedislike
ascend-robotascend-robot成员
5月28日 添加了label:approvedlgtm
ascend-robotascend-robot成员
5月28日 合入了pull request
ascend-robot
ascend-robot成员
5月28日 评论:
流水线 pytorch_gitcode_PR_multiVersion#9581 [ commitID:ae572f90 ] 已完成
likedislike
ascend-robot
ascend-robot成员
5月28日 评论:

The repo or branch is not access to PR-cooperate, please check the current repo https://gitcode.com/Ascend/pytorch.git, branch=v2.10.0

likedislike