已关闭
【开源实习】Torch-NPU API一致性对齐:补齐测试用例、API功能对齐、补齐文档(3) #1609
dinglaiping创建于  3月30日关闭于  5月22日
dinglaiping成员
3月30日 创建

【任务分值】50分
Torch-NPU API 补齐 开源实习任务描述
一、任务概览
Torch-NPU 是昇腾 NPU 适配 PyTorch 框架的核心插件,为 PyTorch 提供完整的昇腾硬件算子支持、调度能力与推理优化,保障 PyTorch 模型可在昇腾 NPU 上无缝、高效运行。
当前 PyTorch 官方原生 API 已形成完善体系,但部分API尚未在 Torch-NPU 中完成实现、对齐与验证,导致部分 PyTorch 原生模型 / 代码在昇腾 NPU 上运行时出现接口报错、功能不一致等问题。
本任务邀请开发者参与 Torch-NPU API 补齐与适配验证,完成缺失 API 的开发、调试、测试与文档交付,完善 Torch-NPU 对 PyTorch 原生 API 的兼容性,提升昇腾 NPU 上 PyTorch 框架的易用性与模型适配覆盖率。

二、核心任务范围
1、用例补齐
(1)pytorch官方社区有用例,则做NPU适配,并将patch提交PR到torch-npu的test_upstream目录。
若test_upstream已有相关patch,则需要分析合理性,不合理则修改;进行验证并提供日志。
若NPU适配不需要做任何修改,则直接在issue中进行说明。
提交到2.7.1 2.8.0 2.9.0 2.10.0 2.11.0,后面如果发布了2.12.0版本同样要提交代码,但是master不需要提交。
(2)pytorch官方社区无用例,则自己写用例,并提交PR到torch-npu的test目录。
提交到2.7.1 2.8.0 2.9.0 2.10.0 2.11.0以及master,后面如果发布了2.12.0版本同样要提交代码。

2、API补齐
如果API运行失败,或者API和torch社区不一致,则需要提交PR对API进行功能补齐,并给出补齐思路、运行日志等。
提交到2.7.1 2.8.0 2.9.0 2.10.0 2.11.0以及master,后面如果发布了2.12.0版本同样要提交代码。

3、资料补齐
如果有api实际已经支持,但文档中没有,则在
https://gitcode.com/Ascend/pytorch/tree/v2.7.1/docs/zh/native_apis 中进行补充,注意:只需要提交PR合入2.7.1版本,但是该目录下所有版本的api支持情况都要刷新。

注意:整个补齐过程要在issue或者PR中要详细说明,如API功能、用例完备性(pytorch官方用例或者自写用例)、适配方案(API适配方案、用例适配方案)、运行结果等等。如果需要提交PR(用例、代码、文档等),则在PR中详述即可,可以不提交issue;如果不需要提交PR,则必须提交issue并在issue中详述。

三、交付标准与积分
开发者可认领任务列表中的单个 API / 一组关联 API(torch-npu社区标签为intern的issue中,每个issue中的api数量不等,开发者一次只能认领一个issue)。一个api积分10积分,如果一个issue中有10个api,那完成后即可获得100积分。

四、补充说明
积分规则:任务积分按最终完成结算,不做阶段累积(完整完成issue中各个API,可获得完整积分,否则无法获得积分);

参考资源:
参考指导:https://www.hiascend.com/developer/courses/detail/2016448591740112898
Torch-NPU 代码仓:https://gitcode.com/Ascend/pytorch
开发规范:所有代码、文档、测试用例必须遵循 Torch-NPU 开源社区规范,保证可读性、可维护性与可复现性;

五、任务价值
深度参与昇腾生态 + PyTorch 开源共建,贡献代码合入官方仓库;
掌握 NPU PyTorch 框架适配、异构计算核心技能;
获得开源社区认可,积累工业级实习项目经验,提升简历竞争力。

