| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
[master][Fix] Fix static check errors detected by CODESPELL Co-authored-by: thickhair<zp2165064878@163.com> # message auto-generated for no-merge-commit merge: !38552 merge code_spell_fix_master into master [master][Fix] Fix static check errors detected by CODESPELL Created-by: thickhair Commit-by: thickhair Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 https://gitcode.com/Ascend/pytorch/issues/1865 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!38552 | 3 个月前 | |
refactor: remove _add_ephemeral_timeout_for_all_pgs patch Co-authored-by: yt1525<yangting141@huawei.com> # message auto-generated for no-merge-commit merge: !44917 merge master into master refactor: remove _add_ephemeral_timeout_for_all_pgs patch Created-by: yt1525 Commit-by: yt1525 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [ ] issue/工单 - [x] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 1. **背景**:上游 PyTorch 已原生实现 _add_ephemeral_timeout_for_all_pgs(torch/distributed/distributed_c10d.py),其调用链为 ProcessGroup::addEphemeralTimeout → 遍历所有 backend 虚函数分派;不支持的 backend(gloo 等)默认空操作。torch_npu 的 ProcessGroupHCCL 已在 C++ 层实现 addEphemeralTimeout(torch_npu/csrc/distributed/ProcessGroupHCCL.cpp,累加 ephemeralTimeoutActive_ 并计入 assignTimeoutToWork 的 opTimeout_),因此该功能无需 torch_npu 侧 patch,直接使用上游实现即可在 NPU 生效。 2. 从 torch_npu/_init/patches/distributed_patches.py 的 _INTERNAL_REPLACEMENTS 中删除 distributed.distributed_c10d._add_ephemeral_timeout_for_all_pgs → distributed.distributed_c10d._hccl_add_ephemeral_timeout_for_all_pgs 替换项(低版本支持改由 compat 层按版本提供,见第 5 条)。 3. 删除 torch_npu/distributed/distributed_c10d.py::_hccl_add_ephemeral_timeout_for_all_pgs 函数及其不再使用的 timedelta 导入(实现内联至 torch_npu/_compat/distributed.py)。 4. 更新 test/test_torch_npu_init.py::test_07_distributed_patch_behavior:移除"patch 身份"断言(该断言验证被删除的 patch 存在)。 **测试策略**:新增 NPU UT(test/distributed/test_c10d_add_ephemeral_timeout.py),参考上游原生用例 test_c10d_nccl.py::ProcessGroupNCCLGroupTest::test_extend_nccl_pg_timeout 编写,核心语义(扩展生效)在 NPU 上实测;重置语义由上游测试在 NCCL 后端看护。测试通过 c10d._add_ephemeral_timeout_for_all_pgs 调用(与用户代码一致);低版本 torch(2.13、2026-08-04 前 nightly)由 compat 层保证 API 可用,测试照常执行。 5. 新增低版本兼容层(torch_npu/_compat/distributed.py,仿照现有 _mm_like_strategy 版本分支模式): - **版本判断**(CURRENT_VERSION >= (2, 14))+ **上游支持判断**(上游源码含 pg._add_ephemeral_timeout,即 backend-generic,2026-08-04 nightly 起); - 上游支持 NPU 时:直接 from torch.distributed.distributed_c10d import _add_ephemeral_timeout_for_all_pgs 复用上游实现; - 上游不支持时:将原 _hccl_add_ephemeral_timeout_for_all_pgs 函数体内联到 compat 层,**按上游接口名声明为 _add_ephemeral_timeout_for_all_pgs**(分支内懒加载 torch/dist_c10d/timedelta 等依赖); - 两种情况下均将实现**挂载回 torch.distributed.distributed_c10d 命名空间**(通用版赋值无变化;低版本覆盖 CUDA/NCCL-only 上游),__all__ 仅声明 _add_ephemeral_timeout_for_all_pgs; - torch_npu/_init/patches/distributed_patches.py 头部 import torch_npu._compat.distributed 确保随 torch_npu 初始化加载。 6. 测试适配(test/distributed/test_c10d_add_ephemeral_timeout.py、ephemeral_timeout_base.py): - API 调用保持 c10d._add_ephemeral_timeout_for_all_pgs(...)(低版本由 compat 提供实现,测试在 2.13 / 早期 2.14 / 当前 2.14 上均完整执行,无 skip); # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 **测试环境**:torch 2.14.0.dev20260809+cpu,CANN 9.1.0-beta.3,Ascend 910B2 **上游测试参考**(原生用例): test_c10d_nccl.py::ProcessGroupNCCLGroupTest::test_extend_nccl_pg_timeout 验证了 _add_ephemeral_timeout_for_all_pgs 的完整语义: - 临时超时扩展生效:_set_default_timeout(3s) 后调用 _add_ephemeral_timeout_for_all_pgs(10s),work.timeout 变为 13s(base + ephemeral); - 扩展被 watchdog 重置:再次调用 _add_ephemeral_timeout_for_all_pgs(5s) 并等待 watchdog 重置首个扩展后,work.timeout 变为 8s。 新增 NPU UT(test/distributed/test_c10d_add_ephemeral_timeout.py)按上述用例语义编写,并补充返回值/异常参数/gloo 忽略等维度覆盖。 **本地验证**(NPU 实测): > 测试运行方式:PYTHONPATH 指向源码树(master 分支,含本次修改),源码树内以软链复用 wheel 版编译产物(_C.so、lib/ 等,本改动为纯 Python 层,不影响 C++ 行为);验证加载路径为源码树且 patch 不存在后执行测试。 | 用例 | 结果 | |---|---| | test_c10d_add_ephemeral_timeout.py(新增,2 用例) | PASS(base 3s + 扩展 10s,挂起集合体存活 5.00s > base 3s;gloo 后端忽略调用返回 None) | | test_torch_npu_init.py::test_07_distributed_patch_behavior(已更新,验证 patch 不再替换上游函数) | PASS | | test_dist_all_reduce_int64(分布式回归) | PASS | | patch 消除前同一场景基线(对比验证) | 行为一致(挂起集合体同样存活 6.00s) | **CI 报错分析**: | 报错 | 是否本 PR 引起 | 处理 | |---|---|---| | test_c10d_add_ephemeral_timeout.py:扩展不生效,集合体 3000ms 超时(torch 2.14.0.dev20260719) | 是(上游 _add_ephemeral_timeout_for_all_pgs 的 backend-generic 化(pg._add_ephemeral_timeout,NPU 生效)于 **2026-08-04** nightly(#191980)才合入,该 nightly 之前实现仅支持 CUDA/NCCL,NPU 上 no-op) | 已通过 compat 层解决:低版本由 torch_npu._compat.distributed 提供 torch_npu 实现(挂载回 c10d 命名空间),测试照常执行(mock 验证通过),不再 skip | | test_distributed.py::test_DistributedDataParallel_SyncBatchNorm_2D_Input 超时 300s(torch 2.14.0.dev20260719) | 否(SyncBatchNorm 与本次改动功能无关;第二轮 CI 同用例通过(191.5s),确认属偶发超时/环境问题) | 无需改动 | **说明**: - 与上游测试的差异(NPU 限制):① 上游依赖 work.timeout 属性断言,torch_npu 的 WorkHCCL 不暴露该属性(NCCL 特有),改为行为验证(挂起集合体存活时长);② torch_npu 阻塞模式(HCCL_BLOCKING_WAIT=1)下 watchdog 线程不创建,扩展重置语义无法在 NPU 上验证——该语义由上游测试在 NCCL 后端看护,NPU 侧 C++ 实现(ProcessGroupHCCL::addEphemeralTimeout)为既有特性,本次仅移除 Python 层 patch 替换,不改变 NPU 行为。 **静态检查**:lintrunner(FLAKE8/CODESPELL/SPACES/TABS/IMPORT_LINTER/NEWLINE 等)对本次变更文件全部通过。 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!44917 | 16 天前 | |
add control of python GC before capture npugraph Co-authored-by: 周锐淇<zhouruiqi5@huawei.com> # message auto-generated for no-merge-commit merge: !27715 merge master into master add control of python GC before capture npugraph Created-by: rich9527 Commit-by: 周锐淇 Merged-by: ascend-robot Description: <!-- Thanks for sending a pull request! --> **What type of PR is this?** > /kind task **What does this PR do / why do we need it**: add control of python GC before capture npugraph **Which issue(s) this PR fixes**: <!-- *Automatically closes linked issue when PR is merged. Usage: Fixes #<issue number>, or Fixes (paste link of issue). --> Fixes # **Special notes for your reviewers**: See merge request: Ascend/pytorch!27715 | 9 个月前 | |
fix(inductor): default FlexAttention backward kernel options Co-authored-by: Stonexx<sheny1xuan@163.com> # message auto-generated for no-merge-commit merge: !46010 merge issue100 into master fix(inductor): default FlexAttention backward kernel options Created-by: stonexxx Commit-by: Stonexx Merged-by: ascend-robot Description: # 【合入来源】 - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 Fixes https://gitcode.com/Ascend/pytorch/issues/4683 # 【修改方案】 FlexAttention 的公开 API 会通过 _apply_kernel_options 补齐 backward kernel options,但直接调用 torch.ops.higher_order.flex_attention_backward 时可能传入空字典,从而绕过该处理。 NPU mask-out backward lowering 在 Jinja 模板渲染阶段会读取 PRESCALE_QK。此时 Triton constexpr 参数尚未物化,缺失该选项会触发 jinja2.exceptions.UndefinedError。同时,公开 API 中定义的 WRITE_DQ 默认值也未在该 lowering 中补齐。 本修改: 1. 在 NPU FlexAttention backward lowering 进入模板路由前补齐: - PRESCALE_QK=False - WRITE_DQ=True 2. 使用 setdefault 保留调用方显式传入的配置。 3. 增加回归测试,验证注册的 backward lowering 能为缺失选项补齐默认值。 # 【资料变更】 不涉及。 # 【接口变更】 不涉及公开接口变更,仅补齐内部 lowering 的默认参数。调用方显式设置的 kernel options 仍具有优先级。 # 【功能验证】 本地测试: bash python3 -m pytest -q \ test/_inductor/test_flex_attention_dynamic_mask_out.py \ test/_inductor/test_flex_attention_dynamic_mask_metadata.py 结果:6 passed, 2 skipped bash python3 -m py_compile \ torch_npu/_inductor/kernel/flex_attention.py \ test/_inductor/test_flex_attention_dynamic_mask_out.py git diff --check mainline/master...HEAD 结果:均通过。 Torch 2.13 + torch_npu 2.13 nightly 环境运行目标用例: bash pytest -vs \ test_flex_attention213.py::TestFlexAttentionPRIVATEUSE1::test_direct_backward_preserves_explicit_buffers_npu 结果:1 passed, 20 warnings in 151.71s 生成的 output_code.py 中确认物化参数为: python PRESCALE_QK: tl.constexpr = False WRITE_DQ: tl.constexpr = True 环境依赖检查:uv pip check 通过,36 个包兼容。 # 【CheckList】 - [x] 代码注释完备,正确记录错误日志(本修改不新增错误分支) - [x] 代码实现进行了返回值、空指针等校验(本修改不涉及新的输入或指针处理) - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!46010 | 16 天前 | |
refactor: remove _add_ephemeral_timeout_for_all_pgs patch Co-authored-by: yt1525<yangting141@huawei.com> # message auto-generated for no-merge-commit merge: !44917 merge master into master refactor: remove _add_ephemeral_timeout_for_all_pgs patch Created-by: yt1525 Commit-by: yt1525 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [ ] issue/工单 - [x] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 1. **背景**:上游 PyTorch 已原生实现 _add_ephemeral_timeout_for_all_pgs(torch/distributed/distributed_c10d.py),其调用链为 ProcessGroup::addEphemeralTimeout → 遍历所有 backend 虚函数分派;不支持的 backend(gloo 等)默认空操作。torch_npu 的 ProcessGroupHCCL 已在 C++ 层实现 addEphemeralTimeout(torch_npu/csrc/distributed/ProcessGroupHCCL.cpp,累加 ephemeralTimeoutActive_ 并计入 assignTimeoutToWork 的 opTimeout_),因此该功能无需 torch_npu 侧 patch,直接使用上游实现即可在 NPU 生效。 2. 从 torch_npu/_init/patches/distributed_patches.py 的 _INTERNAL_REPLACEMENTS 中删除 distributed.distributed_c10d._add_ephemeral_timeout_for_all_pgs → distributed.distributed_c10d._hccl_add_ephemeral_timeout_for_all_pgs 替换项(低版本支持改由 compat 层按版本提供,见第 5 条)。 3. 删除 torch_npu/distributed/distributed_c10d.py::_hccl_add_ephemeral_timeout_for_all_pgs 函数及其不再使用的 timedelta 导入(实现内联至 torch_npu/_compat/distributed.py)。 4. 更新 test/test_torch_npu_init.py::test_07_distributed_patch_behavior:移除"patch 身份"断言(该断言验证被删除的 patch 存在)。 **测试策略**:新增 NPU UT(test/distributed/test_c10d_add_ephemeral_timeout.py),参考上游原生用例 test_c10d_nccl.py::ProcessGroupNCCLGroupTest::test_extend_nccl_pg_timeout 编写,核心语义(扩展生效)在 NPU 上实测;重置语义由上游测试在 NCCL 后端看护。测试通过 c10d._add_ephemeral_timeout_for_all_pgs 调用(与用户代码一致);低版本 torch(2.13、2026-08-04 前 nightly)由 compat 层保证 API 可用,测试照常执行。 5. 新增低版本兼容层(torch_npu/_compat/distributed.py,仿照现有 _mm_like_strategy 版本分支模式): - **版本判断**(CURRENT_VERSION >= (2, 14))+ **上游支持判断**(上游源码含 pg._add_ephemeral_timeout,即 backend-generic,2026-08-04 nightly 起); - 上游支持 NPU 时:直接 from torch.distributed.distributed_c10d import _add_ephemeral_timeout_for_all_pgs 复用上游实现; - 上游不支持时:将原 _hccl_add_ephemeral_timeout_for_all_pgs 函数体内联到 compat 层,**按上游接口名声明为 _add_ephemeral_timeout_for_all_pgs**(分支内懒加载 torch/dist_c10d/timedelta 等依赖); - 两种情况下均将实现**挂载回 torch.distributed.distributed_c10d 命名空间**(通用版赋值无变化;低版本覆盖 CUDA/NCCL-only 上游),__all__ 仅声明 _add_ephemeral_timeout_for_all_pgs; - torch_npu/_init/patches/distributed_patches.py 头部 import torch_npu._compat.distributed 确保随 torch_npu 初始化加载。 6. 测试适配(test/distributed/test_c10d_add_ephemeral_timeout.py、ephemeral_timeout_base.py): - API 调用保持 c10d._add_ephemeral_timeout_for_all_pgs(...)(低版本由 compat 提供实现,测试在 2.13 / 早期 2.14 / 当前 2.14 上均完整执行,无 skip); # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 **测试环境**:torch 2.14.0.dev20260809+cpu,CANN 9.1.0-beta.3,Ascend 910B2 **上游测试参考**(原生用例): test_c10d_nccl.py::ProcessGroupNCCLGroupTest::test_extend_nccl_pg_timeout 验证了 _add_ephemeral_timeout_for_all_pgs 的完整语义: - 临时超时扩展生效:_set_default_timeout(3s) 后调用 _add_ephemeral_timeout_for_all_pgs(10s),work.timeout 变为 13s(base + ephemeral); - 扩展被 watchdog 重置:再次调用 _add_ephemeral_timeout_for_all_pgs(5s) 并等待 watchdog 重置首个扩展后,work.timeout 变为 8s。 新增 NPU UT(test/distributed/test_c10d_add_ephemeral_timeout.py)按上述用例语义编写,并补充返回值/异常参数/gloo 忽略等维度覆盖。 **本地验证**(NPU 实测): > 测试运行方式:PYTHONPATH 指向源码树(master 分支,含本次修改),源码树内以软链复用 wheel 版编译产物(_C.so、lib/ 等,本改动为纯 Python 层,不影响 C++ 行为);验证加载路径为源码树且 patch 不存在后执行测试。 | 用例 | 结果 | |---|---| | test_c10d_add_ephemeral_timeout.py(新增,2 用例) | PASS(base 3s + 扩展 10s,挂起集合体存活 5.00s > base 3s;gloo 后端忽略调用返回 None) | | test_torch_npu_init.py::test_07_distributed_patch_behavior(已更新,验证 patch 不再替换上游函数) | PASS | | test_dist_all_reduce_int64(分布式回归) | PASS | | patch 消除前同一场景基线(对比验证) | 行为一致(挂起集合体同样存活 6.00s) | **CI 报错分析**: | 报错 | 是否本 PR 引起 | 处理 | |---|---|---| | test_c10d_add_ephemeral_timeout.py:扩展不生效,集合体 3000ms 超时(torch 2.14.0.dev20260719) | 是(上游 _add_ephemeral_timeout_for_all_pgs 的 backend-generic 化(pg._add_ephemeral_timeout,NPU 生效)于 **2026-08-04** nightly(#191980)才合入,该 nightly 之前实现仅支持 CUDA/NCCL,NPU 上 no-op) | 已通过 compat 层解决:低版本由 torch_npu._compat.distributed 提供 torch_npu 实现(挂载回 c10d 命名空间),测试照常执行(mock 验证通过),不再 skip | | test_distributed.py::test_DistributedDataParallel_SyncBatchNorm_2D_Input 超时 300s(torch 2.14.0.dev20260719) | 否(SyncBatchNorm 与本次改动功能无关;第二轮 CI 同用例通过(191.5s),确认属偶发超时/环境问题) | 无需改动 | **说明**: - 与上游测试的差异(NPU 限制):① 上游依赖 work.timeout 属性断言,torch_npu 的 WorkHCCL 不暴露该属性(NCCL 特有),改为行为验证(挂起集合体存活时长);② torch_npu 阻塞模式(HCCL_BLOCKING_WAIT=1)下 watchdog 线程不创建,扩展重置语义无法在 NPU 上验证——该语义由上游测试在 NCCL 后端看护,NPU 侧 C++ 实现(ProcessGroupHCCL::addEphemeralTimeout)为既有特性,本次仅移除 Python 层 patch 替换,不改变 NPU 行为。 **静态检查**:lintrunner(FLAKE8/CODESPELL/SPACES/TABS/IMPORT_LINTER/NEWLINE 等)对本次变更文件全部通过。 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!44917 | 16 天前 | |
feat: [graph partition] aclgraph support graph partition Co-authored-by: luochao60<luochao60@huawei.com> # message auto-generated for no-merge-commit merge: !35324 merge pta_support_graph_partition_20260414_master into master feat: [graph partition] aclgraph support graph partition Created-by: luochao60 Commit-by: luochao60 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > (如有)请关联需求文档/issue链接 > 关联 issue: #1911 (https://gitcode.com/Ascend/pytorch/issues/1911) - [x] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 1. ** torch_npu/utils/_graph_tree.py — 新增 get_manager monkey-patch** 上游 torch._inductor.output_code.maybe_handle_backward_generation 和 torch._dynamo.backends.cudagraphs 会直接调用 torch._inductor.cudagraph_trees.get_manager,依赖它返回真实的 manager 实例来推进 backward 的 cudagraph 状态机。NPU 把自己的 NPUGraphTreeManager 注册在独立 registry(torch_npu.npu._graph_tree),导致上游那两条路径在 NPU 设备上拿不到 manager,触发 AssertionError 或 AttributeError。在 _apply_npugraph_tree_methods() 末尾把 torch._inductor.cudagraph_trees.get_manager 重指到 NPU 的 get_manager(签名一致、duck-typing 兼容),打通 backward 状态机闭环。 2. **torch_npu/_inductor/codegen/wrapper.py — wrapper 体系重构以支持 graph partition** 提取 _NPUKernelCodegenMixin 混入类,把 NPU 特化逻辑(define_kernel 中 user_autotune → user_autotune_npu、PrecomputedGrid → PrecomputedGridNpu、FixedGrid → FixedGridNpu 替换;get_next_kernel_suffix、make_buffer_free 等)从原 NPUWrapperCodeGen 上移;新增 NPUSubgraphWrapperCodegen(_NPUKernelCodegenMixin, SubgraphPythonWrapperCodegen) 让 subgraph wrapper 共享 NPU 适配;NPUWrapperCodeGen.create() 在 is_subgraph=True 时返回新的 subgraph wrapper。 3. **torch_npu/_inductor/lowering_op_list.py — graph partition 所需算子注册** GENERATE_LIST 新增 prims.device_put、aten.unbind、torch.ops.higher_order.cond。 4. **torch_npu/csrc/core/npu/NPUHooksInterface.{h,cpp} — Pinned memory 接口实现** override 上游 at::PrivateUse1HooksInterface 新增的虚函数:isPinnedPtr() 走 CachingHostAllocator_isPinned,getPinnedMemoryAllocator() 返回 getPinnedMemoryAllocator()。同时新增 CachingHostAllocator.h 包含。 5. **test/_inductor/test_inductor_graph_partition.py — graph partition 测试集** 新增 graph partition 场景的系列用例:dynamic shapes、condition op、custom op 拆分、subgraph wrapper user_autotune 兜底、forward cudagraph + backward fallback 等。 # 【资料变更】 不涉及 # 【接口变更】 不涉及。C++ 层 NPUHooksInterface::isPinnedPtr 和 getPinnedMemoryAllocator 是对上游 PrivateUse1HooksInterface 已有虚函数的 override 实现,非新增对外 API。 # 【功能验证】 在 test/_inductor/test_inductor_graph_partition.py 中新增覆盖 graph partition 场景的用例: - test_graph_partition_dynamic_shapes:动态 shape 下产生 3 个 npugraph - test_graph_partition_condition_op:cond / higher-order op 切图 - test_graph_partition_custom_op:cudagraph_unsafe 自定义算子切分边界 - test_graph_partition_subgraph_wrapper_user_autotune:子图 wrapper 的 user_autotune 替换路径 - forward cudagraph + backward fallback 的混合路径 通过 python test/_inductor/test_inductor_graph_partition.py 在 NPU 设备上跑通全部用例。 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!35324 | 4 个月前 | |
master fix ut bug Co-authored-by: l00881990<lixinyu68@huawei.com> # message auto-generated for no-merge-commit merge: !45812 merge master-ut-bug-fix into master master fix ut bug Created-by: l1919_snow Commit-by: l00881990 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [x] 问题单 https://gitcode.com/Ascend/pytorch/issues/4498 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 新增校验,和资料保持一致 # 【资料变更】 “不涉及” # 【接口变更】 “不涉及” # 【功能验证】  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!45812 | 17 天前 | |
fix: patch set_autocast_enabled and set_autocast_dtype for npu in transfer_to_npu Co-authored-by: louyujing<louyujing@huawei.com> # message auto-generated for no-merge-commit merge: !45860 merge fix/autocast-setter-master into master fix: patch set_autocast_enabled and set_autocast_dtype for npu in transfer_to_npu Created-by: louyujing Commit-by: louyujing Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> https://gitcode.com/Ascend/pytorch/issues/4528 # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【根因分析】 torch_npu/contrib/transfer_to_npu.py 新增的 is_autocast_enabled patch 将 torch.is_autocast_enabled 改为把 "cuda" 重写成 "npu"(读接口),但对应的写接口 torch.set_autocast_enabled / torch.set_autocast_dtype 未同步改写,导致 getter/setter 语义不对称。 Dynamo 在追踪时通过 save_global_state() 记录全局 autocast 状态(torch/_dynamo/output_graph.py): - getter:torch.is_autocast_enabled("cuda") 被 patch 后实际读取的是 **NPU** 的 autocast 状态; - setter:functools.partial(torch.set_autocast_enabled, "cuda") 未 patch,仍旧写 **CUDA** autocast 状态。 在 fallback_random + autocast 打开的场景下,追踪过程发生子图编译,触发 restore_global_state(),把 getter 读到的值(True)经由 setter 写回 CUDA autocast 开关,导致 CUDA autocast 状态在追踪期间被改变,C++ 的 GlobalStateGuard 校验失败,抛出上述断言错误。dtype 侧(get/set_autocast_dtype)存在同样的不对称问题。 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 对称地补上写接口的 cuda→npu 改写,与读接口保持一致: python torch.set_autocast_enabled = _wrapper_cuda(torch.set_autocast_enabled) torch.set_autocast_dtype = _wrapper_cuda(torch.set_autocast_dtype) 这样 getter/setter 统一把 "cuda" 重写为 "npu",restore 时仅对 NPU 状态做无副作用写回,CUDA autocast 状态保持不变,GlobalStateGuard 校验即可通过。 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 - 修复前:pytest -v test_aot_inductor.py::AOTInductorTestABICompatibleGpu::test_amp_fallback_random_npu 失败; - 修复后:同用例 1 passed。 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!45860 | 16 天前 | |
fix: prevent partial device limit from leak when NPU_DEVICE_LIMIT is malformed Co-authored-by: xiu_21<caixiuxiu1@huawei.com> # message auto-generated for no-merge-commit merge: !45819 merge device_limit_fix into master fix: prevent partial device limit from leak when NPU_DEVICE_LIMIT is malformed Created-by: xiu_21 Commit-by: xiu_21 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 NPU_DEVICE_LIMIT在前一个值为正常数字时,例如"8,abc",第一个set的device不会对算子核数进行配置,但是会对后续的device配置cube_core_num为8,从而导致配置不一致。 修改获取环境变量时,两个数值都为正常范围内的数字时才更新cube_core_num和vector_core_num,保证全局一致。 # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 pytest test_torch_npu.py -k test_set_device_res_limit_from_env_partial_invalid -vv 修改前:  修改后:  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!45819 | 17 天前 | |
refactor: remove _add_ephemeral_timeout_for_all_pgs patch Co-authored-by: yt1525<yangting141@huawei.com> # message auto-generated for no-merge-commit merge: !44917 merge master into master refactor: remove _add_ephemeral_timeout_for_all_pgs patch Created-by: yt1525 Commit-by: yt1525 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [ ] issue/工单 - [x] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 1. **背景**:上游 PyTorch 已原生实现 _add_ephemeral_timeout_for_all_pgs(torch/distributed/distributed_c10d.py),其调用链为 ProcessGroup::addEphemeralTimeout → 遍历所有 backend 虚函数分派;不支持的 backend(gloo 等)默认空操作。torch_npu 的 ProcessGroupHCCL 已在 C++ 层实现 addEphemeralTimeout(torch_npu/csrc/distributed/ProcessGroupHCCL.cpp,累加 ephemeralTimeoutActive_ 并计入 assignTimeoutToWork 的 opTimeout_),因此该功能无需 torch_npu 侧 patch,直接使用上游实现即可在 NPU 生效。 2. 从 torch_npu/_init/patches/distributed_patches.py 的 _INTERNAL_REPLACEMENTS 中删除 distributed.distributed_c10d._add_ephemeral_timeout_for_all_pgs → distributed.distributed_c10d._hccl_add_ephemeral_timeout_for_all_pgs 替换项(低版本支持改由 compat 层按版本提供,见第 5 条)。 3. 删除 torch_npu/distributed/distributed_c10d.py::_hccl_add_ephemeral_timeout_for_all_pgs 函数及其不再使用的 timedelta 导入(实现内联至 torch_npu/_compat/distributed.py)。 4. 更新 test/test_torch_npu_init.py::test_07_distributed_patch_behavior:移除"patch 身份"断言(该断言验证被删除的 patch 存在)。 **测试策略**:新增 NPU UT(test/distributed/test_c10d_add_ephemeral_timeout.py),参考上游原生用例 test_c10d_nccl.py::ProcessGroupNCCLGroupTest::test_extend_nccl_pg_timeout 编写,核心语义(扩展生效)在 NPU 上实测;重置语义由上游测试在 NCCL 后端看护。测试通过 c10d._add_ephemeral_timeout_for_all_pgs 调用(与用户代码一致);低版本 torch(2.13、2026-08-04 前 nightly)由 compat 层保证 API 可用,测试照常执行。 5. 新增低版本兼容层(torch_npu/_compat/distributed.py,仿照现有 _mm_like_strategy 版本分支模式): - **版本判断**(CURRENT_VERSION >= (2, 14))+ **上游支持判断**(上游源码含 pg._add_ephemeral_timeout,即 backend-generic,2026-08-04 nightly 起); - 上游支持 NPU 时:直接 from torch.distributed.distributed_c10d import _add_ephemeral_timeout_for_all_pgs 复用上游实现; - 上游不支持时:将原 _hccl_add_ephemeral_timeout_for_all_pgs 函数体内联到 compat 层,**按上游接口名声明为 _add_ephemeral_timeout_for_all_pgs**(分支内懒加载 torch/dist_c10d/timedelta 等依赖); - 两种情况下均将实现**挂载回 torch.distributed.distributed_c10d 命名空间**(通用版赋值无变化;低版本覆盖 CUDA/NCCL-only 上游),__all__ 仅声明 _add_ephemeral_timeout_for_all_pgs; - torch_npu/_init/patches/distributed_patches.py 头部 import torch_npu._compat.distributed 确保随 torch_npu 初始化加载。 6. 测试适配(test/distributed/test_c10d_add_ephemeral_timeout.py、ephemeral_timeout_base.py): - API 调用保持 c10d._add_ephemeral_timeout_for_all_pgs(...)(低版本由 compat 提供实现,测试在 2.13 / 早期 2.14 / 当前 2.14 上均完整执行,无 skip); # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 **测试环境**:torch 2.14.0.dev20260809+cpu,CANN 9.1.0-beta.3,Ascend 910B2 **上游测试参考**(原生用例): test_c10d_nccl.py::ProcessGroupNCCLGroupTest::test_extend_nccl_pg_timeout 验证了 _add_ephemeral_timeout_for_all_pgs 的完整语义: - 临时超时扩展生效:_set_default_timeout(3s) 后调用 _add_ephemeral_timeout_for_all_pgs(10s),work.timeout 变为 13s(base + ephemeral); - 扩展被 watchdog 重置:再次调用 _add_ephemeral_timeout_for_all_pgs(5s) 并等待 watchdog 重置首个扩展后,work.timeout 变为 8s。 新增 NPU UT(test/distributed/test_c10d_add_ephemeral_timeout.py)按上述用例语义编写,并补充返回值/异常参数/gloo 忽略等维度覆盖。 **本地验证**(NPU 实测): > 测试运行方式:PYTHONPATH 指向源码树(master 分支,含本次修改),源码树内以软链复用 wheel 版编译产物(_C.so、lib/ 等,本改动为纯 Python 层,不影响 C++ 行为);验证加载路径为源码树且 patch 不存在后执行测试。 | 用例 | 结果 | |---|---| | test_c10d_add_ephemeral_timeout.py(新增,2 用例) | PASS(base 3s + 扩展 10s,挂起集合体存活 5.00s > base 3s;gloo 后端忽略调用返回 None) | | test_torch_npu_init.py::test_07_distributed_patch_behavior(已更新,验证 patch 不再替换上游函数) | PASS | | test_dist_all_reduce_int64(分布式回归) | PASS | | patch 消除前同一场景基线(对比验证) | 行为一致(挂起集合体同样存活 6.00s) | **CI 报错分析**: | 报错 | 是否本 PR 引起 | 处理 | |---|---|---| | test_c10d_add_ephemeral_timeout.py:扩展不生效,集合体 3000ms 超时(torch 2.14.0.dev20260719) | 是(上游 _add_ephemeral_timeout_for_all_pgs 的 backend-generic 化(pg._add_ephemeral_timeout,NPU 生效)于 **2026-08-04** nightly(#191980)才合入,该 nightly 之前实现仅支持 CUDA/NCCL,NPU 上 no-op) | 已通过 compat 层解决:低版本由 torch_npu._compat.distributed 提供 torch_npu 实现(挂载回 c10d 命名空间),测试照常执行(mock 验证通过),不再 skip | | test_distributed.py::test_DistributedDataParallel_SyncBatchNorm_2D_Input 超时 300s(torch 2.14.0.dev20260719) | 否(SyncBatchNorm 与本次改动功能无关;第二轮 CI 同用例通过(191.5s),确认属偶发超时/环境问题) | 无需改动 | **说明**: - 与上游测试的差异(NPU 限制):① 上游依赖 work.timeout 属性断言,torch_npu 的 WorkHCCL 不暴露该属性(NCCL 特有),改为行为验证(挂起集合体存活时长);② torch_npu 阻塞模式(HCCL_BLOCKING_WAIT=1)下 watchdog 线程不创建,扩展重置语义无法在 NPU 上验证——该语义由上游测试在 NCCL 后端看护,NPU 侧 C++ 实现(ProcessGroupHCCL::addEphemeralTimeout)为既有特性,本次仅移除 Python 层 patch 替换,不改变 NPU 行为。 **静态检查**:lintrunner(FLAKE8/CODESPELL/SPACES/TABS/IMPORT_LINTER/NEWLINE 等)对本次变更文件全部通过。 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!44917 | 16 天前 | |
[refactor]dynamo: 接入上游 _dynamo_backend_init,删除 optimize monkey-patch Co-authored-by: pianyl<pianyaolong@huawei.com> # message auto-generated for no-merge-commit merge: !44586 merge npu_add_backend_init into master [refactor]dynamo: 接入上游 _dynamo_backend_init,删除 optimize monkey-patch Created-by: pianyl Commit-by: pianyl Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [x] 重构优化 - [ ] 资料更新 关联issue:https://gitcode.com/Ascend/pytorch/issues/3634 # 【修改方案】 - 上游 torch PR #192345(落 main commit pytorch/pytorch@9286a168)为 dynamo 后端新增 _dynamo_backend_init 协议:get_compiler_fn() 解析后端后、首次图捕获前触发;每次 resolution 均生效(含 fullgraph=True、force_backend、compiled_autograd 重建),要求后端幂等。首个包含该协议的版本为 torch 2.15。 - torch_npu 双轨接入,两个触发器在同一 torch 版本上互斥,版本差异收敛到 compat 层(新文件 torch_npu/_compat/dynamo.py): - torch_npu/_compat/dynamo.py(新增):版本隔离层,承载 _npu_backend_init()(幂等,_get_global_npu_backend 自带缓存)与两个门控入口:compat_attach_dynamo_backend_init()(>= 2.15 挂载 hook)与 compat_patch_dynamo_optimize()(< 2.15 装 optimize 包装器,带防重复保护)。版本门为模块内联 (2, 15)(release/2.14 不含该协议,main 在合入前已 bump 2.15.0a0),按仓库规范带 COMPAT(>= 2.15) 标记。 - torch_npu/dynamo/__init__.py:_register_backends 调用 compat 挂载。hook 仅在 torch >= 2.15 且 torchair 可用时挂到 _lazy_exec 与 _npu_backend_entrypoint 两个解析形态;< 2.15 完全不挂(互斥语义),eager fallback 亦不挂。 - torch_npu/utils/_dynamo.py:删除原 patch_dynamo_optimize(移入 compat 层),_lazy_dynamo_setup() 改调 compat_patch_dynamo_optimize()。torch < 2.15 monkey-patch 兜底行为不变;>= 2.15 no-op,由 hook 接管。 - test/dynamo/test_compile_trigger.py:inventory 断言按版本分支;新增 test_npu_backend_init_fires_before_first_call(fake torchair,双版本运行,分别看护 patch(< 2.15)与 hook(>= 2.15)路径,断言一致保证语义等价)与 test_npu_backend_eager_init_with_real_torchair(真实 torchair 端到端看护编译期初始化与运行正确性)。 - torch >= 2.15 相比 monkey-patch 的增强:直接调用 optimize_assert 的路径(export 类场景)、force_backend、compiled_autograd 重建路径均获得编译期 eager 初始化。 - 升配套 torch 2.15 后可另行清理:删除 patch 兜底与版本分支(compat 层已标 CAN REMOVE when MIN_SUPPORTED >= (2, 15))。 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 UT测试通过 + 对比效果等价测试通过  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!44586 | 16 天前 | |
[Fix] Fix static check errors detected by SPACES Co-authored-by: huangjingwei<huangjingwei4@huawei.com> # message auto-generated for no-merge-commit merge: !35981 merge master_lintrunner into master [Fix] Fix static check errors detected by SPACES Created-by: huangjingwei Commit-by: huangjingwei Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 检测和删除代码中的行尾空白字符 # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 不涉及 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!35981 | 4 个月前 | |
compat(v2.13) : Update master to upstream 0610, adapt the upstream to remove NamedTensor. Co-authored-by: chz34<chenhaozhe1@huawei.com> # message auto-generated for no-merge-commit merge: !39675 merge compat/master into master compat(v2.13) : Update master to upstream 0610, adapt the upstream to remove NamedTensor. Created-by: c_34 Commit-by: chz34 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [x] 问题单 https://gitcode.com/ascend/pytorch/issues/2325 - [ ] issue/工单 - [x] 重构优化 https://gitcode.com/Ascend/pytorch/issues/2569 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) PyTorch 2.13 removed named-tensor support entirely (at::Dimname, at::DimnameList, the at::namedinference namespace and the header ATen/NamedTensorUtils.h). Remove all corresponding interface. # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!39675 | 2 个月前 | |
fix:修复is_available开销过大 Co-authored-by: Jessedhd<denghaodong3@huawei.com> # message auto-generated for no-merge-commit merge: !45540 merge master into master fix:修复is_available开销过大 Created-by: Jessedhd Commit-by: Jessedhd Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**关联issue: https://gitcode.com/Ascend/pytorch/issues/4452**</font>\ - [x] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 原 is_available() 默认调用 device_count(),在 NPU 未初始化时会重复执行 HAL 探测,导致频繁调用开销较大。优化后默认调用带缓存的 _npu_getDeviceCount(),并新增与 CUDA 侧PYTORCH_NVML_BASED_CUDA_CHECK 对齐的 PYTORCH_HAL_BASED_NPU_CHECK 环境变量,用于保留原 HAL 检查路径。 # 【资料变更】 > 不涉及 # 【接口变更】 > 不涉及 # 【功能验证】 > 测试结果 >UT测试: > > > 性能测试: >  > > 性能测试结果 >  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!45540 | 21 天前 | |
[onnx] fix group_norm_silu and rotary_mul onnx api. Co-authored-by: shi-jiaxin9<shijiaxin10@h-partners.com> # message auto-generated for no-merge-commit merge: !31954 merge master into master [onnx] fix group_norm_silu and rotary_mul onnx api. Created-by: shi-jiaxin9 Commit-by: shi-jiaxin9 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 问题单 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!31954 | 6 个月前 | |
[optim] Add distributed Muon optimizer support for Ascend NPU Co-authored-by: guoqi1024<guoqi5@huawei.com> # message auto-generated for no-merge-commit merge: !38393 merge feature/distributed-muon-optimizer into master [optim] Add distributed Muon optimizer support for Ascend NPU Created-by: guoqi1024 Commit-by: guoqi1024 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 https://gitcode.com/Ascend/pytorch/issues/2403 - [x] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!38393 | 2 个月前 | |
refactor(profiler): 非侵入式动态 Profiler Optimizer Step Hook 私有 Patch 消除 Co-authored-by: wxb<w.noneck.1024@gmail.com> # message auto-generated for no-merge-commit merge: !44890 merge refactor/remove-pta_profiler_hook into master refactor(profiler): 非侵入式动态 Profiler Optimizer Step Hook 私有 Patch 消除 Created-by: No_neck Commit-by: No_neck;wxb Merged-by: ascend-robot Description: <!-- PR 描述与 2026-08-28 最新代码对齐。 --> # 【合入来源】 > <font color="red">**https://gitcode.com/Ascend/pytorch/issues/4189**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [x] 重构优化 - [ ] 资料更新 # 【修改说明】 ## 背景 torch_npu/profiler/_non_intrusive_profile.py 原实现通过替换 PyTorch 私有方法 torch.optim.Optimizer._patch_step_function 或历史版本的 _hook_for_profile,进一步包装 optimizer.__class__.step,在 Optimizer step 正常返回后调用动态 Profiler 的 dp_step()。 旧实现还使用 OPTIMIZER_ID 只跟踪最后创建或最后 patch 的 Optimizer。该选择规则 没有训练 iteration 语义:如果最后创建的是低频辅助 Optimizer,Profiler 会推进过慢, 使一个采集 step 跨越多次主 Optimizer 更新。 主要问题: 1. 依赖 PT 私有 API,升级兼容风险高; 2. PTA 在 PT wrapper 外再次修改 Optimizer 类方法,影响同类全部实例; 3. step_hooked、OPTIMIZER_ID 和构造顺序形成脆弱的隐式状态; 4. 非等频多 Optimizer 场景会少计,采集边界异常扩大; 5. 旧接入方式没有使用 PT 已提供的公共 Optimizer hook。 ## 修改方案 本 PR 保留 PTA 非侵入式动态 Profiling 能力和原有启动方式,只替换 Optimizer 事件接入 机制: ~~~text PROF_CONFIG_PATH / MSMONITOR_USE_DAEMON / KINETO_USE_DAEMON -> 原有配置检查 -> dp_init(prof_config_path) -> _register_optimizer_step_hook() -> register_optimizer_step_post_hook(callback) optimizer.step() 正常返回 -> PT instance post-hooks -> PT global post-hooks -> PTA _optimizer_step_post_hook(optimizer, args, kwargs) -> local_step[optimizer] += 1 -> local_step > profiler_step 时调用 dp_step() -> profiler_step = local_step ~~~ 聚合语义为: ~~~text profiler_step = max historical successful_step_count observed ~~~ 一次 callback 只增加一个 Optimizer 的局部计数,因此直接比较更新后的局部值与缓存的 历史全局最大值即可,不需要每次执行 max(values()),热路径为 O(1)。弱字典删除已经 释放的 Optimizer 后,缓存的历史全局值不会回退。 ## 代码修改及原因 ### 1. 删除 PT 私有方法依赖 删除: ~~~python _origin_patch_step_function Optimizer._patch_step_function = ... Optimizer._hook_for_profile = ... ~~~ 原因:上述符号是 PT 私有实现,不提供兼容承诺。当前2.13、2.14、2.15目标版本已经 提供公共 global Optimizer post-hook。 ### 2. 删除 PTA 类级 step wrapper 删除: ~~~text step_wrapper patch_step_function step_hooked check_last_optimizer OPTIMIZER_ID ~~~ 原因: - 不再二次替换 optimizer.__class__.step; - 不影响同类 Optimizer 的其他实例; - 不再依赖 Optimizer 创建顺序; - 不再需要维护重复包装标志; - 消除旧非等频场景只跟踪最后一个 Optimizer的问题。 ### 3. 使用 PT 公共 global post-hook 新增: ~~~python from torch.optim.optimizer import Optimizer, register_optimizer_step_post_hook ~~~ 并通过: ~~~python register_optimizer_step_post_hook(cls._optimizer_step_post_hook) ~~~ 注册回调。 选择 global hook 的原因: - 非侵入式 Profiler 不要求用户逐个修改 Optimizer; - 能覆盖注册前和注册后创建的 Optimizer; - PT 负责 Optimizer step 的 hook 分发; - PTA 不再接管 PT 私有构造/反序列化入口。 选择 post-hook 而不是 pre-hook 的原因: - 与旧实现“原始 step 成功后再调用 dp_step()”的顺序一致; - optimizer.step() 抛异常时 PT 不执行 post-hook; - 不会把失败的参数更新计为有效 Profiler step; - PT instance post-hook 仍先于 PTA global post-hook。 ### 4. 在已有类中保存最小聚合状态 新增: ~~~python _optimizer_step_hook_handle = None _optimizer_steps = WeakKeyDictionary() _profiler_step = 0 ~~~ 各字段作用: | 字段 | 作用 | |---|---| | _optimizer_step_hook_handle | 判断是否已注册,防止重复 callback | | _optimizer_steps | 保存每个 Optimizer 的成功 step 次数 | | _profiler_step | 保存已经推进的最大 step | 没有新增独立 tracker 类,避免引入当前生产调用链不需要的 requester API、reset API 和 额外生命周期。 WeakKeyDictionary 不强引用 Optimizer。Optimizer 被释放后,对应记录可自动删除, 避免普通 dict 延长参数和 Optimizer 状态的生命周期。 ### 5. 新增 O(1) post-hook callback ~~~python @classmethod def _optimizer_step_post_hook( cls, optimizer: Optimizer, _args: tuple, _kwargs: dict, ) -> None: step = cls._optimizer_steps.get(optimizer, 0) + 1 cls._optimizer_steps[optimizer] = step if step > cls._profiler_step: dp_step() cls._profiler_step = step ~~~ 逐行说明: - get(optimizer, 0) + 1:为触发 callback 的 Optimizer 增加局部成功 step; - 写回弱字典:保存该 Optimizer 的后续计数起点; - step > _profiler_step:判断是否出现新的最大进度; - dp_step():只在全局进度增加时推进动态 Profiler; - 成功后更新 _profiler_step:不把失败的 dp_step() 标记为已推进。 callback 必须接受 optimizer, args, kwargs,这是 PT 公共 API 契约。不能直接注册 dp_step,因为 dp_step() 不接受该签名,也无法识别和聚合多个 Optimizer。 ### 6. 新增幂等注册 ~~~python @classmethod def _register_optimizer_step_hook(cls) -> None: if cls._optimizer_step_hook_handle is not None: return cls._optimizer_steps.clear() cls._profiler_step = 0 cls._optimizer_step_hook_handle = register_optimizer_step_post_hook( cls._optimizer_step_post_hook ) ~~~ 逐行说明: - handle 非空时返回:重复 init() 不重复注册; - 注册前清空弱字典:新注册生命周期不继承旧对象状态; - 全局 step 置0:与新初始化的动态 Profiler 对齐; - 保存 PT 返回的 handle:作为注册状态,并保留底层 removable 能力。 最新生产代码不增加 unregister 方法。动态 Profiling 一旦启用,hook 在进程内持续 存在;测试直接使用 handle 清理,不为测试增加生产 API。 ### 7. 保留原有启动条件 没有新增环境变量或配置文件字段。继续使用: ~~~text PROF_CONFIG_PATH MSMONITOR_USE_DAEMON KINETO_USE_DAEMON ~~~ 未启用动态 Profiling 时,init() 在 dp_init() 和 hook 注册前返回,因此默认训练 没有新增 callback 或 WeakKeyDictionary 热路径。 启用后先调用: ~~~python dp_init(prof_config_path) ~~~ 再注册 hook,避免 callback 在动态 Profiler 尚未初始化时调用 dp_step()。 本 PR 不增加 TORCH_NPU_PROFILER_STEP_MODE,不增加 optimizer/manual 分支,不修改 配置 schema。 ### 8. 删除 Python 3.8 Dynolog 死分支 最新代码删除 import sys 以及 Dynolog 的 Python <3.8 判断,直接在 daemon 模式设置 DYNO_CONFIG。 当前2.13~2.15目标兼容线支持的 Python 均高于3.8,该判断在受支持环境中不可达。此项 是独立死代码清理,同时避免原提示行的 F541 风险;不改变支持范围内行为。 # 【行为变化】 ## 正常场景 | 场景 | Optimizer event | 修改前典型 dp_step() | 修改后 dp_step() | |---|---:|---:|---:| | 单 Optimizer,18轮 | 18 | 18 | 18 | | 同步双 Optimizer,各18次 | 36 | 取决于最后 ID,通常18 | 18 | | 主18次、低频辅助6次且辅助最后创建 | 24 | 6 | 18 | ## 已知边界 per-optimizer max 是有约束的进度聚合,不是通用 training iteration 检测器: | 场景 | Optimizer event | 修改后 dp_step() | 说明 | |---|---:|---:|---| | 完全交替9+9 | 18 | 9 | 两个局部计数的最大值为9 | | 运行中替换9+9 | 18 | 9 | 新 Optimizer 从0开始追赶 | | 同一 Optimizer 每轮 step 两次 | 2次/轮 | 2次/轮 | 按 Optimizer event 而不是 iteration | 当前 PR 不引入 manual 模式或训练循环 callback。上述行为作为已知限制写入 RFC 和测试 结论,不宣称支持任意训练拓扑。 梯度累计按真实 optimizer.step() 计数:多次 backward 后只调用一次 optimizer.step(),只推进一次;grad 全为 None 但 step 正常返回时,仍按一个 Optimizer event 计数。 # 【接口与资料变更】 ## Python API 不新增或修改用户可见 Python API。 ## 环境变量和配置文件 不新增环境变量,不修改动态 Profiler 配置文件 schema。 保留原有: - PROF_CONFIG_PATH; - MSMONITOR_USE_DAEMON; - 兼容的 KINETO_USE_DAEMON。 ## 兼容性 不再为缺少公共 global post-hook 的历史 PT 版本回退到私有 API。公共 hook 契约已经在 PT/PTA 2.13、2.14、2.15真实 NPU 环境验证。 PT main 仅用于核对公共机制的当前实现;PT main 比 PTA 目标兼容线更新,兼容结论以 三版本真实环境为准。 ## 资料 已同步更新 RFC,明确: - 私有 patch 到公共 hook 的迁移; - 原有环境变量保持不变; - O(1) per-optimizer max 公式; - 多 Optimizer 正常语义与交替/替换边界; - Trace 范围不等于训练吞吐; - 最新精简实现没有独立 tracker 类、step mode 和生产 unregister。 # 【功能验证】 ## 1. 单元与契约测试 当前测试覆盖15项: 1. 重复注册幂等; 2. 异类同步双 Optimizer; 3. 同类同步双 Optimizer; 4. 非等频主辅 Optimizer; 5. 单 Optimizer 连续 step; 6. 注册前创建的 Optimizer; 7. 注册后创建的 Optimizer; 8. 无 grad 正常 step; 9. 梯度累计; 10. step 抛异常时不推进; 11. instance post-hook 先于 global post-hook; 12. disabled 时不初始化、不注册; 13. MSMonitor 入口; 14. KINETO 兼容入口与弃用提示; 15. 配置路径校验、初始化和注册。 测试清理直接移除 handle 并清空类状态,没有新增仅供测试使用的生产方法。 ## 2. Ascend 910B2 三版本验证 | 兼容线 | PyTorch | TorchNPU | 公共 hook 契约 | 真实 active Trace | |---|---|---|---|---| | 2.13 | 2.13.0a0+gitfad7424 | 2.13.0+git45fbeae | 通过 | 通过 | | 2.14 | 2.14.0a0+git69231fe | 2.14.0+gitee7bc39 | 通过 | 通过 | | 2.15 | 2.15.0.dev20260812 | 2.15.0+git56986bb | 通过 | 通过 | 场景结果: | 场景 | Optimizer 更新 | dp_step() | iteration 对齐 | |---|---:|---:|---| | single | 18 | 18 | 是 | | sync dual | 36 | 18 | 是 | | uneven 18+6 | 24 | 18 | 是 | | alternating 9+9 | 18 | 9 | 否,已知边界 | | replacement 9+9 | 18 | 9 | 否,已知边界 | 每个场景均生成非空 trace_view.json。 有效 run-id: - compact_active_2_13_20260827_r2; - compact_active_2_14_20260827_r1; - compact_active_2_15_20260827_r1。 2.13首轮与2.15并发使用 host IPC 和相同 rank=-1,发生动态 Profiler 共享状态冲突; 串行重跑通过。该首轮结果不作为代码失败。 NPU 矩阵候选源码 SHA256: ~~~text b0e0387e2ae80b729e3d12e46ed6e3ac78a1345fc694e3853bfed81ff855b076 ~~~ 该快照与最新目标代码的 Optimizer hook 热路径一致,但仍保留受支持环境不可达的 Python 3.8判断。删除该死分支后需要至少补跑最终源码的 lint 和 UT;若合入门槛要求 最终 SHA 的 NPU 可追溯性,再补一轮 smoke run。 ## 3. 性能验证 默认未启用动态 Profiling 时不注册 hook,因此没有新增 callback 开销。 2.15 master 配对完整训练结果: | 场景 | 旧 OPTIMIZER_ID | 修改后 O(1) max | 差值 | |---|---:|---:|---:| | 单 Optimizer,counter-only | 0.640% | 1.007% | +0.367个百分点 | | 同步双 Optimizer,counter-only | 0.732% | 0.833% | +0.101个百分点 | | 单 Optimizer,真实 inactive dp_step() | 9.238% | 9.291% | +0.053个百分点 | | 同步双 Optimizer,真实 inactive dp_step() | 5.159% | 5.127% | -0.032个百分点 | 结论: - tracker-only 完整训练开销约1%; - 加入真实空闲态 dp_step() 后修改前后差异很小; - 旧实现非等频场景调用更少来自少计,不构成有效性能优势; - Trace 中 Operator、Kernel 或时间窗口变化表示采集范围变化,不直接表示吞吐变化; - 删除 Python 3.8死分支后的最终 SHA 尚未重跑完整性能矩阵。 # 【风险说明】 1. 当前算法不支持从任意 Optimizer 序列恢复真实 training iteration; 2. 完全交替、动态替换和同一 Optimizer 一轮多次 step 是明确边界; 3. 当前状态无锁,不声明支持多线程并发 optimizer.step(); 4. 生产代码不提供 hook 注销/重装生命周期; 5. 外部若自行移除保存的 handle,类字段仍非空,不能自动重新注册; 6. 极短 Optimizer step 会放大 WeakKeyDictionary 的相对开销; 7. PT main 的实现细节不能代替目标兼容线验证。 # 【CheckList】 ## 代码 - [x] 删除 PTA 对 _patch_step_function 的赋值 - [x] 删除 PTA 对 _hook_for_profile 的赋值 - [x] 删除类级 optimizer.__class__.step 包装 - [x] 删除 step_wrapper、step_hooked 和 OPTIMIZER_ID - [x] 使用公共 register_optimizer_step_post_hook() - [x] 使用 WeakKeyDictionary,不强引用 Optimizer - [x] max 聚合热路径为 O(1) - [x] 注册幂等 - [x] disabled 时不注册 hook - [x] 不新增用户环境变量或配置 schema - [x] 不新增独立 tracker 类 - [x] 不新增仅供测试的生产接口 - [x] 删除 Python 3.8 Dynolog 死分支 ## 验证 - [x] 单 Optimizer - [x] 同类和异类同步双 Optimizer - [x] 非等频主辅 Optimizer - [x] 注册前/后创建 Optimizer - [x] 梯度累计和无 grad step - [x] step 异常不推进 - [x] instance/global hook 顺序 - [x] 三个原有启用入口 - [x] PT/PTA 2.13、2.14、2.15真实 NPU active Trace - [x] 交替与替换边界已验证并记录 - [x] O(1) 热路径性能已有配对数据 - [ ] 删除 Python 3.8死分支后的最终源码 lint/UT - [ ] 若合入要求最终 SHA 性能门槛,补跑最终源码配对性能 # 【结论】 本 PR 保留 PTA 非侵入式动态 Profiling 功能,消除 PTA 对 PT 私有 Optimizer 方法和 类级 step() 的 monkey-patch。 修改后只在原有环境变量真正启用动态 Profiling 时注册 PT 公共 global post-hook; 通过已有 _NonIntrusiveProfile 中的最小弱引用状态,以 O(1) per-optimizer max 语义推进 dp_step()。默认训练不增加 callback,同步多 Optimizer和非等频主辅场景 不再依赖最后创建的 Optimizer。 方案不新增用户配置,也不声称解决任意训练循环 iteration 识别。交替、动态替换和同一 Optimizer 多次更新作为明确边界保留。 See merge request: Ascend/pytorch!44890 | 22 天前 | |
compat(2.14): default requirements to 2.14 nightly and fix related tests Co-authored-by: chz34<chenhaozhe1@huawei.com> # message auto-generated for no-merge-commit merge: !41741 merge compat/2.14 into master compat(2.14): default requirements to 2.14 nightly and fix related tests Created-by: c_34 Commit-by: chz34 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 https://gitcode.com/Ascend/pytorch/issues/2258 https://gitcode.com/Ascend/pytorch/issues/2890 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 1. 上游新增接口,暴露的路径与实际module不一致,实际来自_C库,添加测试白名单,与上游添加的白名单保持一致。 2. 上游新增接口,依赖额外三方库与cuda库,test_public_binding.py中增加相关过滤 3. 上游 Backedn.register_backend.__func__新增参数,修改对应patch函数,增加**kwargs,缺省忽略,同时保持与之前版本的接口兼容 4. 上游cudagraphify调用时新增额外参数kernel_free_cudagraph, user_visible_output_idxs,下游npugraphify跟随新增,函数内不处理 5. 新增requirements_2_13.txt的配置,默认配置升级到2.14 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 跟随上游变更,不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 跟随上游变更,不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 跟随上游变更,基于现有测试用例进行验证 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!41741 | 1 个月前 | |
[refactor]dynamo: 接入上游 _dynamo_backend_init,删除 optimize monkey-patch Co-authored-by: pianyl<pianyaolong@huawei.com> # message auto-generated for no-merge-commit merge: !44586 merge npu_add_backend_init into master [refactor]dynamo: 接入上游 _dynamo_backend_init,删除 optimize monkey-patch Created-by: pianyl Commit-by: pianyl Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [x] 重构优化 - [ ] 资料更新 关联issue:https://gitcode.com/Ascend/pytorch/issues/3634 # 【修改方案】 - 上游 torch PR #192345(落 main commit pytorch/pytorch@9286a168)为 dynamo 后端新增 _dynamo_backend_init 协议:get_compiler_fn() 解析后端后、首次图捕获前触发;每次 resolution 均生效(含 fullgraph=True、force_backend、compiled_autograd 重建),要求后端幂等。首个包含该协议的版本为 torch 2.15。 - torch_npu 双轨接入,两个触发器在同一 torch 版本上互斥,版本差异收敛到 compat 层(新文件 torch_npu/_compat/dynamo.py): - torch_npu/_compat/dynamo.py(新增):版本隔离层,承载 _npu_backend_init()(幂等,_get_global_npu_backend 自带缓存)与两个门控入口:compat_attach_dynamo_backend_init()(>= 2.15 挂载 hook)与 compat_patch_dynamo_optimize()(< 2.15 装 optimize 包装器,带防重复保护)。版本门为模块内联 (2, 15)(release/2.14 不含该协议,main 在合入前已 bump 2.15.0a0),按仓库规范带 COMPAT(>= 2.15) 标记。 - torch_npu/dynamo/__init__.py:_register_backends 调用 compat 挂载。hook 仅在 torch >= 2.15 且 torchair 可用时挂到 _lazy_exec 与 _npu_backend_entrypoint 两个解析形态;< 2.15 完全不挂(互斥语义),eager fallback 亦不挂。 - torch_npu/utils/_dynamo.py:删除原 patch_dynamo_optimize(移入 compat 层),_lazy_dynamo_setup() 改调 compat_patch_dynamo_optimize()。torch < 2.15 monkey-patch 兜底行为不变;>= 2.15 no-op,由 hook 接管。 - test/dynamo/test_compile_trigger.py:inventory 断言按版本分支;新增 test_npu_backend_init_fires_before_first_call(fake torchair,双版本运行,分别看护 patch(< 2.15)与 hook(>= 2.15)路径,断言一致保证语义等价)与 test_npu_backend_eager_init_with_real_torchair(真实 torchair 端到端看护编译期初始化与运行正确性)。 - torch >= 2.15 相比 monkey-patch 的增强:直接调用 optimize_assert 的路径(export 类场景)、force_backend、compiled_autograd 重建路径均获得编译期 eager 初始化。 - 升配套 torch 2.15 后可另行清理:删除 patch 兜底与版本分支(compat 层已标 CAN REMOVE when MIN_SUPPORTED >= (2, 15))。 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 UT测试通过 + 对比效果等价测试通过  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!44586 | 16 天前 | |
[sync] PR-39678: revert: detect Ascend950 SoC for TORCH_NPU_USE_COMPATIBLE_IMPL default Co-authored-by: wuyouqi1<wuyouqi1@h-partners.com> # message auto-generated for no-merge-commit merge: !39703 merge sync-pr39678-revert/compat-impl-socname-routing-26.1.0-to-master into master [sync] PR-39678: revert: detect Ascend950 SoC for TORCH_NPU_USE_COMPATIBLE_IMPL default Created-by: ascend-ds-bot Commit-by: wuyouqi1 Merged-by: ascend-robot Description: ### 1. Origin pull request: https://gitcode.com/Ascend/pytorch/merge_requests/39678 ### 2. Original pull request related issue(s): https://gitcode.com/Ascend/pytorch/issues/2561 ### 3. Original pull request related commit(s): | Sha | Datetime | Message | |---|---|---| |[8539c290](https://gitcode.com/Ascend/pytorch/commit/8539c290bd0035b66335b3e92ac28540de8c2805)|2026-06-30 21:08:41 +0800 CST|Revert "feat: detect Ascend950 SoC for TORCH_NPU_USE_COMPATIBLE_IMPL default"<br><br>This reverts commit acebf35339791ea6fcac6f116acdb242a1c09096.<br><br>Removes the _is_ascend950() SoC auto-detection and the SoC-based default-value assignment for TORCH_NPU_USE_COMPATIBLE_IMPL in torch_npu/__init__.py, and drops test_compatible_impl_soc_detect.py.<br><br>Co-Authored-By: Claude <noreply@anthropic.com><br>| See merge request: Ascend/pytorch!39703 | 2 个月前 | |
| 1 年前 | ||
| 1 年前 |