六、API任务
torch.fx.experimental.proxy_tensor.get_proxy_mode
torch.fx.experimental.proxy_tensor.handle_sym_dispatch
torch.fx.experimental.proxy_tensor.make_fx
torch.fx.experimental.proxy_tensor.maybe_disable_thunkify
torch.fx.experimental.proxy_tensor.maybe_enable_thunkify

总结
任务核心:补齐 Torch-NPU 缺失的 PyTorch 原生 API,保障接口兼容、精度一致、可稳定运行;
交付物统一包含:补齐代码 + 运行日志 + 测试用例 + 资料,实际根据api情况略有区别,如不需要补齐则不需要补齐api代码。

likedislike
Ddinglaiping成员
3月30日 添加了label:intern
Ddinglaiping成员
4月3日 修改了issue 的描述
Ddinglaiping成员
4月13日 修改了issue 的描述
Ddinglaiping成员
4月17日 修改了issue 的描述
nwww
4月27日 评论:

/intern-assign

likedislike
ascend-bot成员
4月27日 评论:

@nannan-2026 , 感谢您认领此任务, 请及时跟导师沟通, 导师审核通过后才能承担此任务, 否则任务无效.

likedislike
Nnwww
5月2日 关联了pull request:test(fx): add tests for proxy tensor api
Nnwww
5月2日 关联了pull request:test(fx): add tests for proxy tensor api
Nnwww
5月2日 关联了pull request:test(fx): add tests for proxy tensor api
Nnwww
5月2日 关联了pull request:test(fx): add tests for proxy tensor api
Nnwww
5月2日 关联了pull request:test(fx): add tests for proxy tensor api
Nnwww
5月2日 关联了pull request:test(fx): add tests for proxy tensor api
nwww
5月2日 评论:

老师您好,本次 torch.fx.experimental.proxy_tensor API 补齐任务已完成,相关 PR 汇总如下:

一、任务与 PR 汇总

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

本次任务覆盖以下 5 个 API:

  • torch.fx.experimental.proxy_tensor.get_proxy_mode
  • torch.fx.experimental.proxy_tensor.handle_sym_dispatch
  • torch.fx.experimental.proxy_tensor.make_fx
  • torch.fx.experimental.proxy_tensor.maybe_disable_thunkify
  • torch.fx.experimental.proxy_tensor.maybe_enable_thunkify

测试 PR:

文档 PR:

说明:本次根据当前任务要求提交至 v2.7.1v2.9.0v2.10.0v2.11.0v2.12.0 以及 master 分支,不涉及 v2.8.0 分支。


二、API 功能说明

  1. torch.fx.experimental.proxy_tensor.get_proxy_mode

    用于获取当前活跃的 ProxyTorchDispatchMode。在非 tracing 环境下返回 None,在 make_fx tracing 过程中可获取到当前 proxy mode。

  2. torch.fx.experimental.proxy_tensor.handle_sym_dispatch

    用于处理 proxy tensor tracing 过程中的 symbolic dispatch 逻辑,依赖当前 proxy mode 环境。该接口属于 proxy_tensor tracing 内部调度相关 helper。

  3. torch.fx.experimental.proxy_tensor.make_fx

    用于对 Python 函数进行 tracing,并生成对应的 torch.fx.GraphModule。生成后的 GraphModule 可用于表示被 trace 函数的 ATen 图结构。

  4. torch.fx.experimental.proxy_tensor.maybe_enable_thunkify

    用于在特定上下文中启用 thunkify 相关逻辑,可作为上下文管理器使用。

  5. torch.fx.experimental.proxy_tensor.maybe_disable_thunkify

    用于在特定上下文中关闭 thunkify 相关逻辑,可作为上下文管理器使用。


三、用例完备性与适配方案说明

经检查,仓库中已有大量 make_fx 相关测试覆盖,例如 test/fxtest/functorchtest/dynamotest/test_functionalization.py 等文件中均存在 make_fx 使用场景。

但本次任务中的以下 API 未检索到独立、直接的专项验证用例:

  • torch.fx.experimental.proxy_tensor.get_proxy_mode
  • torch.fx.experimental.proxy_tensor.handle_sym_dispatch
  • torch.fx.experimental.proxy_tensor.maybe_disable_thunkify
  • torch.fx.experimental.proxy_tensor.maybe_enable_thunkify

因此本次采用自写轻量 API 兼容性测试的方式进行补齐,新增测试文件:

  • test/fx/test_proxy_tensor_api.py

该测试文件开头已补充英文说明,说明该文件用于验证 torch.fx.experimental.proxy_tensor 相关 API,便于后续维护和扩展。

新增测试覆盖内容包括:

  1. 验证 make_fx 可正常生成 GraphModule
  2. 验证 make_fx 生成的 GraphModule 执行结果与原函数一致;
  3. 验证 get_proxy_mode 在 tracing 外返回 None
  4. 验证 get_proxy_modemake_fx tracing 过程中可获取到 proxy mode;
  5. 验证 handle_sym_dispatch 为可调用对象,并验证其依赖 proxy mode 的行为;
  6. 验证 maybe_enable_thunkify / maybe_disable_thunkify 可作为上下文管理器正常使用;
  7. 验证上述逻辑可在 make_fx tracing 中稳定执行。

上述 API 均属于 torch.fx.experimental.proxy_tensor Python 层 tracing / proxy tensor 相关接口,不涉及新增 NPU 算子实现,也不涉及 C++、Kernel 或底层算子逻辑修改。

本次适配方案如下:

  1. 对 API 进行 import 和签名检查,确认 API 在当前分支中已存在;
  2. 新增 test/fx/test_proxy_tensor_api.py 兼容性测试;
  3. 在测试文件开头补充英文说明,说明该文件用途和覆盖 API,降低后期维护成本;
  4. 新增 device_type 获取逻辑,并将测试中涉及的张量通过 .to(device_type) 迁移到当前 accelerator / NPU 侧运行;
  5. 测试 PR 分别提交至 v2.7.1v2.9.0v2.10.0v2.11.0v2.12.0master
  6. 文档 PR 按任务要求仅提交至 v2.7.1,并刷新该目录下已有版本的 API 支持状态。

四、NPU 适配说明

本次测试用例中涉及张量输入,因此测试张量需要运行在 NPU / 当前 accelerator 侧。

测试文件中使用如下方式获取当前 accelerator:

device_type = acc.type if (acc := torch.accelerator.current_accelerator()) else "cpu"

并通过如下方式将测试张量迁移到当前设备:

x = torch.randn(2, 3).to(device_type)
y = torch.randn(2, 3).to(device_type)

在 Torch-NPU 测试环境中,当前 accelerator 为 NPU,因此测试张量会通过 .to(device_type) 迁移到 NPU 侧运行,满足新增用例涉及张量需在 NPU 侧执行的要求。


五、本地验证与文档补充说明

本地验证命令如下:

python -u test/fx/test_proxy_tensor_api.py -v

本地验证结果如下:

test_get_proxy_mode_during_make_fx (__main__.TestProxyTensorAPI.test_get_proxy_mode_during_make_fx) ... ok
test_handle_sym_dispatch_requires_proxy_mode (__main__.TestProxyTensorAPI.test_handle_sym_dispatch_requires_proxy_mode) ... ok
test_make_fx_returns_graph_module (__main__.TestProxyTensorAPI.test_make_fx_returns_graph_module) ... ok
test_thunkify_context_managers (__main__.TestProxyTensorAPI.test_thunkify_context_managers) ... ok

----------------------------------------------------------------------
Ran 4 tests in 0.333s

OK

经检查,docs/zh/native_apis 中缺少本次任务相关 API 的支持状态记录,因此本次在 docs/zh/native_apis/pytorch_*/torch-fx.md 中补充如下 API:

|torch.fx.experimental.proxy_tensor.get_proxy_mode|是|-|
|torch.fx.experimental.proxy_tensor.handle_sym_dispatch|是|-|
|torch.fx.experimental.proxy_tensor.make_fx|是|-|
|torch.fx.experimental.proxy_tensor.maybe_disable_thunkify|是|-|
|torch.fx.experimental.proxy_tensor.maybe_enable_thunkify|是|-|

文档 PR 仅修改:

  • docs/zh/native_apis/pytorch_*/torch-fx.md

不涉及测试代码、功能代码、底层算子和客户可见接口修改。


六、当前状态

  • 测试 PR 已提交;
  • 文档 PR 已提交;
  • 已根据 review 意见补充测试文件开头说明;
  • 已根据 review 意见将测试中涉及的张量迁移到当前 accelerator / NPU 侧运行;
  • 本地验证通过;
  • 等待 CI 与老师审核。

请老师审核,谢谢。

likedislike
Nnwww
5月13日 关联了pull request:test(fx): add tests for proxy tensor api
nwww
5月16日 评论:

/intern-completed

likedislike
ascend-bot成员
5月16日 评论:

@nannan-2026 , 任务认领者才能提交此任务.

likedislike
棕
5月18日 评论:

/intern-approve

likedislike
ascend-bot成员
5月18日 评论:

@VnOcean , 用户已经放弃此任务, 请知晓, 谢谢!

likedislike
nwww
5月19日 评论:

/intern-completed

likedislike
ascend-bot成员
5月19日 评论:

@nannan-2026 , 任务认领者才能提交此任务.

likedislike
ascend-bot成员
5月19日 评论:

@nannan-2026 , 您已认领过当前任务, 无法再次认领.

likedislike
nwww
5月19日 评论:

/intern-assign

likedislike
ascend-bot成员
5月19日 评论:

@nannan-2026 , 您已认领过当前任务, 无法再次认领.

likedislike
棕
5月19日 评论:

/intern-approve

likedislike
ascend-bot成员
5月19日 评论:

@VnOcean , 用户已经放弃此任务, 请知晓, 谢谢!

likedislike
nwww
5月19日 评论:

/intern-cancel

likedislike
nwww
5月19日 评论:

/intern-assign

likedislike
ascend-bot成员
5月19日 评论:

@nannan-2026 , 您已认领过当前任务, 无法再次认领.

likedislike
ascend-bot成员
5月19日 评论:

@nannan-2026 , 您已认领过当前任务, 无法再次认领.

likedislike
ascend-bot成员
5月20日 评论:

@nannan-2026 , 您已认领过当前任务, 无法再次认领.

likedislike
ascend-bot成员
5月20日 评论:

@nannan-2026 , 任务认领者才能提交此任务.

likedislike
nwww
5月20日 评论:

/intern-approve

@VnOcean

老师,你好,请问这个能解决吗

likedislike
nwww
5月20日 评论:

/intern-assign

likedislike
ascend-bot成员
5月20日 评论:

@nannan-2026 , 感谢您认领此任务, 请及时跟导师沟通, 导师审核通过后才能承担此任务, 否则任务无效.

likedislike
棕
5月20日 评论:

/intern-approve

likedislike
ascend-bot成员
5月20日 评论:

@nannan-2026 , 恭喜您已成功领取该任务, 请及时处理任务. 认领任务>导师审核认领资格>处理任务>提交任务>导师审核>pr合入>获得积分.

likedislike
nwww
5月20日 评论:

/intern-completed

likedislike
ascend-bot成员
5月20日 评论:

@nannan-2026 , 请关注您提交的pr审核进度, 跟进相关负责人审核, pr合入后可获得积分. 注: 提交pr时, 请务必在pr描述里添加此issue编号(#issue编号), 谢谢!

likedislike
棕
5月22日 评论:

/intern-done

likedislike
Aascend-bot成员
5月22日 关闭了 issue
ascend-bot成员
5月22日 评论:

@nannan-2026 , 恭喜您提交的任务成果已通过导师审核, 已获得 50 积分, 谢谢您的参与.

likedislike
群青世界成员
7月10日 添加了label:event: api-consistency