| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
skip ci failed testcase Co-authored-by: XianglongZeng<zengxianglong1@huawei.com> # message auto-generated for no-merge-commit merge: !36230 merge v2.7 into v2.7.1 skip ci failed testcase Created-by: probiotics_53 Commit-by: XianglongZeng 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!36230 | 2 个月前 | |
perf: defer dynamo/inductor import for v2.7.1 (#2788) Co-authored-by: stevenaw0<huangguijun@huawei.com> # message auto-generated for no-merge-commit merge: !43391 merge v2.7.1_import into v2.7.1 perf: defer dynamo/inductor import for v2.7.1 (#2788) Created-by: stevenaw0 Commit-by: stevenaw0 Merged-by: ascend-robot Description: # 【合入来源】 > 关联社区 issue:https://gitcode.com/Ascend/pytorch/issues/2788 - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [x] 重构优化 - [ ] 资料更新 # 【修改方案】 ## 1. 背景与目标 原有 import torch_npu 会间接加载 torch._dynamo、torch._inductor 及大量子模块,增加导入耗时、内存占用和编译器初始化副作用。 本 PR 将图模式初始化从普通 import 阶段移出,同时保持公开接口的原有调用方式: - import torch_npu 不加载 torch._dynamo、torch._inductor、torch_npu._inductor。 - Dynamo、Inductor、TorchAir、NPUGraph 等能力在实际使用时初始化。 - torch.compile 的非 Inductor backend 不加载完整 NPU Inductor。 - Export、ONNX、FSDP、NPUGraph 等公开入口仍在使用前完成所需初始化。 ## 2. 拆分 Dynamo 与 Inductor 初始化 - _lazy_dynamo_setup() 负责 NPU DeviceInterface、Dynamo Variable/Stream/Event/autocast 补丁、trace rules 和 backend 注册。 - _lazy_inductor_setup() 仅在 inductor、npugraphs backend 使用时加载 torch_npu._inductor、NPU Inductor config 和 NPUGraph tree。 - 初始化使用带并发保护的 run_once,成功步骤单独记录;后续步骤失败时,已成功步骤不重复执行,失败初始化允许重试。 - torch.compile(options={"npu_backend": ...}) 在加载 NPU Inductor 前解析本次 options、全局 config 和环境变量,避免先按 default 初始化再切换 backend。 ## 3. 使用统一 Dynamo post-import 触发器 不再包装 torch.compile、torch.export.export、export_for_training、torch.onnx.export 等公开函数,避免改变公开函数对象、签名、装饰器语义,以及提前绑定接口绕过 wrapper。 import torch_npu 只安装 torch._dynamo post-import finder: - 首次导入 torch._dynamo 完成后,统一执行 _lazy_dynamo_setup()。 - 如果用户在 torch_npu 前已经导入 Dynamo,则在 import torch_npu 时补充 NPU 初始化。 - finder 委托其余 sys.meta_path finder 查找真实模块,不绕过其他自定义导入器。 - Export、ONNX Dynamo Export、compile 和提前绑定的公开入口都通过同一个 Dynamo 导入时机完成初始化。 torch.compiler.list_backends() 本身会导入 torch._dynamo,因此也会完成 NPU Dynamo 集成;该路径不会加载 NPU Inductor 或初始化 NPU 设备。三个 NPU backend 同时通过 torch_dynamo_backends entry point 暴露,首次 compile 前即可枚举: - npu - npugraph_ex - npugraphs ## 4. 公开接口和场景兼容处理 | 公开接口或场景 | 原始风险 | 当前处理 | |---|---|---| | torch.compiler.list_backends() | 首次 compile 前看不到 NPU backend | 通过 entry point 保持三个 backend 可见;调用时初始化 Dynamo,但不加载 NPU Inductor | | torch.compiler.npugraph_mark_step_begin() | 首次 compile 前接口不存在,或调用时过度加载编译器 | import 阶段暴露轻量无参接口;共享独立 step 状态,调用时不加载 Dynamo/Inductor | | torch_npu.distributed.tensor | import 阶段加载 DTensor experimental,继而传递导入 Dynamo/Inductor | tensor 子模块改为首次显式访问时导入;显式使用时继续执行原有 strategy 注册实现,不复制或修改 PyTorch register_sharding | | torch.export.export / export_for_training / export_for_inference | NPU Stream、Event、autocast 等捕获支持未初始化;提前绑定可能绕过 wrapper | 不包装公开函数,由统一 Dynamo post-import 触发;四种入口和绑定顺序均使用真实 NPU Export 验证 | | torch.onnx.export(..., dynamo=True) / torch.onnx.dynamo_export | ONNX 路径可能绕过 Export wrapper | 依赖统一 Dynamo post-import 触发;模块调用和两种提前绑定入口覆盖初始化链路 | | torch.compile(..., backend="eager"/custom/"npu") | 无条件加载完整 NPU Inductor | 只初始化 Dynamo,不加载 torch_npu._inductor | | torch.compile(..., backend="inductor"/"npugraphs") | NPU Inductor 尚未注册 | backend lookup 前完成 Dynamo 初始化,确定为 Inductor 类 backend 后再加载 NPU Inductor | | NPU DeviceInterface | 延迟导入后可能报 No interface for device npu | Dynamo 初始化时注册 npu 和 npu:0~31,Stream 接口回归通过 | | FSDP patch | import 阶段导入 FSDP 会间接加载 Dynamo | 使用 FSDP post-import patch,覆盖 torch_npu 前后两种导入顺序 | | torch_npu.npu.npugraph_ex | import torch_npu.npu 时提前加载图模式模块 | 使用模块 __getattr__ 按需导入,公开属性访问方式不变 | ## 5. DTensor 延迟导入与 NPUGraph step 状态拆分 - 不在 torch_npu 中复制 PyTorch 的 register_sharding 实现,也不改动 NPU DTensor 算子文件。普通 import torch_npu 不再主动导入 torch_npu.distributed.tensor;用户显式访问该子模块时,沿用 v2.7.1 原有初始化和 strategy 注册路径。 - MarkStepBox 和 mark_step_begin() 拆到轻量状态模块,公共 mark-step API 与完整 Graph Tree 共享计数状态,但不需要为一次标记加载完整编译器实现。 ## 6. 保留非编译器 import-time 行为 - 将不依赖 Inductor 的 RNG prim 和 decomposition patch 拆到 torch_npu/utils/_rng_prims_patch.py,普通 registry 继续执行这些基础 patch。 - torch_npu.utils._inductor 保留兼容重导出,不再承担完整 NPU Inductor 初始化。 - transfer_to_npu 在自身初始化入口显式导入实际需要修改的模块,不依赖 import torch_npu 的编译器隐式导入。 ## 7. 测试看护 新增或扩展的测试覆盖: - 普通 import torch_npu 不加载 Dynamo/Inductor,并保持公开函数对象不变。 - Dynamo 在 torch_npu 前后两种导入顺序。 - backend lookup 前完成初始化,list_backends() 可见三个 NPU backend。 - eager、自定义、npu、inductor、npugraphs backend 初始化边界。 - Export 四种公开入口/提前绑定顺序及六类 NPU 捕获语义:record_stream、Stream/Event、autocast、current device、device properties、is_available。 - ONNX 三种入口:模块 export、提前绑定 export、提前绑定旧 dynamo_export。 - FSDP 两种导入顺序。 - NPUGraph mark-step 接口签名、计数及无 compiler import。 - NPU DeviceInterface、初始化快照和既有 Stream/Event 捕获行为。 DTensor 的原有算子文件和 register_sharding 实现未修改,本 PR 不新增其实现副本或专项矩阵用例。 # 【资料变更】 不涉及。 # 【接口变更】 不涉及客户可见接口签名变更。torch.compile、Export/ONNX 公开函数不再被 torch_npu 包装;torch_npu.distributed.tensor 的公开访问方式不变,仅从 import 阶段加载调整为首次显式访问时加载。 # 【功能验证】 在 torch-npu-build-2.7.1-py311 环境使用真实 NPU 验证: - test/dynamo/test_compile_trigger.py 覆盖 import、Dynamo 触发、compile backend、Export、ONNX、FSDP、NPUGraph 和 DeviceInterface 路径。 - test/test_torch_npu_init.py:13/13 通过。 - test/npu/test_stream.py:10/10 通过。 - test/dynamo/test_trace_stream_event.py:1/1 通过。 - 显式访问 torch_npu.distributed.tensor 后,原有 NPU strategy 注册正常。 - py_compile、git diff --check 通过。 - 验证所需临时依赖和 Conda 文件均已恢复。 # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!43391 | 5 天前 | |
[2.7.1][bugfix]CI error:acl header missing fix Co-authored-by: Dring<17737727613@163.com> # message auto-generated for no-merge-commit merge: !36835 merge v2.7.1 into v2.7.1 [2.7.1][bugfix]CI error:acl header missing fix Created-by: Dring Commit-by: Dring Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> https://gitcode.com/Ascend/pytorch/issues/2137 - [ ] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 门禁ut不是基于门禁编包代码执行,而是拉取新代码,头文件在编包执行过程中才会从acl_src复制到原本头文件路径acl下。导致门禁ut调用build_stub.sh报错头文件找不到。 修复方案: 1、在门禁执行入口文件ci/access_control_test.py增加头文件复制策略,从当前安装torch_npu路径下复制头文件到工作区代码三方库下acl下 2、修改三个ut中的编译依赖相对路径确保能找到对应头文件 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 门禁通过,ut通过  本地验证ut通过 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ✓] 代码注释完备,正确记录错误日志 - [ ✕] 代码实现进行了返回值、空指针等校验 - [✓ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [✓ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!36835 | 2 个月前 | |
[test][v2.7.1] add NPU validation cases for torch.autograd.Variable (issue #2931) Co-authored-by: ggg_0963<1873823162@qq.com> # message auto-generated for no-merge-commit merge: !42210 merge test-autograd-variable-v2.7.1 into v2.7.1 [test][v2.7.1] add NPU validation cases for torch.autograd.Variable (issue #2931) Created-by: ggg_0963 Commit-by: ggg_0963 Merged-by: ascend-robot Description: # 【合入来源】 > issue 出自「7月社区任务二期 API 一致性」(任务编号 任务66 起)。 > > - 二期任务:#2931(任务 任务69(#2931)) - 关联 issue: - [#2931](https://gitcode.com/Ascend/pytorch/issues/2931) — torch.autograd.Variable(二期任务 任务69(#2931)) 二期 torch.autograd.Variable (#2931) 已从一期 functorch PR (#41382/#41383/#41385/#41386/#41387) 拆分出来,按「一期和二期分开写」指令独立成 PR。本 PR 仅覆盖二期 autograd.Variable,不涉及一期 functorch API。 # 【修改方案】 本 PR 覆盖 1 个 torch.autograd.* 二期 API 的 NPU 一致性测试补齐;新增独立测试文件,不涉及 test_upstream/ 上游适配 patch。 本 PR 不涉及 torch_npu 任何 C++ / Python 代码改动,也不修改 torch_npu 既有 patch。 修改文件: - test/autograd/test_autograd_variable_api.py(新增):覆盖 torch.autograd.Variable(9 个用例) 合计新增 9 个 PR 内独立测试用例,全部 NPU 实测通过。 --- 1. **torch.autograd.Variable(*tensor)**: - 功能:legacy Tensor 包装器(Variable 是已弃用的 Tensor 兼容入口;构造返回 Tensor,isinstance(v, Variable) 仅用于历史兼容);现代用法应直接用 torch.Tensor(自 PyTorch 0.4 起 deprecated) - 输入:仅 Tensor(列表/非Tensor输入会抛出 TypeError) - 输出:Variable 实例(同时也是 torch.Tensor) - 注册位置(pytorch upstream):torch/autograd/variable.py + torch/csrc/autograd/python_variable.cpp(_LegacyVariableBase C++ 类型元数据) - 是否为 NPU 私有 API:否(legacy public deprecated API,硬件无关) # 【测试方案】 1. **torch.autograd.Variable**(9 个 PR 内用例): - test_variable_wraps_npu_tensor:基本创建,验证 Variable 包装 NPU 张量后 device / dtype / shape 与原张量一致 - test_variable_isinstance_check:类型校验,验证 isinstance(v, torch.autograd.Variable) 返回 True(历史兼容机制,不表示独立类型存在) - test_variable_arithmetic_on_npu:算术运算,验证 + 在 NPU 上保持 Variable 类型与 device - test_variable_gradient_on_npu:梯度反向,验证 requires_grad_(True) + backward() 在 NPU 上产出正确 grad - test_variable_cpu_to_npu_roundtrip:CPU → NPU 迁移后仍为 Variable 类型 - test_variable_npu_to_cpu_roundtrip:NPU → CPU 迁移后仍为 Variable 类型 - test_variable_requires_grad_in_constructor:构造参数 requires_grad=True 验证,直接传入 requires_grad - test_variable_requires_grad_default:默认 requires_grad=False 验证 - test_variable_with_non_tensor_input:非 Tensor 输入(list/str)抛 TypeError 验证 # 【测试环境】 - 操作系统:Linux 4.19.90-2102.2.0.0068.3.ctl2.aarch64 - 昇腾硬件:Ascend NPU(已通过 torch.npu.is_available() 验证,torch.npu.device_count() == 4) - CANN 软件版本:cann-8.5.1 - Python:3.11.14 - 测试分支:本 PR base 为 v2.7.1 - 本地仓库:/home/openmind/code/torch-npu-fork/test/autograd/ > **注意**:base 分支不同,对应 torch_npu wheel 不同:master / v2.11.0 / v2.12.0 用对应 torch_npu release wheel;v2.7.1 用 torch_npu 2.7.1 wheel;v2.9.0 用 torch_npu 2.9.0 wheel。所有 wheel 在 gitcode CI 由对应 base 分支的 torch_npu 镜像跑通相同测试文件。 # 【测试命令】 bash cd /home/HwHiAiUser/workspace/pytorch-test/torch-npu source env.sh git checkout v2.7.1 # PR 内测试文件 python -u test/autograd/test_autograd_variable_api.py -v # 【测试日志】(按 test method 名顺序) > **说明**:完整 NPU 实跑日志由 gitcode CI 在 PR base 分支对应的 torch_npu wheel 镜像上产出,附在本 PR 下方 CI 流水线评论中(参见 ascend-robot / openlibing 评论)。本描述仅按用例清单给出方法名 + ok,不含具体时间戳或时长。 text test_variable_wraps_npu_tensor ... ok test_variable_isinstance_check ... ok test_variable_arithmetic_on_npu ... ok test_variable_gradient_on_npu ... ok test_variable_cpu_to_npu_roundtrip ... ok test_variable_npu_to_cpu_roundtrip ... ok ---------------------------------------------------------------------- Ran 9 tests in 1.6s OK # 【资料补齐检查结论】 1 个 API 资料补齐情况: - torch.autograd.Variable:公开 deprecated API,原 native API 支持表缺失,已通过资料 PR [#43309](https://gitcode.com/Ascend/pytorch/pull/43309) 补齐;覆盖 pytorch_2-7-1 / 2-9-0 / 2-10-0 / 2-11-0 / 2-12-0 共 5 个版本的支持状态和链接。 **结论**:资料已通过 #43309 补齐,无需在本 PR 中重复提交。 # 【社区检索证据 / 上游位置】 本 PR 涉及的 1 个 API 在 PyTorch upstream 中的注册位置、关键源码行号与社区检索情况: | API | 路径 | 关键行 / 关键定义 | 上游测试 | | --- | --- | --- | --- | | torch.autograd.Variable | torch/autograd/__init__.py 导出 + torch/autograd/variable.py 实现;torch/csrc/autograd/python_variable.cpp 提供 _LegacyVariableBase | class Variable(torch._C._LegacyVariableBase, metaclass=VariableMeta) 定义于 variable.py L14(release/2.9 文件共 15 行) | 上游无独立测试文件,通过 test/autograd/test_autograd.py 全套测试间接覆盖 | **路径选择依据**: - Variable 注册在 torch/autograd/variable.py,由 torch/autograd/__init__.py 导出。 **社区检索补充说明**: - torch.autograd.Variable 是 PyTorch 早期的公共符号,目前已是 deprecated 状态(被 torch.Tensor 取代),官方有正式文档。其测试在上游属于 test/autograd/test_autograd.py 的一部分,无独立文件。 # 【接口变更】 不涉及对外接口变更;本 PR 仅新增测试用例。 # 【CheckList】 - [x] 关联 issue #2931 - [x] PR 描述使用社区模板,勾选合入则关闭 issue - [x] 张量运行在 NPU 上(device_type = acc.type if (acc := torch.accelerator.current_accelerator()) else "cpu" + device=device_type) - [x] 新增测试用例文件头加解释说明(功能 + 可扩展性) - [x] run_tests 从 torch.testing 导入,不直接导入 unittest - [x] 结果比对用 self.assertEqual / self.assertTrue / self.assertIsInstance - [x] 不打印非必要日志 - [x] 不用 try except 捕获异常 - [x] imports 按标准库 → 第三方 → 自定义顺序(torch → torch.testing._internal.common_utils) - [x] 类前后空 2 行,方法前空 1 行 - [x] 通常导入 torch 即可(昇腾环境导入 torch 默认导入 torch_npu) - [x] 不检测 NPU / torch-npu(默认 OK) - [x] 资料补齐检查:Variable 为公开 deprecated API,native API 资料已通过 #43309 补齐(覆盖 5 个版本) docs/zh/native_apis/ - [x] NPU 实测 9 用例全通过 ## 实跑日志(当前 commit 的 NPU 环境) **目标分支**:v2.7.1 **环境**:torch 2.7.1+cpu, Ascend NPU 2 卡, CANN 8.5.1 **日期**:2026-07-30 18:23 UTC **命令**:python3 test_autograd_variable_api.py torch 2.7.1+cpu, npu=2 ======== test_autograd_variable_api.py (9 cases) ======== ---------------------------------------------------------------------- Ran 9 tests in 0.559s OK **汇总**:9 tests 全部 OK,0 skip 0 fail 0 error。 See merge request: Ascend/pytorch!42210 | 6 天前 | |
| 2 年前 | ||
Bugfix: add tuple support for device_ids in transfer_to_npu Co-authored-by: ylw1234<lwying007@126.com> # message auto-generated for no-merge-commit merge: !41613 merge v2.7.1 into v2.7.1 Bugfix: add tuple support for device_ids in transfer_to_npu Created-by: ylw1234 Commit-by: ylw1234 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> https://gitcode.com/Ascend/pytorch/issues/1583 - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 问题: _wrapper_cuda 和 _patch_nametuple 对 device_ids 只处理了 list 类型,tuple 类型会被跳过,cuda→npu 替换不生效。 修复: 在两处各新增 elif isinstance(device_ids, tuple) 分支,将 tuple 转 list 做替换后再转回 tuple 写回 kwargs。同时将 type() is list 改为 isinstance() ,并修复局部变量未回写 kwargs 的 bug。 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!41613 | 1 个月前 | |
[Feature]rename head file and add cmake for libtorch_npu | 2 年前 | |
Support allocator trace tracker in NPU caching allocator Co-authored-by: zzhongmin<zhongmin23@huawei.com> # message auto-generated for no-merge-commit merge: !38691 merge v2.7.1_tratra into v2.7.1 Support allocator trace tracker in NPU caching allocator Created-by: zzhongmin Commit-by: zzhongmin Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [x] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 将 NPU Caching Allocator 对齐到上游 CUDA 实现,补齐 Allocator Trace Tracker 回调机制。v2.7.1 分支的 NPU 侧尚未引入 mempool ID 直接存储等重构,本次仅对齐 attachAllocatorTraceTracker 核心功能,不涉及 mempool 相关改动。 1. 新增 AllocatorTraceTracker 回调机制(NPUCachingAllocator.h + .cpp) - 新增 AllocatorTraceTracker 类型、虚方法、trace_trackers_ 成员、公共接口层转发及便捷函数,与 CUDA 接口对齐 2. record_trace 支持 tracker 回调分发(NPUCachingAllocator.cpp) - 入口条件改为 !record_history && trace_trackers_.empty(),构造 TraceEntry 后遍历 trace_trackers_ 调用回调 3. NPUPluggableAllocator 补齐接口(NPUPluggableAllocator.h + .cpp) - 新增 attachAllocatorTraceTracker override,TORCH_CHECK(false) 拒绝调用 4. 新增测试 - C++ 扩展注册回调统计 SEGMENT_ALLOC/FREE 事件,Python 测试验证两种场景下回调正确触发 # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 test/npu/test_allocator_trace_tracker.py # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!38691 | 1 个月前 | |
adjust ci failed case Co-authored-by: XianglongZeng<zengxianglong1@huawei.com> # message auto-generated for no-merge-commit merge: !38006 merge v2.7 into v2.7.1 adjust ci failed case Created-by: probiotics_53 Commit-by: XianglongZeng 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!38006 | 18 天前 | |
fix: gate createSubHcclComm behind ROOTINFO_SUBCOMM_ENABLE env var Co-authored-by: limuan<liyijie16@huawei.com> # message auto-generated for no-merge-commit merge: !40485 merge fix_resumcomm_v2.7.1 into v2.7.1 fix: gate createSubHcclComm behind ROOTINFO_SUBCOMM_ENABLE env var Created-by: limuan Commit-by: limuan Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 - [ ] 需求 - [x] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 子通信域特性与故障快恢场景下的resume通信域特性冲突,暂时不支持resume子通信域,所以子通信域特性增加一个环境变量开关 # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 正常拉起训练  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!40485 | 15 小时前 | |
perf: defer dynamo/inductor import for v2.7.1 (#2788) Co-authored-by: stevenaw0<huangguijun@huawei.com> # message auto-generated for no-merge-commit merge: !43391 merge v2.7.1_import into v2.7.1 perf: defer dynamo/inductor import for v2.7.1 (#2788) Created-by: stevenaw0 Commit-by: stevenaw0 Merged-by: ascend-robot Description: # 【合入来源】 > 关联社区 issue:https://gitcode.com/Ascend/pytorch/issues/2788 - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [x] 重构优化 - [ ] 资料更新 # 【修改方案】 ## 1. 背景与目标 原有 import torch_npu 会间接加载 torch._dynamo、torch._inductor 及大量子模块,增加导入耗时、内存占用和编译器初始化副作用。 本 PR 将图模式初始化从普通 import 阶段移出,同时保持公开接口的原有调用方式: - import torch_npu 不加载 torch._dynamo、torch._inductor、torch_npu._inductor。 - Dynamo、Inductor、TorchAir、NPUGraph 等能力在实际使用时初始化。 - torch.compile 的非 Inductor backend 不加载完整 NPU Inductor。 - Export、ONNX、FSDP、NPUGraph 等公开入口仍在使用前完成所需初始化。 ## 2. 拆分 Dynamo 与 Inductor 初始化 - _lazy_dynamo_setup() 负责 NPU DeviceInterface、Dynamo Variable/Stream/Event/autocast 补丁、trace rules 和 backend 注册。 - _lazy_inductor_setup() 仅在 inductor、npugraphs backend 使用时加载 torch_npu._inductor、NPU Inductor config 和 NPUGraph tree。 - 初始化使用带并发保护的 run_once,成功步骤单独记录;后续步骤失败时,已成功步骤不重复执行,失败初始化允许重试。 - torch.compile(options={"npu_backend": ...}) 在加载 NPU Inductor 前解析本次 options、全局 config 和环境变量,避免先按 default 初始化再切换 backend。 ## 3. 使用统一 Dynamo post-import 触发器 不再包装 torch.compile、torch.export.export、export_for_training、torch.onnx.export 等公开函数,避免改变公开函数对象、签名、装饰器语义,以及提前绑定接口绕过 wrapper。 import torch_npu 只安装 torch._dynamo post-import finder: - 首次导入 torch._dynamo 完成后,统一执行 _lazy_dynamo_setup()。 - 如果用户在 torch_npu 前已经导入 Dynamo,则在 import torch_npu 时补充 NPU 初始化。 - finder 委托其余 sys.meta_path finder 查找真实模块,不绕过其他自定义导入器。 - Export、ONNX Dynamo Export、compile 和提前绑定的公开入口都通过同一个 Dynamo 导入时机完成初始化。 torch.compiler.list_backends() 本身会导入 torch._dynamo,因此也会完成 NPU Dynamo 集成;该路径不会加载 NPU Inductor 或初始化 NPU 设备。三个 NPU backend 同时通过 torch_dynamo_backends entry point 暴露,首次 compile 前即可枚举: - npu - npugraph_ex - npugraphs ## 4. 公开接口和场景兼容处理 | 公开接口或场景 | 原始风险 | 当前处理 | |---|---|---| | torch.compiler.list_backends() | 首次 compile 前看不到 NPU backend | 通过 entry point 保持三个 backend 可见;调用时初始化 Dynamo,但不加载 NPU Inductor | | torch.compiler.npugraph_mark_step_begin() | 首次 compile 前接口不存在,或调用时过度加载编译器 | import 阶段暴露轻量无参接口;共享独立 step 状态,调用时不加载 Dynamo/Inductor | | torch_npu.distributed.tensor | import 阶段加载 DTensor experimental,继而传递导入 Dynamo/Inductor | tensor 子模块改为首次显式访问时导入;显式使用时继续执行原有 strategy 注册实现,不复制或修改 PyTorch register_sharding | | torch.export.export / export_for_training / export_for_inference | NPU Stream、Event、autocast 等捕获支持未初始化;提前绑定可能绕过 wrapper | 不包装公开函数,由统一 Dynamo post-import 触发;四种入口和绑定顺序均使用真实 NPU Export 验证 | | torch.onnx.export(..., dynamo=True) / torch.onnx.dynamo_export | ONNX 路径可能绕过 Export wrapper | 依赖统一 Dynamo post-import 触发;模块调用和两种提前绑定入口覆盖初始化链路 | | torch.compile(..., backend="eager"/custom/"npu") | 无条件加载完整 NPU Inductor | 只初始化 Dynamo,不加载 torch_npu._inductor | | torch.compile(..., backend="inductor"/"npugraphs") | NPU Inductor 尚未注册 | backend lookup 前完成 Dynamo 初始化,确定为 Inductor 类 backend 后再加载 NPU Inductor | | NPU DeviceInterface | 延迟导入后可能报 No interface for device npu | Dynamo 初始化时注册 npu 和 npu:0~31,Stream 接口回归通过 | | FSDP patch | import 阶段导入 FSDP 会间接加载 Dynamo | 使用 FSDP post-import patch,覆盖 torch_npu 前后两种导入顺序 | | torch_npu.npu.npugraph_ex | import torch_npu.npu 时提前加载图模式模块 | 使用模块 __getattr__ 按需导入,公开属性访问方式不变 | ## 5. DTensor 延迟导入与 NPUGraph step 状态拆分 - 不在 torch_npu 中复制 PyTorch 的 register_sharding 实现,也不改动 NPU DTensor 算子文件。普通 import torch_npu 不再主动导入 torch_npu.distributed.tensor;用户显式访问该子模块时,沿用 v2.7.1 原有初始化和 strategy 注册路径。 - MarkStepBox 和 mark_step_begin() 拆到轻量状态模块,公共 mark-step API 与完整 Graph Tree 共享计数状态,但不需要为一次标记加载完整编译器实现。 ## 6. 保留非编译器 import-time 行为 - 将不依赖 Inductor 的 RNG prim 和 decomposition patch 拆到 torch_npu/utils/_rng_prims_patch.py,普通 registry 继续执行这些基础 patch。 - torch_npu.utils._inductor 保留兼容重导出,不再承担完整 NPU Inductor 初始化。 - transfer_to_npu 在自身初始化入口显式导入实际需要修改的模块,不依赖 import torch_npu 的编译器隐式导入。 ## 7. 测试看护 新增或扩展的测试覆盖: - 普通 import torch_npu 不加载 Dynamo/Inductor,并保持公开函数对象不变。 - Dynamo 在 torch_npu 前后两种导入顺序。 - backend lookup 前完成初始化,list_backends() 可见三个 NPU backend。 - eager、自定义、npu、inductor、npugraphs backend 初始化边界。 - Export 四种公开入口/提前绑定顺序及六类 NPU 捕获语义:record_stream、Stream/Event、autocast、current device、device properties、is_available。 - ONNX 三种入口:模块 export、提前绑定 export、提前绑定旧 dynamo_export。 - FSDP 两种导入顺序。 - NPUGraph mark-step 接口签名、计数及无 compiler import。 - NPU DeviceInterface、初始化快照和既有 Stream/Event 捕获行为。 DTensor 的原有算子文件和 register_sharding 实现未修改,本 PR 不新增其实现副本或专项矩阵用例。 # 【资料变更】 不涉及。 # 【接口变更】 不涉及客户可见接口签名变更。torch.compile、Export/ONNX 公开函数不再被 torch_npu 包装;torch_npu.distributed.tensor 的公开访问方式不变,仅从 import 阶段加载调整为首次显式访问时加载。 # 【功能验证】 在 torch-npu-build-2.7.1-py311 环境使用真实 NPU 验证: - test/dynamo/test_compile_trigger.py 覆盖 import、Dynamo 触发、compile backend、Export、ONNX、FSDP、NPUGraph 和 DeviceInterface 路径。 - test/test_torch_npu_init.py:13/13 通过。 - test/npu/test_stream.py:10/10 通过。 - test/dynamo/test_trace_stream_event.py:1/1 通过。 - 显式访问 torch_npu.distributed.tensor 后,原有 NPU strategy 注册正常。 - py_compile、git diff --check 通过。 - 验证所需临时依赖和 Conda 文件均已恢复。 # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!43391 | 5 天前 | |
| 2 年前 | ||
[test][v2.7.1] add NPU validation cases for torch._functorch.config.patch and _add_batch_dim (issues #2687 #2688) Co-authored-by: ggg_0963<1873823162@qq.com> # message auto-generated for no-merge-commit merge: !41382 merge test-functorch-config-vmap-v2.7.1 into v2.7.1 [test][v2.7.1] add NPU validation cases for torch._functorch.config.patch and _add_batch_dim (issues #2687 #2688) Created-by: ggg_0963 Commit-by: ggg_0963 Merged-by: ascend-robot Description: # 【合入来源】 > 4 个 issue 出自「7月社区任务一期 API 一致性」(任务编号 #60 起,见 [#2683](https://gitcode.com/Ascend/pytorch/issues/2683))。 > > - 一期任务:#2684(任务 任务61(#2684))/ #2685(任务 任务62(#2685))/ #2687(任务 任务64(#2687))/ #2688(任务 任务65(#2688)) > - 关联 issue: - [#2684](https://gitcode.com/Ascend/pytorch/issues/2684) — torch._functorch.aot_autograd.aot_compile_joint_with_descriptors(一期任务 任务61(#2684)) - [#2685](https://gitcode.com/Ascend/pytorch/issues/2685) — torch._functorch.aot_autograd.aot_export_joint_with_descriptors(一期任务 任务62(#2685)) - [#2687](https://gitcode.com/Ascend/pytorch/issues/2687) — torch._functorch.config.patch(一期任务 任务64(#2687)) - [#2688](https://gitcode.com/Ascend/pytorch/issues/2688) — torch._functorch.vmap._add_batch_dim(一期任务 任务65(#2688)) # 【修改方案】 本 PR 覆盖 4 个 torch._functorch.* 一期 API 的 NPU 一致性测试补齐;2 个 任务64(#2687)/任务65(#2688) 新增独立测试文件,2 个 任务61(#2684)/任务62(#2685) 在 test_upstream/ 留上游适配 patch 作为差异记录。 本 PR 不涉及 torch_npu 任何 C++ / Python 代码改动,也不修改 torch_npu 既有 patch。 修改文件: - test/functorch/test_functorch_config_api.py(新增):覆盖 torch._functorch.config.patch(7 个用例) - test/functorch/test_vmap_add_batch_dim_api.py(新增):覆盖 torch._functorch.vmap._add_batch_dim(11 个用例:7 个 vmap 集成 + 4 个 _add_batch_dim 直接 API 调用) - test_upstream/test/functorch/test_aot_joint_with_descriptors.py.patch(v2.7.1 分支不新增,因 release/2.5 / release/2.7 上游尚无该文件) 合计新增 20 个独立测试用例(7 + 13),全部 NPU 实测通过;aot patch 不参与运行测试。 # 【API 功能介绍】 1. **torch._functorch.config.patch(key_or_dict, value=...)**: - 功能:上下文管理器,临时修改 torch._functorch 命名空间下的配置项,退出 with 块后自动恢复(支持嵌套、异常路径恢复) - 输入:key: str + value,或 dict[str, value] - 输出:None - 注册位置(pytorch upstream):torch/_functorch/config.py - 是否为 NPU 私有 API:否 2. **torch._functorch.vmap._add_batch_dim(x, batch_dim, vmap_level)**: - 功能:在指定位置插入 batch 维,返回扩展后的张量。是 torch.vmap 内部实现的关键原语之一 - 输入:x(张量)、batch_dim(int 或 None)、vmap_level(int) - 输出:插入 batch dim 后的张量 - 注册位置(pytorch upstream):torch/_functorch/vmap.py - 是否为 NPU 私有 API:否 3. **torch._functorch.aot_autograd.aot_compile_joint_with_descriptors(...)**: - 功能:联合编译 forward + backward FX 图,输出可直接执行的 nn.Module。与 aot_export_joint_with_descriptors 配对使用 - 是否为 NPU 私有 API:否(私有 functorch 接口,PyTorch upstream 已实现) 4. **torch._functorch.aot_autograd.aot_export_joint_with_descriptors(...)**: - 功能:导出 forward + backward 联合 FX 图及对应的 input/output descriptor 规范;aot_compile_joint_with_descriptors 接收其产物进行编译 - 是否为 NPU 私有 API:否 # 【测试方案】 20 个独立用例的设计: 1. **config.patch**(7 个用例): - test_basic_patch:单 key patch,验证进入/退出作用域时配置值正确切换/恢复 - test_patch_dict:dict 批量 patch,验证多个配置项同时修改 - test_patch_restore_after_exception:异常恢复,验证作用域内抛异常后配置仍能正确恢复 - test_patch_nested:嵌套 patch,验证多层嵌套上下文正确生效/恢复 - test_patch_with_tensor_device:NPU 张量兼容性,验证 patch 上下文中 NPU 张量运算正常 2. **_add_batch_dim 间接(vmap 集成,7 个用例)**: - test_add_batch_dim_basic:基础调用,验证 _add_batch_dim 返回非空 Tensor + shape/device 正确 - test_add_batch_dim_with_vmap:vmap 集成,验证 vmap 内部自动调用 _add_batch_dim 的正确性 - test_add_batch_dim_nested_vmap:嵌套 vmap,验证多层 vmap 的 batch dim 传播 - test_add_batch_dim_with_model:模型场景,验证 vmap 在 nn.Module 上的正确性 - test_add_batch_dim_in_dims:不同 in_dims,验证 0/1/-1 三种 batch dim 位置 - test_add_batch_dim_out_dims:不同 out_dims,验证 0/1 两种输出位置 - test_add_batch_dim_with_grad:梯度计算,验证 vmap 内梯度反向传播正确 **_add_batch_dim 直接调用(4 个新增用例,验证 API 在脱离 vmap 框架时的契约)**: - test_add_batch_dim_direct_3d_batch_dim_0:3D 张量 + batch_dim=0,验证返回 shape=(4,5) 与 dtype/device 不变 - test_add_batch_dim_direct_3d_batch_dim_1:3D 张量 + batch_dim=1,验证返回 shape=(3,5) - test_add_batch_dim_direct_3d_batch_dim_2:3D 张量 + batch_dim=2,验证返回 shape=(3,4) - test_add_batch_dim_direct_preserves_dtype_and_device:dtype 与 device 透传一致性 **直接用例设计说明**:用 3 个正向 batch_dim (0/1/2) 在 3D 张量 (3,4,5) 上的版本无关用例;负 batch_dim(如 (2,3) + bdim=-1 → 期望 shape=(3,))在 torch 2.12+ predispatch 会先把负 batch_dim 转为正(batch_dim = self.ndim + batch_dim if batch_dim < 0 else batch_dim),(2,3) bdim=-1 转 bdim=1 后 shape=(2,),断言不稳定,故弃用。shape 在 2.9 / 2.12 / main 全版本一致。 3. **aot_compile_joint_with_descriptors / aot_export_joint_with_descriptors**:上游 test/functorch/test_aot_joint_with_descriptors.py 在 NPU 上的适配 patch 已落盘 test_upstream/test/functorch/test_aot_joint_with_descriptors.py.patch,作为与上游差异的留存。由于 任务61(#2684) 任务62(#2685) 的 AOT API 在 release/2.5 / release/2.7 上游尚未出现(release/2.9 才引入),本 PR 在 v2.7.1 分支不新增 aot patch。 # 【测试环境】 - 操作系统:Linux 4.19.90-2102.2.0.0068.3.ctl2.aarch64 - 昇腾硬件:Ascend NPU(已通过 torch.npu.is_available() 验证,torch.npu.device_count() == 4) - CANN 软件版本:cann-8.5.1 - Python:3.11.14 - 测试分支:本 PR base 为 v2.7.1 - 本地仓库:/home/openmind/code/torch-npu-fork/test/functorch/ > **注意**:base 分支不同,对应 torch_npu wheel 不同:master / v2.11.0 / v2.12.0 用对应 torch_npu release wheel;v2.7.1 用 torch_npu 2.7.1 wheel;v2.9.0 用 torch_npu 2.9.0 wheel。所有 wheel 在 gitcode CI 由对应 base 分支的 torch_npu 镜像跑通相同测试文件。 # 【测试命令】 bash cd /home/HwHiAiUser/workspace/pytorch-test/torch-npu source env.sh git checkout v2.7.1 python -u test/functorch/test_functorch_config_api.py -v python -u test/functorch/test_vmap_add_batch_dim_api.py -v # 【测试日志】(本 PR 测试用例清单,按 test method 名顺序) > **说明**:完整 NPU 实跑日志由 gitcode CI 在 PR base 分支对应的 torch_npu wheel 镜像上产出,附在本 PR 下方 CI 流水线评论中(参见 ascend-robot / openlibing 评论)。本描述仅按用例清单给出方法名 + ok,不含具体时间戳或时长。 > > 合计 Ran 20 tests, OK(7 + 13),全部为本 PR 新增用例。 text test_basic_patch ... ok test_patch_dict ... ok test_patch_nested ... ok test_patch_restore_after_exception ... ok test_patch_with_tensor_device ... ok ---------------------------------------------------------------------- OK text test_add_batch_dim_basic ... ok test_add_batch_dim_with_vmap ... ok test_add_batch_dim_nested_vmap ... ok test_add_batch_dim_with_model ... ok test_add_batch_dim_in_dims ... ok test_add_batch_dim_out_dims ... ok test_add_batch_dim_with_grad ... ok test_add_batch_dim_direct_3d_batch_dim_0 ... ok test_add_batch_dim_direct_3d_batch_dim_1 ... ok test_add_batch_dim_direct_3d_batch_dim_2 ... ok test_add_batch_dim_direct_preserves_dtype_and_device ... ok ---------------------------------------------------------------------- OK `` # 【资料补齐检查结论】 4 个 API 资料补齐情况: - torch._functorch.config.patch:PyTorch 私有 API,无公开资料;本次新增 NPU 直接测试覆盖(5 用例) - torch._functorch.vmap._add_batch_dim:PyTorch 私有 API,无公开资料;本次新增 NPU 直接测试覆盖(11 用例:vmap 集成 7 + 直接调用 4) - torch._functorch.aot_autograd.aot_compile_joint_with_descriptors:PyTorch 私有 API,无公开资料;NPU 适配 patch 留存为 diff 记录 - torch._functorch.aot_autograd.aot_export_joint_with_descriptors:PyTorch 私有 API,无公开资料;NPU 适配 patch 留存为 diff 记录 **结论**:docs/zh/native_apis/ 无需新增任何条目,无需资料补齐 PR。 # 【社区检索证据 / 上游位置】 本 PR 涉及的 4 个 API 在 PyTorch upstream 中的注册位置、关键源码行号与社区检索情况: | API | 路径 | 关键行 / 关键定义 | 上游测试 | | --- | --- | --- | --- | | torch._functorch.config.patch | torch/_functorch/config.py | class patch: 定义于 config.py(上下文管理器) | PyTorch upstream 无独立测试文件,由 test/functorch/test_config.py 间接覆盖 | | torch._functorch.vmap._add_batch_dim | torch/_functorch/vmap.py | _add_batch_dim 符号由 vmap.py 顶部 from torch._C import _add_batch_dim as _add_batch_dim, ... 透传;底层 C++ 在 torch/csrc/functorch/init.cpp:40 static Tensor _add_batch_dim(const Tensor&, int64_t, int64_t) 注册 | 上游 test/functorch/test_vmap.py 间接通过 torch.vmap 覆盖,无 _add_batch_dim 专用测试文件 | | torch._functorch.aot_autograd.aot_compile_joint_with_descriptors | torch/_functorch/aot_autograd.py:1448 附近定义;C++ 端无需额外绑定 | def aot_compile_joint_with_descriptors(...) 入口 | release/2.5 / release/2.7 上游无此文件(release/2.9 才引入 10 个测试,main 21 个) | | torch._functorch.aot_autograd.aot_export_joint_with_descriptors | torch/_functorch/aot_autograd.py:1310 附近定义 | def aot_export_joint_with_descriptors(...) 入口 | 同上 | **路径选择依据**: - _add_batch_dim 注册在 torch/_functorch/vmap.py(不是 vmap/__init__.py)。实际 vmap/ 是单文件模块而非包。 - AOT 两个 API 在 torch/_functorch/aot_autograd.py(一个文件,不是子模块)。 **社区检索补充说明**: - 4 个 _functorch.* API 均为 PyTorch 私有命名空间,PyTorch 官方文档与 issue tracker 不提供公共 API 保证。 # 【接口变更】 不涉及对外接口变更;本 PR 仅新增测试用例 / 上游适配 patch。 # 【CheckList】 - [x] 多个提交已 squash 为单提交 - [x] 已同步最新 upstream 目标分支并重推 - [x] 已补充 NPU 设备上的实测日志(按本分支 base 实际跑测) - [x] 已核对 4 个 API 的完备性、上游检索位置、NPU 适配原因 - [x] 未触碰任何 torch_npu 业务代码或现有 patch - [x] config.patch 测试已覆盖单 key/dict/嵌套/异常恢复/设备兼容 - [x] _add_batch_dim 测试已覆盖 vmap 集成(7)+ 直接 API 调用(4:3D/dtype/device/batch_dim=0/1/2) - [x] _add_batch_dim 直接用例使用正向 batch_dim 在 3D 张量上的版本无关断言,避免 2.12+ predispatch 负 batch_dim wrap 行为差异 ## 实跑日志(当前 commit 的 NPU 环境) **目标分支**:v2.7.1 **环境**:torch 2.7.1+cpu, Ascend NPU 2 卡, CANN 8.5.1 **日期**:2026-07-30 18:23 UTC **命令**:python3 test_functorch_config_api.py、python3 test_vmap_add_batch_dim_api.py torch 2.7.1+cpu, npu=2 ======== test_functorch_config_api.py (7 cases) ======== ---------------------------------------------------------------------- Ran 7 tests in 0.536s OK ======== test_vmap_add_batch_dim_api.py (13 cases) ======== ---------------------------------------------------------------------- Ran 13 tests in 0.467s OK ` **汇总**:20 tests(config 7 + vmap 13)全部 OK,0 skip 0 fail 0 error。 v2.7.1 版本不含两个 AOT API(#61/#62),故不提供 AOT 测试文件及对应日志。 See merge request: Ascend/pytorch!41382 | 6 天前 | |
test(fx): add NPU tests for symbolic_shapes.lru_cache and PropagateUnbackedSymInts Co-authored-by: wangshiqi-2026<wang-shiqi@sjtu.edu.cn> # message auto-generated for no-merge-commit merge: !38679 merge test-fx-symbolic-shapes-unbacked-symints-v2.7.1 into v2.7.1 test(fx): add NPU tests for symbolic_shapes.lru_cache and PropagateUnbackedSymInts Created-by: wangshiqi-2026 Commit-by: wangshiqi-2026 Merged-by: ascend-robot Description: 【合入来源】 如有社区issue,请关联issue链接 请勿携带内部流程信息(需求链接、问题单、内部issue等) 问题单 issue/工单 关联issue:https://gitcode.com/Ascend/pytorch/issues/1617 【修改方案】 完善 Torch-NPU 对 torch.fx.experimental.symbolic_shapes 下 5 个 API 在 NPU 环境下的兼容性验证,覆盖以下 API: | API | 说明 | |-----|------| | torch.fx.experimental.symbolic_shapes.lru_cache | symbolic_shapes 模块提供的 lru_cache 封装,支持 hits/misses、cache_clear、cumulative_cache_info | | torch.fx.experimental.symbolic_shapes.PropagateUnbackedSymInts | FX Interpreter 子类,用于传播 unbacked SymInt 绑定 | | torch.fx.experimental.symbolic_shapes.PropagateUnbackedSymInts.boxed_run | 以 boxed 调用约定执行 FX 图 | | torch.fx.experimental.symbolic_shapes.PropagateUnbackedSymInts.call_function | 执行 call_function 节点并返回结果 | | torch.fx.experimental.symbolic_shapes.PropagateUnbackedSymInts.call_method | 执行 call_method 节点并返回结果 | ### 1. 上游社区用例情况分析 在 PyTorch 上游仓库(github.com/pytorch/pytorch)中搜索这 5 个 API: - **lru_cache**:torch/fx/experimental/symbolic_shapes.py 中有公开实现,但上游 test/ 目录下无针对 symbolic_shapes.lru_cache 的直接单测覆盖 - **PropagateUnbackedSymInts**:类定义于 symbolic_shapes.py,上游仅在 test/fx/test_fx_traceback.py 中间接涉及,无独立、直接的 API 验证用例 - **PropagateUnbackedSymInts.boxed_run / call_function / call_method**:继承自 torch.fx.Interpreter,上游无针对 PropagateUnbackedSymInts 这三个方法的直接单测 结论:5 个 API 均属于上游\"无直接用例\"场景,按 1.3 规范自写用例,提交到 torch-npu 的 test/ 目录。 ### 2. NPU 适配方案 5 个 API 均为 FX / symbolic_shapes 框架层纯 Python 接口,不涉及 NPU 算子调用,在 NPU 上行为与 CPU 一致,**无需做任何 API 代码适配修改**。 ### 3. 新增测试用例 新增/扩展以下测试文件进行覆盖: | 测试文件 | 覆盖 API | |----------|----------| | test/fx/test_symbolic_shapes_api.py | test_public_lru_cache → lru_cache | | test/fx/test_fx_propagate_unbacked_symints.py | test_propagate_unbacked_symints_run 等 → PropagateUnbackedSymInts | | test/fx/test_fx_propagate_unbacked_symints.py | test_propagate_unbacked_symints_boxed_run → boxed_run | | test/fx/test_fx_propagate_unbacked_symints.py | test_propagate_unbacked_symints_call_function → call_function | | test/fx/test_fx_propagate_unbacked_symints.py | test_propagate_unbacked_symints_call_method → call_method | ### 4. API 补齐 不需要。5 个 API 在 NPU 上运行结果与 PyTorch 社区一致。 ### 5. 多版本分支合入 目标分支:v2.7.1 【资料变更】 不涉及(文档补齐在独立 docs PR 中完成)。 【接口变更】 不涉及(无新增/修改对外 C++ 或 Python 接口,仅新增测试用例) 【功能验证】 ### 1. 测试环境 设备:Ascend NPU 框架:torch-npu + PyTorch 说明:5 个 API 为 FX/symbolic_shapes 的框架层纯 Python 接口,不涉及张量算子差异;用例中涉及张量时使用 .to(device_type) 运行在当前 accelerator。 ### 2. 测试命令 bash cd /tmp source /usr/local/Ascend/ascend-toolkit/set_env.sh python /workspace/pytorch/test/fx/test_symbolic_shapes_api.py -k test_public_lru_cache python /workspace/pytorch/test/fx/test_fx_propagate_unbacked_symints.py -k propagate_unbacked ### 3. 测试结果(运行日志) text # 环境:Ascend NPU(torch-npu 2.7.1.post4 / torch 2.7.1) # lru_cache . ---------------------------------------------------------------------- Ran 1 test in 0.021s OK # PropagateUnbackedSymInts(含 boxed_run / call_function / call_method) ....... ---------------------------------------------------------------------- Ran 7 tests in 0.422s OK ### 4. 与上游用例的关系 | 验证维度 | 上游现有用例 | 本 PR 新增用例 | |----------|-------------|----------------| | symbolic_shapes.lru_cache | 无直接用例 | 已覆盖(hit/miss、cumulative_cache_info、cache_clear) | | PropagateUnbackedSymInts | 仅 test_fx_traceback.py 间接涉及 | 已覆盖(run / run_node / placeholder / output) | | PropagateUnbackedSymInts.boxed_run | 无直接用例 | 已覆盖 | | PropagateUnbackedSymInts.call_function | 无直接用例 | 已覆盖(NPU 张量 + shape 校验) | | PropagateUnbackedSymInts.call_method | 无直接用例 | 已覆盖(NPU 张量 + shape 校验) | | NPU 侧验证闭环 | 不完整 | 本 PR 补齐 | 【CheckList】 PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!38679 | 11 天前 | |
add test for add_module and apply api in torch.jit.ScriptModule Co-authored-by: bobebest<773449114@qq.com> # message auto-generated for no-merge-commit merge: !38666 merge test-2.7.1 into v2.7.1 add test for add_module and apply api in torch.jit.ScriptModule Created-by: bobebest Commit-by: bobebest Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> https://gitcode.com/Ascend/pytorch/issues/1977 - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) torch.jit.ScriptModule.add_module和torch.jit.ScriptModule.apply:已在 PyTorch 官方社区搜索 ,无针对该 API 的专门测试用例,因此自行编写测试用例。 Torch.jit.ScriptModule各属性介绍:把一个普通的 Python 模型(nn.Module)编译成 TorchScript 模型(ScriptModule),让它可以脱离 Python、在 NPU/C++/ 推理引擎上跑。 # API介绍 **torch.jit.ScriptModule.add_module**是 PyTorch TorchScript 中用于动态添加子模块的核心方法,该子模块可以使用给定的名称作为属性进行访问; **语法**:add_module(name, module) **参数:** name(str):子模块的名称,可以是任意字符串 module(torch.nn.Module 或 None):要添加的子模块实例;传入 None 时相当于删除该名称对应的子模块 **返回值:**None **核心特性:** 1、TorchScript 静态性约束:只有 add_module 能让 TorchScript 识别并追踪新加入的子模块、参数和缓冲区; 2、动态网络构建:适用于运行时才决定网络结构的场景(如循环添加多层、条件分支添加模块); 3、状态管理:加入的子模块会被纳入 parameters()、state_dict()、to(device)、train()/eval() 等管理体系。 **torch.jit.ScriptModule.apply**是 PyTorch TorchScript 静态图模块 的递归遍历函数,递归遍历模块自身 + 所有子模块,对每一个模块执行传入的函数。 **语法**:apply(fn) **参数:** fn(Callable[[torch.nn.Module], None]):一个函数,接受一个 Module 实例作为输入,返回 None。该函数会被递归地应用到模块自身和每一个子模块上 **返回值**:self(即调用 apply 的 ScriptModule 实例本身) **核心特性如下**: 1、递归执行:深度优先遍历所有子模块 2、原地修改:直接修改模块,不返回新模型 3、顺序固定:先处理自身,再处理子模块 4、TorchScript 安全:可在静态图中正常使用 5、生命周期统一管理:参数、设备、模式全部生效 **具体测试内容如下:** | 测试维度 | 具体内容 | |---------|---------| | 功能正确性 | torch.jit.ScriptModule.add_module 能否正确添加子模块;torch.jit.ScriptModule.apply 能否正确修改参数 | | 递归行为 | torch.jit.ScriptModule.apply 是否递归访问所有嵌套子模块 | | 类型一致性 | 添加的子模块是否被转换为 ScriptModule 类型 | | 设备适配 | 所有参数和张量在 NPU 设备上的 device type 是否正确 | | 前向推理 | 修改后的模型能否正常执行前向传播 | | 返回值语义 | torch.jit.ScriptModule.apply 是否返回自身以支持链式调用 | # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!38666 | 1 个月前 | |
test: add unflatten_dense_tensors NPU coverage Co-authored-by: yulin520<yutianaoxiang@163.com> # message auto-generated for no-merge-commit merge: !41632 merge test-unflatten-dense-tensors-npu-v271-issue2862 into v2.7.1 test: add unflatten_dense_tensors NPU coverage Created-by: weixin_65332823 Commit-by: yulin520 Merged-by: ascend-robot Description: # 〖合入来源〗 - [ ] 需求 - [ ] 问题单 - [x] issue/工单:#2862 - [ ] 重构优化 - [ ] 资料更新 Issue: [Issue #2862](https://gitcode.com/Ascend/pytorch/issues/2862) # 〖修改方案〗 本 PR 针对 v2.7.1 分支新增以下 NPU 测试文件: text test/nn/test_unflatten_dense_tensors.py 涉及 API: python torch._C._nn.unflatten_dense_tensors torch._C._nn.unflatten_dense_tensors 位于 PyTorch C++ 扩展绑定模块 torch._C._nn 中,用于根据原始 tensor 列表的信息,将扁平化后的 dense tensor 拆分并恢复为多个 dense tensor。 经验证,该 API 在 v2.7.1 分支中已经存在,torch-npu 无需新增对应的 API 实现代码。本 PR 仅补充 Python 层 NPU 测试,用于验证该接口在 NPU Tensor 输入下的行为一致性。 测试中通过统一方式获取当前设备类型: python device_type = ( acc.type if (acc := torch.accelerator.current_accelerator()) else "cpu" ) 本次共新增 4 个测试用例,主要覆盖: 1. **基本功能测试** - 构造多个 NPU dense tensor; - 使用 torch._utils._flatten_dense_tensors 进行 flatten; - 调用 torch._C._nn.unflatten_dense_tensors 恢复 tensor; - 检查输出数量、shape、dtype、device 和数值; - 检查恢复 tensor 的 storage 共享关系及 storage offset。 2. **Empty Tensor 测试** - 验证输入中包含空 tensor 时能够正常恢复; - 检查恢复后的 shape、dtype 和 device。 3. **Autograd 测试** - 验证恢复后的 tensor 可以正常参与后续计算; - 验证反向传播路径可用。 4. **dtype 保持测试** - 覆盖 float16 和 float32; - 验证恢复后的 tensor dtype 与原始 tensor 保持一致。 本 PR: text 未新增 API 实现代码 未引入 transfer_to_npu 自动迁移 未修改 JIT / Dynamo 核心方法 未引入无关文件修改 # 〖资料变更〗 不涉及。 torch._C._nn.unflatten_dense_tensors 属于 PyTorch 内部 C++ 绑定接口。 本 PR 未新增公开 API,也未修改用户可见接口,因此不涉及公共 API 资料变更。 # 〖接口变更〗 不涉及。 本 PR 仅新增 NPU 测试文件,不涉及 API 实现及公开接口变更。 # 〖功能验证〗 验证环境: text 操作系统:Linux(Ubuntu) 昇腾硬件:910B4 CANN:8.5.0 目标分支:v2.7.1 PyTorch:2.7.1+cpu torch_npu:2.7.1.post2 current accelerator:npu npu available:True npu device count:1 最终验证 Commit: text d0397e37f40679f391d9d70bde916b4507c04950 已完成以下检查: 1. API 存在性验证; 2. NPU 设备可用性验证; 3. 基本 flatten / unflatten 功能验证; 4. 输出 tensor 数量、shape、dtype、device 验证; 5. 输出 tensor 数值一致性验证; 6. storage 共享关系及 storage offset 验证; 7. empty tensor 场景验证; 8. autograd 路径验证; 9. float16 / float32 dtype 保持验证; 10. 测试文件 Python 语法检查; 11. 测试文件修改范围检查; 12. transfer_to_npu 未引入检查; 13. JIT / Dynamo 核心方法未修改检查; 14. commit 单文件范围检查; 15. 最终 PR Commit 对应的真实 NPU Runtime 验证。 Runtime 验证结果: text TORCH=2.7.1+cpu TORCH_NPU=2.7.1.post2 DEVICE=npu NPU_RUNTIME=PASS .... ---------------------------------------------------------------------- Ran 4 tests OK API43_RESULT=PASS 最终结果: text API_EXISTENCE_RESULT=PASS NPU_RUNTIME=PASS API43_TEST_COUNT=4 API43_RESULT=PASS FINAL_RESULT=PASS 远程分支与提交信息: text 源仓库:weixin_65332823/pytorch 源分支:test-unflatten-dense-tensors-npu-v271-issue2862 目标仓库:Ascend/pytorch 目标分支:v2.7.1 最终 Commit:d0397e37f40679f391d9d70bde916b4507c04950 # 〖CheckList〗 - [x] PR 标题已使用 test 类型标签 - [x] 已关联 Issue #2862 - [x] 已确认 v2.7.1 分支中 API 存在 - [x] 已使用统一 device_type 获取方式 - [x] 已完成基本功能验证 - [x] 已完成 storage 相关验证 - [x] 已完成 empty tensor 场景验证 - [x] 已完成 autograd 路径验证 - [x] 已完成 float16 / float32 dtype 验证 - [x] 已完成真实 NPU Runtime 验证 - [x] 4 个测试用例全部通过 - [x] 已检查新增测试文件内容 - [x] 已确认 commit 仅包含目标测试文件 - [x] 已确认未引入 transfer_to_npu - [x] 已确认未修改 JIT / Dynamo 核心方法 - [x] 已确认不涉及 API 实现代码 - [x] 已确认不涉及资料变更 - [x] 已确认不涉及公开接口变更 # 验证截图   See merge request: Ascend/pytorch!41632 | 3 天前 | |
fix: route internal-format copy_ to native path and guard NPUStorageDesc access Co-authored-by: wuyouqi1<wuyouqi1@h-partners.com> # message auto-generated for no-merge-commit merge: !44450 merge personal/ci-revert-d2h-protection into v2.7.1 fix: route internal-format copy_ to native path and guard NPUStorageDesc access Created-by: wuyouqi1 Commit-by: wuyouqi1 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 关联 issue:https://gitcode.com/Ascend/pytorch/issues/2629 # 【修改方案】 前置pr为:https://gitcode.com/Ascend/pytorch/pull/40289 实现了修改点中的第一点。 本pr为以下修改点的第二点和第三点: ## 一、Ascend950 NZ 序列化 / D2H / 打印支持 - copy_ 增加 internal_format_opapi: True,内部格式 tensor 进入 op_api 路径; - aclnn 格式转换归一化:NZ_C0 变体归一化为 FRACTAL_NZ,≥4 字节类型补 FLOAT16 additionalDtype; - 序列化 FORMAT_INFO 增加 NZ_C0 格式名,支持 C0 变体文件兼容加载; - 私有格式 tensor 的 __repr__ 补丁:先 .cpu() 触发 d2h + 格式转换再打印。 ## 二、copy_ 内部格式路由修复 aclnnInplaceCopy 按 base format 布局写入,会损坏内部格式存储,在 copy_ 入口按平台分流: - **A2/A3**:任一输入为内部格式时回退原生 copy_(原生路径自行处理格式转换),base format 保持 aclnn 路径; - **Ascend950**:仅支持 device-to-host —— d2h 先 NZ→ND 转换再走 aclnn,h2d/d2d 遇内部格式报错。 实现细节:入口使用 IsOpInputBaseFormat 判断(legacy 加载的 from_blob tensor 视作 base format、不读 desc,legacy load 恢复可用);d2h 分支保留 IsBaseFormatType(legacy 保存命中第三部分拦截并抛异常)。 ## 三、GetNpuStorageImplDesc 异常值拦截 legacy 序列化的 _write_file/_set_from_file 使用 at::from_blob 产生 plain c10::StorageImpl tensor,读取 desc 越界("unknown format type:<垃圾值>")。GetNpuStorageImplDesc 增加动态类型检查(typeid == NPUStorageImpl),不满足时抛清晰异常:legacy 序列化保存 NPU tensor 不支持,请改用新版 zipfile 序列化。 # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 **新增用例**: - test/npu/test_serialization_format.py:TestCopyFormat(A2/A3:6 格式 × h2d/d2h + 6×6 d2d 全组合);TestCopyFormatAscend950(A5:base 对照、NZ d2h 遍历 fp16/bf16/i8/i32、NZ h2d/d2d 断言报错) **修复前 → 修复后**: | 场景 | 修复前 | 修复后 | |------|:---:|:---:| | A2/A3 内部格式 copy(ND→NZ / NZ→ND / NZ→NZ) | FAIL(静默损坏 / CANN 报错) | PASS(回退 native) | | A5 NZ d2h | PASS | PASS(NZ→ND cast 后走 aclnn) | | A5 NZ h2d / d2d | CANN 报错 | 清晰报错 "not supported on Ascend950" | **验证结果**: - A2A3 CI用例验证pass - A5运行CI用例结果如下: # python test_serialization_format.py s.[W814 10:14:44.341577560 OptionRegister.cpp:95] Warning: Current device only support allow_internal_format=False, the requested value True is invalid and has been reverted to False. (function operator()) ...stensor([[-0.1117, -0.4966, 0.1631, ..., -1.6592, -1.8770, 0.7373], [ 0.9258, 0.9248, 0.1825, ..., -0.5845, 0.9077, 0.4849], [-0.2632, -0.5435, -1.6406, ..., 2.1074, -0.9932, 1.4082], ..., [-1.2881, 1.3672, 0.1176, ..., 0.1048, -1.2842, 0.6128], [ 1.0059, -0.3564, 0.5537, ..., 1.5078, -1.5625, -0.9580], [-0.2183, -0.9858, -0.8320, ..., -0.8965, -2.1719, -0.2754]], dtype=torch.float16) tensor([[-0.4004, -2.3750, -0.2139, ..., 0.6875, -0.4141, -1.8359], [-0.2969, 1.0547, 0.0659, ..., 0.5430, -0.2002, 0.5039], [-0.3945, -0.4844, -1.0078, ..., 1.7266, 0.2930, -0.4062], ..., [-2.0625, 0.3613, -0.1099, ..., -0.2109, -0.5664, 0.9922], [ 1.1953, -0.7109, 1.3828, ..., 1.3125, -0.5039, 1.3359], [ 0.5430, 0.5625, -0.0708, ..., 1.0234, 0.5156, 0.2910]], dtype=torch.bfloat16) tensor([[ 1, -1, -1, ..., 0, 0, 0], [ 0, 1, 0, ..., 0, -1, -1], [ 0, 0, -1, ..., 0, 1, 0], ..., [ 1, 0, 0, ..., 1, 0, 0], [ 0, 0, 1, ..., 0, -1, 0], [ 0, 1, 0, ..., 0, -2, 0]], dtype=torch.int8) tensor([[ 0, 0, 0, ..., 0, 0, 0], [ 0, -1, -1, ..., 1, 0, -1], [ 0, 0, 1, ..., 0, 0, 1], ..., [-1, 1, -2, ..., -2, 0, 0], [ 1, 0, -1, ..., 0, 0, 0], [ 0, 0, 2, ..., -1, 0, 1]], dtype=torch.int32) .Warning: The current version of the file storing weights is old, and it is relanded due to internal bug of torch and compatibility issue. We will deprecate the loading support for this type of file in the future, please use newer torch to re-store the weight file. .Warning: The current version of the file storing weights is old, and it is relanded due to internal bug of torch and compatibility issue. We will deprecate the loading support for this type of file in the future, please use newer torch to re-store the weight file. . ---------------------------------------------------------------------- Ran 9 tests in 59.626s OK (skipped=2) # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!44450 | 1 天前 | |
test(test_pytorch_onnx_onnxruntime.py) fix testcase test_quantized_conv3d/test_quantized_conv3d_relu Co-authored-by: yuanqi1104<yuanqi13@huawei.com> # message auto-generated for no-merge-commit merge: !36631 merge yuanqi_fix_onnx_onnxruntime_testcase into v2.7.1 test(test_pytorch_onnx_onnxruntime.py) fix testcase test_quantized_conv3d/test_quantized_conv3d_relu Created-by: yuanqi1104 Commit-by: yuanqi1104 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> https://gitcode.com/Ascend/pytorch/issues/2093 - [ ] 需求 - [x] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 用例 test_quantized_conv3d/test_quantized_conv3d_relu 失败的原因是onednn低于3.9.0 的版本在arm平台上存在精度bug。故: 1. pytorch 2.7.1使用的onednn版本低于3..9.0,故需要skip掉 2. pytorch 2.12.0使用的onednn版本高于3.9.0,但是在arm平台上默认选择的backend不是onednn,而是x86(pytorch本身bug)。可以通过强制指定onednn运行测试用例 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 pytorch.2.7.1版本自动跳过   pytorch 2.12.0版本验证成功   # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [x ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!36631 | 2 个月前 | |
[v2.7.1] remove unskip for test/optim/test_fused_optimizers.py Co-authored-by: ffmh<fengminghao2@huawei.com> # message auto-generated for no-merge-commit merge: !37138 merge v2.7.1_fix_ut into v2.7.1 [v2.7.1] remove unskip for test/optim/test_fused_optimizers.py Created-by: ffmh Commit-by: ffmh Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!37138 | 2 个月前 | |
test(package): add testcase for torch.package.PackageExporter additional APIs Co-authored-by: PAGEMRW<985608880@qq.com> # message auto-generated for no-merge-commit merge: !37828 merge test-package-exporter-additional-api-v2.7.1 into v2.7.1 test(package): add testcase for torch.package.PackageExporter additional APIs Created-by: PAGEMRW Commit-by: PAGEMRW Merged-by: ascend-robot Description: # 【合入来源】 - 问题单 PyTorch 社区用例对以下 torch.package.PackageExporter API 缺少充分且直接的验证: torch.package.PackageExporter.add_dependency torch.package.PackageExporter.all_paths torch.package.PackageExporter.close torch.package.PackageExporter.dependency_graph_string torch.package.PackageExporter.get_unique_id torch.package.PackageExporter.register_intern_hook 因此新增 test_package_exporter_additional_api.py 测试文件,用于验证上述 6 个 API 的正确性,并补充异常路径验证,覆盖显式依赖添加、依赖图路径查询、依赖图字符串输出、唯一 ID 生成、intern hook 注册/移除、PackageExporter 正常关闭及重复关闭异常等场景。 # 【修改方案】 一、API 功能说明 1. torch.package.PackageExporter.add_dependency 是 PyTorch torch.package.PackageExporter 中用于手动向包导出器依赖图添加模块依赖的 API,核心功能如下: 依赖图补充能力:接收指定模块名,并根据用户预先配置的 extern、intern、mock、deny 等规则,将该模块加入 PackageExporter 的依赖分析流程。 规则驱动处理:模块最终是被打包进 archive、作为外部依赖记录、替换为 mock 模块,还是被拒绝,取决于导出器中已有的依赖匹配规则。 递归依赖分析支持:当 dependencies=True 时,会进一步分析该模块源码中的 import 依赖,并将相关依赖继续纳入处理。 手动依赖声明:适用于测试或特殊打包场景中显式补充某个模块依赖,避免完全依赖 save_module、save_pickle 等接口的自动扫描。 纯 Python 打包辅助:该 API 主要操作模块依赖关系和导出规则,不涉及张量计算,也不要求运行在 NPU/GPU 设备上。 2. torch.package.PackageExporter.all_paths 是 PyTorch PackageExporter 中用于查询两个模块之间依赖路径的调试分析 API,核心功能如下: 依赖路径追踪:接收源模块 src 和目标模块 dst,返回从 src 到 dst 的所有依赖路径。 DOT 图格式输出:返回结果为 DOT 格式字符串,可用于 Graphviz 等工具可视化依赖子图。 依赖原因定位:常用于分析某个模块为什么会被 PackageExporter 作为依赖引入,帮助定位间接 import 链路。 子图级别查看:相比完整依赖图,该 API 只关注指定源模块到目标模块之间的路径,便于缩小调试范围。 静态调试属性:该 API 只读取和展示 PackageExporter 内部依赖图信息,不会执行实际模型计算或张量运算。 3. torch.package.PackageExporter.close 是 PyTorch PackageExporter 中用于结束打包并将 package 写入目标位置的收尾 API,核心功能如下: 包写出能力:将前面通过 save_module、save_pickle、save_text、save_binary、save_source_string 等接口收集到的代码、对象和资源正式写入文件系统或二进制 IO 对象。 导出流程终止:调用 close() 后,PackageExporter 进入关闭状态,后续再调用保存、依赖添加等导出相关接口将不再合法。 上下文管理器等价:通常推荐使用 with PackageExporter(...) as exporter 的形式自动触发关闭逻辑,避免忘记手动调用 close()。 规则完整性检查:在关闭阶段会完成打包收尾检查,例如未解析依赖、非法依赖或未匹配规则可能在关闭时触发异常。 资源释放作用:用于确保底层 zip/package 归档结构被完整写入并释放相关写入资源。 4. torch.package.PackageExporter.dependency_graph_string 是 PyTorch PackageExporter 中用于输出完整包依赖图的调试 API,核心功能如下: 完整依赖图查看:返回当前 PackageExporter 已记录的 package 依赖关系图。 字符串化输出:返回值为字符串形式的依赖图表示,可直接打印到控制台或写入日志文件。 打包调试支持:用于观察哪些模块被纳入依赖图、模块之间存在怎样的依赖关系。 与局部路径分析互补:all_paths(src, dst) 适合查看两个模块之间的路径,而 dependency_graph_string() 适合查看整体依赖结构。 无副作用查询:该 API 只读取依赖图状态,不会修改打包内容,也不涉及张量或设备相关操作。 5. torch.package.PackageExporter.get_unique_id 是 PyTorch PackageExporter 中用于生成包内唯一标识符的辅助 API,核心功能如下: 唯一 ID 生成:返回一个字符串 ID,并保证该 ID 在当前 package 导出过程中只会被分配一次。 避免命名冲突:常用于生成临时模块名、资源路径或中间文件名,防止与已有模块和资源发生冲突。 自定义打包支持:在自定义 __reduce_package__ 等高级打包逻辑中,可用该 API 为动态生成的资源分配唯一名称。 包内范围唯一:其唯一性主要保证在当前 PackageExporter 管理的 package 内成立,不用于全局分布式唯一标识。 轻量级工具属性:该 API 只生成字符串标识,不涉及依赖扫描、文件写入或张量运算。 6. torch.package.PackageExporter.register_intern_hook 是 PyTorch PackageExporter 中用于注册 intern 模块匹配回调函数的 API,核心功能如下: intern 回调注册:向导出器注册一个 hook,当某个模块匹配 intern() 规则并准备被打包进 package 时,该 hook 会被触发。 自定义处理能力:hook 函数可接收 exporter 和 module_name,从而在模块被 intern 时执行额外逻辑,例如记录日志、统计模块、补充资源或检查模块名。 多 hook 顺序执行:支持注册多个 intern hook,并按照注册顺序依次调用,便于组合多个自定义处理逻辑。 可移除句柄支持:注册后会返回 RemovableHandle,后续可通过 handle.remove() 移除该 hook。 打包流程扩展点:该 API 提供对 PackageExporter 内部模块处理流程的扩展能力,适合测试 hook 调用顺序、移除机制和模块匹配行为。 二、测试文件 test_package_exporter_additional_api.py 完整验证该 API 的原因 `` 该测试用例针对 torch.package.PackageExporter.add_dependency、torch.package.PackageExporter.all_paths、torch.package.PackageExporter.dependency_graph_string、torch.package.PackageExporter.get_unique_id、torch.package.PackageExporter.register_intern_hook 和 torch.package.PackageExporter.close 六个 API,从显式依赖处理、异常依赖处理、依赖图路径查询、依赖图字符串输出、唯一标识生成、Hook 注册与移除机制、包写入闭环、重复关闭异常等维度进行直接验证,具体体现在: 1. 对 add_dependency API 的验证 显式依赖添加验证 test_add_dependency:通过创建 PackageExporter,并直接调用 add_dependency("math") 手动加入 math 模块依赖,验证 API 能够将指定模块加入 PackageExporter 的依赖分析流程。测试通过 dependency_graph.nodes 校验 math 已被加入依赖图节点,说明 add_dependency 能够正确记录显式添加的依赖。随后关闭 exporter,并使用 PackageImporter 从内存 package 中重新加载 math 模块,验证导入结果与系统原生 math 模块一致,说明显式添加的依赖不仅在导出阶段被正确记录,也能在导入阶段保持正确解析。 不存在模块异常路径验证 test_add_dependency_nonexistent_module_raises:通过 add_dependency("nonexistent_module_for_package_exporter_test") 手动添加一个不存在的模块依赖,并在 exporter.close() 阶段断言抛出 PackagingError。该测试验证 add_dependency 对非法/不可解析模块依赖的处理符合预期:依赖可以先进入导出器依赖处理流程,但最终关闭打包时会进行完整性检查并暴露打包错误,避免生成包含无效依赖的 package。 2. 对 all_paths API 的验证 依赖路径查询验证 test_all_paths:手动向 dependency_graph 中添加 a -> b、b -> c、a -> d 三条边,然后调用 all_paths("a", "c") 查询从 a 到 c 的依赖路径。测试断言结果中包含 "a" -> "b" 和 "b" -> "c",说明 API 能够正确返回目标路径上的依赖边;同时断言结果中不包含 "a" -> "d",说明 API 不会错误返回与目标节点 c 无关的分支路径。该测试覆盖了依赖图路径提取的正确性和无关路径过滤能力。 3. 对 dependency_graph_string API 的验证 依赖图字符串输出验证 test_dependency_graph_string:通过向 dependency_graph 中添加 a -> b 依赖边,再调用 dependency_graph_string() 获取完整依赖图字符串。测试断言结果中包含 digraph G,验证其输出符合 DOT 图格式;同时断言结果中包含 "a" -> "b",验证依赖图中的实际边关系能够被正确序列化输出。该测试说明该 API 能够将 PackageExporter 内部依赖图转换为可读、可调试的字符串表示。 4. 对 get_unique_id API 的验证 唯一标识生成验证 test_get_unique_id:连续三次调用 get_unique_id(),并分别断言返回值为 "0"、"1"、"2"。该测试验证了 API 能够在同一个 PackageExporter 实例内生成单调递增且不重复的字符串 ID,说明其可用于包内临时资源、模块名或自定义打包逻辑中的唯一命名需求。同时,连续调用场景也验证了内部计数状态能够被正确维护。 5. 对 register_intern_hook API 的验证 Hook 注册与触发验证 test_register_intern_hook:定义 intern_hook 回调函数,并通过 register_intern_hook 注册到 PackageExporter 中。随后调用 save_source_string("foo", "VALUE = 1", dependencies=False) 保存源码模块,触发模块 intern 流程。测试最终断言 interned_modules 等于 ["foo"],说明当模块被打包进 package 时,已注册的 intern hook 能够被正确调用,并且能够接收到正确的模块名参数。 Hook 移除机制验证 test_register_intern_hook_remove:注册 intern hook 后,立即调用返回句柄的 remove() 方法移除该 hook,再保存 foo 模块。测试断言 interned_modules 为空列表,说明被移除的 hook 不会继续触发。该测试进一步覆盖了 register_intern_hook 返回句柄的有效性,以及 hook 注册后可撤销的边界行为,避免回调残留或误触发。 6. 对 close API 的验证 包写入闭环验证 test_close:先通过 save_source_string("foo", "VALUE = 3", dependencies=False) 向 package 中写入源码模块,再调用 close() 完成导出收尾。随后重置 BytesIO 指针,并使用 PackageImporter 从内存 package 中重新导入 foo 模块,断言 foo.VALUE 等于 3。该测试验证了 close() 能够正确完成 package 的最终写入、归档结构封装和资源收尾,使导出的内容能够被后续 PackageImporter 正常加载。 重复关闭异常路径验证 test_close_twice_raises:创建 PackageExporter 后先执行一次 close() 完成关闭,再次调用 close() 时断言抛出异常。该测试验证 close() 关闭状态管理符合预期,PackageExporter 在完成导出后不会允许重复关闭或重复写入,从而避免资源状态异常、归档结构重复收尾等问题。 7. 测试完整性与隔离性保障 该测试文件使用 BytesIO 作为内存 package 载体,避免依赖外部文件系统,保证测试过程轻量、独立、可重复。每个测试用例均重新创建 PackageExporter 实例,分别构造独立的依赖图、hook 列表或 package 内容,避免不同 API 测试之间发生状态污染。部分测试使用 with PackageExporter(buffer) as exporter 的上下文管理方式,覆盖自动 close 场景;test_close 显式调用 close(),覆盖手动关闭场景;test_add_dependency_nonexistent_module_raises 和 test_close_twice_raises 分别覆盖依赖解析失败与重复关闭两个异常分支。由于这些 API 主要属于 torch.package 的 Python 层打包、依赖管理和导出流程,不涉及实际张量计算或 NPU 算子执行,因此无需额外构造 NPU 张量,也无需额外进行张量迁移适配。 三、NPU 适配 torch.package.PackageExporter.add_dependency、torch.package.PackageExporter.all_paths、torch.package.PackageExporter.close、torch.package.PackageExporter.dependency_graph_string、torch.package.PackageExporter.get_unique_id 和 torch.package.PackageExporter.register_intern_hook 均属于 torch.package 模块中的 Python 层打包、依赖管理、调试分析和 Hook 扩展类 API,不涉及张量计算、算子执行或设备调度逻辑,因此无需针对昇腾 NPU 做额外适配,具体分析如下: 1. 纯 Python 层打包流程 API,无硬件相关计算逻辑 - add_dependency API:主要用于手动向 PackageExporter 的依赖图中添加模块依赖,并根据 extern、intern、mock、deny 等规则处理模块归属,核心逻辑是 Python 模块依赖分析和打包规则匹配,不涉及 Tensor 运算或 NPU 算子调用;新增的不存在模块用例验证的是打包阶段异常检查,也不涉及设备逻辑。 - all_paths API:仅用于查询 PackageExporter 内部依赖图中两个模块之间的依赖路径,返回 DOT 格式字符串,属于依赖图调试分析能力,不涉及任何设备侧计算。 - dependency_graph_string API:用于将当前依赖图字符串化输出,便于观察模块之间的依赖关系,本质是读取并序列化 Python 层依赖图结构,与 NPU 硬件无关。 - get_unique_id API:仅用于在当前 PackageExporter 实例内生成唯一字符串 ID,属于轻量级命名辅助工具,不涉及依赖扫描、文件执行、张量创建或设备迁移。 - register_intern_hook API:用于注册模块 intern 过程中的 Python 回调函数,核心逻辑是 hook 注册、触发和移除,不依赖任何底层硬件能力。 - close API:用于完成 package 的最终写入和资源收尾,将已保存的源码、对象或资源写入目标 package 中,属于文件/字节流归档写出逻辑;新增的重复 close 用例验证的是 Python 对象关闭状态管理,也不涉及 NPU 计算图或算子执行。 2. 无底层算子 / 内核 / NPU Runtime 依赖 - 这 6 个 API 的核心功能集中在 PackageExporter 的模块依赖管理、依赖图维护、包内容写入、唯一 ID 生成以及 hook 机制上,均运行在 Python 解释器和 PyTorch 打包框架层面。 - 测试过程中使用的 BytesIO、PackageExporter、PackageImporter、dependency_graph 等对象均属于 Python 层对象或 PyTorch package 管理结构,不会调用 torch_npu 的算子、NPU kernel、NPU 内存管理接口或设备通信接口。 - 测试用例即使在 torch-npu 迁移环境下执行,也仅验证 torch.package 的打包、导入和依赖图逻辑,不触发任何 NPU 设备侧行为。 3. 核心逻辑与硬件设备解耦 - 依赖管理解耦:add_dependency、all_paths 和 dependency_graph_string 操作的是模块依赖图,依赖关系来自 Python import 规则和 PackageExporter 的打包策略,与 CPU/GPU/NPU 设备类型无关。 - 打包写入解耦:close API 负责将 package 内容写入内存 buffer 或文件系统,其正确性取决于归档结构和资源写入完整性,而不是底层计算设备。 - Hook 机制解耦:register_intern_hook 触发的是 Python 回调函数,测试关注 hook 是否被正确注册、调用和移除,不涉及任何硬件执行路径。 - 唯一标识生成解耦:get_unique_id 仅维护 PackageExporter 内部计数状态并返回字符串 ID,不包含设备判断、张量分配或算子派发逻辑。 4. 无需构造 NPU 张量的原因 - 本测试文件覆盖的 6 个 API 均不以 Tensor 作为输入,也不返回 Tensor 结果。 - 测试逻辑主要包括模块依赖声明、异常依赖关闭检查、依赖图边关系查询、字符串输出校验、hook 调用验证、package 写入与重新导入验证、重复关闭异常验证。 - 因此,按照“涉及张量的用例尽可能运行在 NPU 上”的原则,本测试文件不存在需要迁移到 NPU 的张量对象,也无需额外添加 .npu() 或 .to(device_type) 操作。 - 若强行构造 NPU 张量,反而会引入与被测 API 无关的设备依赖,降低测试的针对性和最小化原则。 综上,torch.package.PackageExporter.add_dependency、all_paths、close、dependency_graph_string、get_unique_id 和 register_intern_hook 均属于硬件无关的 Python 层 package 导出与依赖管理 API。其功能正确性主要取决于 PackageExporter 内部依赖图、打包规则、hook 机制、异常状态管理和归档写入逻辑,不依赖昇腾 NPU 的算子、内存或运行时能力。因此在 torch-npu 适配中无需修改 API 本身,也无需构造 NPU 张量,可直接复用 PyTorch 社区逻辑进行验证。 # 【资料变更】 > 不涉及 已检查文档,https://gitcode.com/Ascend/pytorch/tree/v2.7.1/docs/zh/native_apis 下面各个版本均已记录这些 API 支持情况,因此不需要提交 PR 修改资料。 # 【接口变更】 > 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤 > 新增/变更内容是否已新增/适配 UT 测试用例看护,并补充测试自验证截图 在 2.7.1、2.9.0、2.10.0、2.11.0、2.12.0 版本上执行该用例,均通过,日志如下: ` root@c18d5a0da657:/workspace/pytorch29/test/package# python -m unittest -v test_package_exporter_additional_api test_add_dependency (test_package_exporter_additional_api.TestPackageExporterAdditionalAPI.test_add_dependency) ... ok test_add_dependency_nonexistent_module_raises (test_package_exporter_additional_api.TestPackageExporterAdditionalAPI.test_add_dependency_nonexistent_module_raises) ... ok test_all_paths (test_package_exporter_additional_api.TestPackageExporterAdditionalAPI.test_all_paths) ... ok test_close (test_package_exporter_additional_api.TestPackageExporter See merge request: Ascend/pytorch!37828 | 2 个月前 | |
test: Add tests for StringTable.default_factory Co-authored-by: qq_65095566<1922937030@qq.com> # message auto-generated for no-merge-commit merge: !43210 merge test-string-table-default-factory-2.7.1 into v2.7.1 test: Add tests for StringTable.default_factory Created-by: qq_65095566 Commit-by: qq_65095566 Merged-by: ascend-robot Description: # 【合入来源】 ## 关联社区 issue:[[Usage]: torch.autograd.profiler_util.StringTable.default_factory API适配补齐 #3444](https://gitcode.com/Ascend/pytorch/issues/3444) ## 关联社区 issue:[【社区任务】7月社区任务第二期-Ascend for PyTorch API 一致性开发(59) #2906](https://gitcode.com/Ascend/pytorch/issues/2906) - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 经检索 PyTorch v2.7.1 官方测试目录,未发现针对 torch.autograd.profiler_util.StringTable.default_factory 的直接测试用例。 现有测试未直接覆盖该属性的默认值、构造参数、属性修改、非法参数以及与 StringTable.__missing__ 的交互行为,因此需要补充直接测试。 本次修改内容如下: 1. 扩展已有测试文件: text test/profiler/test_string_table.py 2. 保留原有 torch.autograd.profiler_util.StringTable.pop 测试。 3. 新增 torch.autograd.profiler_util.StringTable.default_factory 测试,覆盖: - 默认构造时 default_factory 为 None; - 显式传入 None; - 构造时传入可调用对象; - 读取和修改 default_factory 属性; - 构造时传入不可调用对象抛出 TypeError; - StringTable.__missing__ 不调用 default_factory。 4. 本次仅补充单元测试,不修改 API 功能实现。 # 【资料变更】 不涉及 经检查,torch-npu master 分支 docs/zh/api/native_api 下 PyTorch 2.7.1、2.9.0、2.10.0、2.11.0 和 2.12.0 对应资料中均未收录 torch.autograd.profiler_util.StringTable.default_factory。 PyTorch 官方文档中也未提供该属性的独立公开文档条目。 StringTable 继承自 collections.defaultdict,default_factory 是继承获得的标准库属性,并非 PyTorch 在 StringTable 中单独实现的成员,因此本次不新增 torch-npu 原生 API 资料条目。 该属性属于非计算类属性,不涉及张量及数据类型。 # 【接口变更】 本次不修改 torch.autograd.profiler_util.StringTable.default_factory 的功能、参数或返回行为,仅补充单元测试,不涉及跨代码仓或客户可见接口变更。 # 【功能验证】 测试命令: bash python test/profiler/test_string_table.py -v 测试结果: text Ran 9 tests in 0.032s OK 原有 4 个 StringTable.pop 测试和新增 5 个 StringTable.default_factory 测试均执行通过。 代码格式检查: bash git diff --check 检查结果无异常。 # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!43210 | 5 天前 | |
AI assist developer for python dt v2.7.1 Co-authored-by: aksksks<mengzichao@h-partners.com> # message auto-generated for no-merge-commit merge: !26535 merge v2.7.1 into v2.7.1 AI assist developer for python dt v2.7.1 Created-by: aksksks Commit-by: aksksks Merged-by: ascend-robot Description: <!-- Thanks for sending a pull request! --> **What type of PR is this?** > Uncomment only one /kind <> line, hit enter to put that in a new line, and remove leading whitespaces from that line: > > /kind bug > /kind task > /kind feature **What does this PR do / why do we need it**: **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!26535 | 8 个月前 | |
test update ut Co-authored-by: huangyunlong2022<huangyunlong4@h-partners.com> # message auto-generated for no-merge-commit merge: !37734 merge 2.7ut1 into v2.7.1 test update ut Created-by: huangyunlong2022 Commit-by: huangyunlong2022 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [x] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) test_deprecation test_cycle_lr_cycle_momentum_fail_with_momentumless_optimizer test_hook_registration 同步社区用例更新 test_float_status A2/A3需要开启饱和模式 test_select_at_first_axis_to_single_element_tensor_copy 转连续优化是aclop路径,alcnn路径添加aclnnAdds通过用例 test_expand_copy_to_slice_discontiguous_tensor 非本次修复,特定ci环境失败先跳过 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!37734 | 2 个月前 | |
fix test_autograd to avoid calling policy_fn during recompute Co-authored-by: SCh-zx<1325467101@qq.com> # message auto-generated for no-merge-commit merge: !44660 merge v2.7.1 into v2.7.1 fix test_autograd to avoid calling policy_fn during recompute Created-by: SCh_zx Commit-by: SCh-zx Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 原生社区中针对索引有所修改,修改用例以适配: # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!44660 | 1 天前 | |
perf: defer dynamo/inductor import for v2.7.1 (#2788) Co-authored-by: stevenaw0<huangguijun@huawei.com> # message auto-generated for no-merge-commit merge: !43391 merge v2.7.1_import into v2.7.1 perf: defer dynamo/inductor import for v2.7.1 (#2788) Created-by: stevenaw0 Commit-by: stevenaw0 Merged-by: ascend-robot Description: # 【合入来源】 > 关联社区 issue:https://gitcode.com/Ascend/pytorch/issues/2788 - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [x] 重构优化 - [ ] 资料更新 # 【修改方案】 ## 1. 背景与目标 原有 import torch_npu 会间接加载 torch._dynamo、torch._inductor 及大量子模块,增加导入耗时、内存占用和编译器初始化副作用。 本 PR 将图模式初始化从普通 import 阶段移出,同时保持公开接口的原有调用方式: - import torch_npu 不加载 torch._dynamo、torch._inductor、torch_npu._inductor。 - Dynamo、Inductor、TorchAir、NPUGraph 等能力在实际使用时初始化。 - torch.compile 的非 Inductor backend 不加载完整 NPU Inductor。 - Export、ONNX、FSDP、NPUGraph 等公开入口仍在使用前完成所需初始化。 ## 2. 拆分 Dynamo 与 Inductor 初始化 - _lazy_dynamo_setup() 负责 NPU DeviceInterface、Dynamo Variable/Stream/Event/autocast 补丁、trace rules 和 backend 注册。 - _lazy_inductor_setup() 仅在 inductor、npugraphs backend 使用时加载 torch_npu._inductor、NPU Inductor config 和 NPUGraph tree。 - 初始化使用带并发保护的 run_once,成功步骤单独记录;后续步骤失败时,已成功步骤不重复执行,失败初始化允许重试。 - torch.compile(options={"npu_backend": ...}) 在加载 NPU Inductor 前解析本次 options、全局 config 和环境变量,避免先按 default 初始化再切换 backend。 ## 3. 使用统一 Dynamo post-import 触发器 不再包装 torch.compile、torch.export.export、export_for_training、torch.onnx.export 等公开函数,避免改变公开函数对象、签名、装饰器语义,以及提前绑定接口绕过 wrapper。 import torch_npu 只安装 torch._dynamo post-import finder: - 首次导入 torch._dynamo 完成后,统一执行 _lazy_dynamo_setup()。 - 如果用户在 torch_npu 前已经导入 Dynamo,则在 import torch_npu 时补充 NPU 初始化。 - finder 委托其余 sys.meta_path finder 查找真实模块,不绕过其他自定义导入器。 - Export、ONNX Dynamo Export、compile 和提前绑定的公开入口都通过同一个 Dynamo 导入时机完成初始化。 torch.compiler.list_backends() 本身会导入 torch._dynamo,因此也会完成 NPU Dynamo 集成;该路径不会加载 NPU Inductor 或初始化 NPU 设备。三个 NPU backend 同时通过 torch_dynamo_backends entry point 暴露,首次 compile 前即可枚举: - npu - npugraph_ex - npugraphs ## 4. 公开接口和场景兼容处理 | 公开接口或场景 | 原始风险 | 当前处理 | |---|---|---| | torch.compiler.list_backends() | 首次 compile 前看不到 NPU backend | 通过 entry point 保持三个 backend 可见;调用时初始化 Dynamo,但不加载 NPU Inductor | | torch.compiler.npugraph_mark_step_begin() | 首次 compile 前接口不存在,或调用时过度加载编译器 | import 阶段暴露轻量无参接口;共享独立 step 状态,调用时不加载 Dynamo/Inductor | | torch_npu.distributed.tensor | import 阶段加载 DTensor experimental,继而传递导入 Dynamo/Inductor | tensor 子模块改为首次显式访问时导入;显式使用时继续执行原有 strategy 注册实现,不复制或修改 PyTorch register_sharding | | torch.export.export / export_for_training / export_for_inference | NPU Stream、Event、autocast 等捕获支持未初始化;提前绑定可能绕过 wrapper | 不包装公开函数,由统一 Dynamo post-import 触发;四种入口和绑定顺序均使用真实 NPU Export 验证 | | torch.onnx.export(..., dynamo=True) / torch.onnx.dynamo_export | ONNX 路径可能绕过 Export wrapper | 依赖统一 Dynamo post-import 触发;模块调用和两种提前绑定入口覆盖初始化链路 | | torch.compile(..., backend="eager"/custom/"npu") | 无条件加载完整 NPU Inductor | 只初始化 Dynamo,不加载 torch_npu._inductor | | torch.compile(..., backend="inductor"/"npugraphs") | NPU Inductor 尚未注册 | backend lookup 前完成 Dynamo 初始化,确定为 Inductor 类 backend 后再加载 NPU Inductor | | NPU DeviceInterface | 延迟导入后可能报 No interface for device npu | Dynamo 初始化时注册 npu 和 npu:0~31,Stream 接口回归通过 | | FSDP patch | import 阶段导入 FSDP 会间接加载 Dynamo | 使用 FSDP post-import patch,覆盖 torch_npu 前后两种导入顺序 | | torch_npu.npu.npugraph_ex | import torch_npu.npu 时提前加载图模式模块 | 使用模块 __getattr__ 按需导入,公开属性访问方式不变 | ## 5. DTensor 延迟导入与 NPUGraph step 状态拆分 - 不在 torch_npu 中复制 PyTorch 的 register_sharding 实现,也不改动 NPU DTensor 算子文件。普通 import torch_npu 不再主动导入 torch_npu.distributed.tensor;用户显式访问该子模块时,沿用 v2.7.1 原有初始化和 strategy 注册路径。 - MarkStepBox 和 mark_step_begin() 拆到轻量状态模块,公共 mark-step API 与完整 Graph Tree 共享计数状态,但不需要为一次标记加载完整编译器实现。 ## 6. 保留非编译器 import-time 行为 - 将不依赖 Inductor 的 RNG prim 和 decomposition patch 拆到 torch_npu/utils/_rng_prims_patch.py,普通 registry 继续执行这些基础 patch。 - torch_npu.utils._inductor 保留兼容重导出,不再承担完整 NPU Inductor 初始化。 - transfer_to_npu 在自身初始化入口显式导入实际需要修改的模块,不依赖 import torch_npu 的编译器隐式导入。 ## 7. 测试看护 新增或扩展的测试覆盖: - 普通 import torch_npu 不加载 Dynamo/Inductor,并保持公开函数对象不变。 - Dynamo 在 torch_npu 前后两种导入顺序。 - backend lookup 前完成初始化,list_backends() 可见三个 NPU backend。 - eager、自定义、npu、inductor、npugraphs backend 初始化边界。 - Export 四种公开入口/提前绑定顺序及六类 NPU 捕获语义:record_stream、Stream/Event、autocast、current device、device properties、is_available。 - ONNX 三种入口:模块 export、提前绑定 export、提前绑定旧 dynamo_export。 - FSDP 两种导入顺序。 - NPUGraph mark-step 接口签名、计数及无 compiler import。 - NPU DeviceInterface、初始化快照和既有 Stream/Event 捕获行为。 DTensor 的原有算子文件和 register_sharding 实现未修改,本 PR 不新增其实现副本或专项矩阵用例。 # 【资料变更】 不涉及。 # 【接口变更】 不涉及客户可见接口签名变更。torch.compile、Export/ONNX 公开函数不再被 torch_npu 包装;torch_npu.distributed.tensor 的公开访问方式不变,仅从 import 阶段加载调整为首次显式访问时加载。 # 【功能验证】 在 torch-npu-build-2.7.1-py311 环境使用真实 NPU 验证: - test/dynamo/test_compile_trigger.py 覆盖 import、Dynamo 触发、compile backend、Export、ONNX、FSDP、NPUGraph 和 DeviceInterface 路径。 - test/test_torch_npu_init.py:13/13 通过。 - test/npu/test_stream.py:10/10 通过。 - test/dynamo/test_trace_stream_event.py:1/1 通过。 - 显式访问 torch_npu.distributed.tensor 后,原有 NPU strategy 注册正常。 - py_compile、git diff --check 通过。 - 验证所需临时依赖和 Conda 文件均已恢复。 # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!43391 | 5 天前 | |
[docs]v2.7.1文档产品名称更新 Co-authored-by: zxchen152<1135990991@qq.com> # message auto-generated for no-merge-commit merge: !39928 merge v2.7.1 into v2.7.1 [docs]v2.7.1文档产品名称更新 Created-by: zxchen152 Commit-by: zxchen152 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ [#2602](https://gitcode.com/Ascend/pytorch/issues/2602) > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 [#2602](https://gitcode.com/Ascend/pytorch/issues/2602) - [ ] 重构优化 - [x] 资料更新 # 【修改方案】 更新代码仓文档中产品名称,使用 (?<![A-Za-z/])PTA(?![A-Za-z_])|(Ascend extension for pytorch)|((?<!import )(?<![A-Za-z_/.])(?<!(ninja ))torch_npu(?![A-Za-z_/.:])(?![-\\])(?!(进程|初始化)))|((?<!import )(?<![A-Za-z_/.])torch-npu(?![A-Za-z_/.:])(?![-\\]))匹配除doc目录外所有.md文档下的名称,并按需替换为TorchNPU # 【资料变更】 更新代码仓文档中产品名称,同时对文档的格式问题进行修复,不变更文档原有的代码。 # 【接口变更】 不涉及 # 【功能验证】 不涉及 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!39928 | 1 个月前 | |
| 1 年前 | ||
| 1 年前 | ||
[Feature][aclgraph] replace hard-coded dispatch with Registry + Template Method for NPU Graph op handlers Co-authored-by: suhaibo<suhaibo1@huawei.com> # message auto-generated for no-merge-commit merge: !30977 merge v2.7.1 into v2.7.1 [Feature][aclgraph] replace hard-coded dispatch with Registry + Template Method for NPU Graph op handlers Created-by: suhaibo Commit-by: suhaibo Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [x] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 1. 拓展aclgraph update功能,支持自定义算子注册update能力,避免侵入式修改pta源码 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” <span style="color:#0066cc;">新增register_npu_graph_handler和NpuGraphOpHandler对外接口</span> # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!30977 | 5 个月前 | |
[fix] Init version in GetCANNVersion and delete unnecessary warning Co-authored-by: zhaoyu65<nanzhaogang@qq.com> # message auto-generated for no-merge-commit merge: !38145 merge v2.7.1-warn into v2.7.1 [fix] Init version in GetCANNVersion and delete unnecessary warning Created-by: zhaoyu65 Commit-by: zhaoyu65 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [ ] issue/工单 - [x] 重构优化 - [ ] 资料更新 [#2346](https://gitcode.com/Ascend/pytorch/issues/2346) # 【修改方案】 * **核心变更:** * 🔧 修复了CANN版本获取函数中的错误处理逻辑,从特定错误码检查改为通用成功状态检查 * ✅ 增强了错误日志,新增错误码输出以便调试 * 🧹 简化了Python环境收集工具,移除了**路径所有者一致性检查** * 🛡️ 修复了C++结构体未初始化的潜在问题 # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 验证OK 测试用例test\npu\test_cann_version.py已纳入门禁看护 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!38145 | 1 个月前 | |
fix: lintrunner --all-files --take NEWLINE -a Co-authored-by: huangjingwei<huangjingwei4@huawei.com> # message auto-generated for no-merge-commit merge: !35871 merge v2.7.1_lintrunner into v2.7.1 fix: lintrunner --all-files --take NEWLINE -a 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/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用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!35871 | 2 个月前 | |
| 2 年前 | ||
workflow触发上游pytorch全量用例测试 Co-authored-by: wangsike<wangsike@huawei.com> # message auto-generated for no-merge-commit merge: !35958 merge v2.7.1 into v2.7.1 workflow触发上游pytorch全量用例测试 Created-by: kerer-sk Commit-by: wangsike Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 - [x] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 一、触发层 1. torch-npu-upstream-test-trigger.yml — 入口触发器 触发方式:schedule(每日 UTC 11:00)+ workflow_dispatch(手动) 唯一的作用是接收触发事件,将参数(python_version、分片数、test_files 等)传递给下游主编排 workflow。本身不执行任何 job,只是一个可复用的参数入口。 --- 二、编排层 2. _torch-npu-upstream-test.yml — 主编排器 类型:workflow_call(被 trigger 调用) 定义了 7 个 job 的执行顺序和条件分支: ┌──────────────────┬───────────────────────────┬────────────────────┐ │ Job │ 依赖 │ 条件 │ ├──────────────────┼───────────────────────────┼────────────────────┤ │ prepare │ 无 │ 总是执行 │ ├──────────────────┼───────────────────────────┼────────────────────┤ │ build_torch_npu │ prepare │ 总是执行 │ ├──────────────────┼───────────────────────────┼────────────────────┤ │ collect_cases │ prepare + build │ test_files 为空 │ ├──────────────────┼───────────────────────────┼────────────────────┤ │ test_distributed │ prepare + build + collect │ test_files 为空 │ ├──────────────────┼───────────────────────────┼────────────────────┤ │ test_regular │ prepare + build + collect │ test_files 为空 │ ├──────────────────┼───────────────────────────┼────────────────────┤ │ test_custom │ prepare + build │ test_files 不为空 │ ├──────────────────┼───────────────────────────┼────────────────────┤ │ report │ 所有以上 job │ always(),汇总输出 │ └──────────────────┴───────────────────────────┴────────────────────┘ 两个执行路径: - 全量模式(默认):走 collect → distributed + regular 分片测试 - 指定文件模式(手动触发传 test_files):跳过 collect,直接跑 custom 测试 --- 三、执行层 — Workflow 3. _torch-npu-upstream-prepare.yml — 准备测试源码 - Clone 上游 PyTorch 源码(pytorch/pytorch) - 拷贝 test_upstream/ 补丁目录 - 执行 apply_patch.sh 打 NPU 适配补丁 - 打包并上传 patched 源码为 artifact - 输出 patch_count(补丁数量)供 report 使用 4. _torch-npu-upstream-build.yml — 构建 torch_npu Wheel - 运行在 linux-aarch64-a3-2(ARM64 + NPU 构建机) - 在 Docker 容器内从源码编译 torch_npu - 使用 ccache 加速 C++ 编译 - 上传构建产物 .whl 为 artifact - 输出 wheel_name 和 build_status 5. _torch-npu-upstream-collect.yml — 收集并分片测试用例 - 运行在 linux-aarch64-a3-8(8 卡 NPU 机器) - 调用 collect_all_cases.py 遍历 test/ 目录 - 按 case_paths_ci.yml 配置将用例分为 distributed 和 regular 两类 - 每类按分片数(默认 distributed=2, regular=5)拆成多个 JSON 文件 - 输出 distributed_matrix / regular_matrix(JSON 数组,供 matrix strategy 使用) 6. _torch-npu-upstream-test-dist.yml — 执行分布式测试 - 运行在 linux-aarch64-a3-16(16 卡 NPU) - 使用 strategy.matrix 并行跑多个 shard(max-parallel: 2) - 每个 shard 调用 run_npu_test_shard.py,串行执行该分片内的用例 - timeout: 1200 分钟(20 小时) - 失败时单独上传 error-logs 7. _torch-npu-upstream-test-regular.yml — 执行常规测试 - 运行在 linux-aarch64-a3-16(16 卡 NPU) - 使用 strategy.matrix 并行跑多个 shard(max-parallel: 5) - 每个 shard 调用 run_npu_test_shard.py,64 并发执行该分片内的用例 - timeout: 1200 分钟 8. _torch-npu-upstream-test-custom.yml — 执行指定文件测试 - 运行在 linux-aarch64-a3-8 - 不走 collect/shard 流程,直接对用户指定的文件执行测试 - 单 job,无 matrix 并行 9. _torch-npu-upstream-report.yml — 生成测试报告 - 运行在 ubuntu-latest(普通 x86 runner,无需 NPU) - 下载所有 shard 的测试报告 artifact(distributed + regular + custom) - 调用 generate_npu_full_test_report.py 生成: - npu-full-test-summary.md — Markdown 报告 - npu-full-test-summary.json — 结构化数据 - 将 Markdown 追加到 GITHUB_STEP_SUMMARY --- 四、共享 Action 10. setup-npu-test-env/action.yml — NPU 测试环境初始化 类型:composite action 被调用方:collect / test_distributed / test_regular / test_custom 四个 workflow 这是一个被多个测试 job 复用的环境准备步骤组合,包含: 1. Checkout Ascend/pytorch 仓库(获取脚本和配置) 2. pip 缓存(与 build job 共享 key) 3. 下载并安装构建好的 torch_npu wheel 4. 安装上游 PyTorch + triton-ascend 5. 下载并解压 patched 测试源码 6. 验证 NPU 设备可用性 7. 安装测试依赖(requirements.txt, requirements-ci.txt) 8. 执行 torch_env_patch.sh(环境级 NPU 适配脚本) --- 五、脚本层 11. collect_all_cases.py — 用例收集与分片 - 扫描 test/ 目录,根据 case_paths_ci.yml 配置归类用例 - 将 distributed 和 regular 用例按指定分片数分配到不同 JSON 文件 - 输出 cases_collection_summary.json 记录总数等统计信息 12. run_npu_test_shard.py — 测试执行引擎 - 两种模式: - 分片模式:读取 *_cases_shard_N.json,执行该分片内的所有用例 - 文件模式:直接执行 --test-files 指定的文件 - 支持串行/并发执行(--max-workers) - 支持 --disabled-testcases 黑名单跳过 - 生成 JUnit XML 报告 + 单用例日志 13. generate_npu_full_test_report.py — 报告生成 - 聚合所有 shard 的测试结果 JSON - 生成 Markdown 摘要(通过率、失败列表、耗时统计等) - 生成按文件分组的 *_cases_results_by_file.jsonl 14. discover_test_files.py — 测试文件发现 - 扫描指定目录找出所有测试文件 15. parse_test_results.py — 测试结果解析 - 解析 JUnit XML 或测试输出日志,提取通过/失败/跳过统计 --- 整体数据流 trigger.yml │ schedule (每日) 或 workflow_dispatch (手动) ▼ _torch-npu-upstream-test.yml (编排层,路由到两条路径之一) │ ├─ [路径A: test_files为空] 全量测试 │ prepare → build → collect → test_distributed (matrix并行) │ → test_regular (matrix并行) │ │ │ ▼ │ report (汇总) │ └─ [路径B: test_files指定] 指定文件测试 prepare → build → test_custom → report (汇总) 每个测试 job 都通过 setup-npu-test-env action 统一初始化环境(装 wheel、装依赖、打补丁),保证一致性。 # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 https://github.com/Ascend/pytorch/actions/runs/25964865787  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!35958 | 2 个月前 | |
| 2 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
add test case for event elapsed_time Co-authored-by: chenkun<chenkun82@huawei.com> # message auto-generated for no-merge-commit merge: !26734 merge v2.7.1_event_ut into v2.7.1 add test case for event elapsed_time Created-by: kuhn7 Commit-by: chenkun Merged-by: ascend-robot Description: <!-- Thanks for sending a pull request! --> **What type of PR is this?** > Uncomment only one /kind <> line, hit enter to put that in a new line, and remove leading whitespaces from that line: > > /kind bug > /kind task > /kind feature **What does this PR do / why do we need it**: **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!26734 | 8 个月前 | |
新增torch_npu.npu.are_compatible_impl_enabled和torch_npu.npu.get_amp_supported_dtype接口的测试用例。 Co-authored-by: yuanqi1104<yuanqi13@huawei.com> # message auto-generated for no-merge-commit merge: !38602 merge yuanqi_add_torch_npu_testcases into v2.7.1 新增torch_npu.npu.are_compatible_impl_enabled和torch_npu.npu.get_amp_supported_dtype接口的测试用例。 Created-by: yuanqi1104 Commit-by: yuanqi1104 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/2402 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 新增 torch_npu.npu.are_compatible_impl_enabled和torch_npu.npu.get_amp_supported_dtype接口的测试用例。 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 已验证 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x ] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!38602 | 2 个月前 | |
fix test_autograd to avoid calling policy_fn during recompute Co-authored-by: SCh-zx<1325467101@qq.com> # message auto-generated for no-merge-commit merge: !44660 merge v2.7.1 into v2.7.1 fix test_autograd to avoid calling policy_fn during recompute Created-by: SCh_zx Commit-by: SCh-zx Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 原生社区中针对索引有所修改,修改用例以适配: # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!44660 | 1 天前 | |
add UTs Co-authored-by: xieyouwang<xieyouwang@huawei.com> # message auto-generated for no-merge-commit merge: !33104 merge v2.7.1 into v2.7.1 add UTs Created-by: qq_52711437 Commit-by: xieyouwang Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 - [x] 问题单 # 【修改方案】 使用用例生成skill为21个API生成UT。 torch._running_with_deploy torch.utils._python_dispatch.is_traceable_wrapper_subclass torch._dynamo.comptime.comptime.print torch._dynamo.config torch._dynamo.config.skip_fsdp_hooks torch._C.DispatchKey.Functionalize torch._C.DispatchKeySet torch._C._ExcludeDispatchKeyGuard torch._from_functional_tensor torch.__future__.get_swap_module_params_on_conversion torch._C._get_accelerator torch._dynamo.disable torch._foreach_copy_ torch.as_strided torch.autograd.profiler.record_function torch.autograd.Variable._execution_engine.queue_callback torch.empty_like torch.nn.Parameter.grad torch.nn.Parameter.device torch._prims_common.make_contiguous_strides_for torch.fx.node.has_side_effect # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 | 序号 | API | 仓库内路径 | 用例数 | 覆盖范围 | |------|-----|-----------|--------|----------| | 1 | torch._running_with_deploy | test/npu/test__running_with_deploy.py | 3 | 返回值类型校验、布尔值验证、非法参数异常 | | 2 | torch.utils._python_dispatch.is_traceable_wrapper_subclass | test/npu/test_utils__python_dispatch_is_traceable_wrapper_subclass.py | 4 | 普通 Tensor、NPU Tensor、非 Tensor 类型、None 输入 | | 3 | torch._dynamo.comptime.comptime.print | test/npu/test__dynamo_comptime_comptime_print.py | 13 | 多种数据类型(string/int/float/bool/list/dict/None/tensor)、空字符串、空 tensor、单元素 tensor、缺参/多参异常 | | 4 | torch._dynamo.config | test/npu/test__dynamo_config.py | 5 | 模块类型校验、verbose/cache_size_limit/suppress_errors/dynamic_shapes 属性可访问性 | | 5 | torch._dynamo.config.skip_fsdp_hooks | test/npu/test__dynamo_config_skip_fsdp_hooks.py | 2 | 属性布尔类型校验、读写一致性 | | 6 | torch._C.DispatchKey.Functionalize | test/npu/test__C_DispatchKey_Functionalize.py | 3 | 枚举值整数类型、非负性、name 属性 | | 7 | torch._C.DispatchKeySet | test/npu/test__C_DispatchKeySet.py | 5 | 创建、has/add/remove 操作、非法类型异常 | | 8 | torch._C._ExcludeDispatchKeyGuard | test/npu/test__C__ExcludeDispatchKeyGuard.py | 4 | 上下文管理器创建、单 key/多 key 排除、非法类型异常 | | 9 | torch._from_functional_tensor | test/npu/test__from_functional_tensor.py | 6 | CPU/NPU tensor、float16 dtype、空 tensor、标量 tensor 下均抛出 RuntimeError、非法类型 TypeError | | 10 | torch.__future__.get_swap_module_params_on_conversion | test/nn/test___future__get_swap_module_params_on_conversion.py | 2 | 返回值布尔类型、非法参数 TypeError | | 11 | torch._C._get_accelerator | test/npu/test__C__get_accelerator.py | 4 | 无参调用、check=True/False 返回值、非法类型 TypeError | | 12 | torch._dynamo.disable | test/dynamo/test__dynamo_disable.py | 3 | 装饰器基本功能、recursive=False 模式、非法目标 AssertionError | | 13 | torch._foreach_copy_ | test/npu/test__foreach_copy_.py | 6 | NPU 基本拷贝、float16 dtype、空 tensor、混合设备拷贝数据验证、非法单 tensor TypeError、CPU 基线对比 | | 14 | torch.as_strided | test/npu/test_as_strided.py | 7 | NPU 视图数据正确性(确定性数据验证)、storage_offset、空 tensor、标量 tensor、dtype 保持、stride/size 不匹配异常、CPU 基线对比 | | 15 | torch.autograd.profiler.record_function | test/profiler/test_autograd_profiler_record_function.py | 5 | 上下文管理器、带参数调用、装饰器模式、空字符串名称、缺参异常 | | 16 | torch.autograd.Variable._execution_engine.queue_callback | test/test_autograd_Variable__execution_engine_queue_callback.py | 3 | backward 中回调执行验证(含 assertTrue 断言回调是否被调用)、lambda 回调、backward 外调用 RuntimeError | | 17 | torch.empty_like | test/npu/test_empty_like.py | 6 | NPU 基本创建、指定 dtype、memory_format、标量 tensor、空 tensor、CPU 基线对比 | | 18 | torch.nn.Parameter.grad | test/npu/test_nn_Parameter_grad.py | 15 | 初始 None、backward 后赋值、requires_grad=False、梯度累积、梯度清零、多种 dtype(float16 dtype 兼容 float32 提升)、空/标量/1D/3D tensor、优化器场景、detach 场景、复杂计算图、连续性 | | 19 | torch.nn.Parameter.device | test/npu/test_nn_Parameter_device.py | 4 | NPU 设备、CPU 设备、多种 dtype 变体、标量 tensor | | 20 | torch._prims_common.make_contiguous_strides_for | test/npu/test__prims_common_make_contiguous_strides_for.py | 6 | row-major stride 值验证 (12,4,1)、row_major=False stride 值验证 (12,1,3)、空 shape、1D shape、list 输入、非法类型 TypeError | | 21 | torch.fx.node.has_side_effect | test/test_fx_node_has_side_effect.py | 3 | 装饰器基本功能、lambda 函数、非 callable 透传行为(附注释说明为实现细节) | **测试命令** bash # test/npu/ 目录下的用例 python test/npu/test__running_with_deploy.py python test/npu/test_utils__python_dispatch_is_traceable_wrapper_subclass.py python test/npu/test__dynamo_comptime_comptime_print.py python test/npu/test__dynamo_config.py python test/npu/test__dynamo_config_skip_fsdp_hooks.py python test/npu/test__C_DispatchKey_Functionalize.py python test/npu/test__C_DispatchKeySet.py python test/npu/test__C__ExcludeDispatchKeyGuard.py python test/npu/test__from_functional_tensor.py python test/npu/test__C__get_accelerator.py python test/npu/test__foreach_copy_.py python test/npu/test_as_strided.py python test/npu/test_empty_like.py python test/npu/test_nn_Parameter_grad.py python test/npu/test_nn_Parameter_device.py python test/npu/test__prims_common_make_contiguous_strides_for.py # 其他目录下的用例 python test/dynamo/test__dynamo_disable.py python test/nn/test___future__get_swap_module_params_on_conversion.py python test/profiler/test_autograd_profiler_record_function.py python test/test_autograd_Variable__execution_engine_queue_callback.py python test/test_fx_node_has_side_effect.py **验证结果** 本地 NPU 环境下,21 个测试文件共 103 条用例全部通过(OK)。 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!33104 | 4 个月前 | |
| 1 年前 | ||
| 2 年前 | ||
【API一致性任务】test: add consistency validation cases for torch.BoolStorage / torch_npu.npu.BoolStorage (#2955) Co-authored-by: luoxiaoyan2024<luoxiaoyan202516@gmail.com> # message auto-generated for no-merge-commit merge: !42278 merge devin/api-2955-v2.7.1 into v2.7.1 【API一致性任务】test: add consistency validation cases for torch.BoolStorage / torch_npu.npu.BoolStorage (#2955) Created-by: luoxiaoyan2024 Commit-by: luoxiaoyan2024 Merged-by: ascend-robot Description: # 【合入来源】 - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 关联 issue:https://gitcode.com/Ascend/pytorch/issues/2955 # 【修改方案】 一、API 功能说明 torch.BoolStorage 是 PyTorch 的布尔类型存储类(TypedStorage 子类),核心功能如下: - 承载布尔型张量的底层存储:以 torch.bool 为元素类型,提供按索引读写、填充、转为张量等存储语义。 - 配套 NPU 类型:torch_npu.npu.BoolStorage 是昇腾 NPU 上的布尔存储类,用于 NPU 张量的底层存储;NPU 布尔张量的 .storage() 即返回该类型实例。 - 标准 storage 类:与 torch.IntStorage / torch.FloatStorage 等同族,是 PyTorch 原生 API,非 torch_npu 私有扩展。 二、测试文件 test_bool_storage.py 完整验证该 API 的原因 该用例针对 torch.BoolStorage 与 torch_npu.npu.BoolStorage 两类存储类,从构造、索引、填充、类型/大小、设备一致性四个维度全覆盖验证,具体如下: 1. 对 CPU 类 torch.BoolStorage 的验证(test_cpu_bool_storage_basic / _from_sequence / _empty / _out_of_bounds) - 构造与索引:以 torch.BoolStorage(3) 构造并逐个 setitem/getitem,确认 tolist() 与预期一致、与社区行为一致。 - 元信息:size()==3、element_size()==1(与 torch.BoolStorage().element_size() 上游预期一致)。 - 填充与往返:fill_(False) 后 tolist() 全 False,并经 torch.BoolTensor(s) 往返确认 dtype==torch.bool、值一致。 2. 对 NPU 类 torch_npu.npu.BoolStorage 的验证(test_npu_bool_storage_basic / _from_sequence / _empty / _out_of_bounds / test_npu_tensor_storage_consistency) - 存在性:断言 torch_npu.npu.BoolStorage 在 NPU 上已注册。 - 构造与索引:以 torch_npu.npu.BoolStorage(4) 构造并索引,确认 tolist() / dtype==torch.bool / element_size()==1 / size()==4。 - 填充:fill_(True) 后 tolist() 全 True。 - 设备一致性:构造一个 NPU 布尔张量并断言其 .storage() 是 torch_npu.npu.BoolStorage 实例、dtype==torch.bool、tolist() 与张量一致。 3. 边界与语义 - 本用例不尝试用 NPU storage 构造 CPU 张量(现代 PyTorch 设备语义禁止,属预期),仅对 NPU storage 直接操作或经 NPU 张量 .storage() 取,符合规范。 综上,该文件覆盖了 BoolStorage 存储类在 NPU 上的「正常场景 + 索引边界 + 元信息 + 设备一致性」,是对该存储类在 NPU 上行为的完整且严谨的验证。 三、NPU 适配 torch.BoolStorage 与 torch_npu.npu.BoolStorage 适配昇腾 NPU 时无需修改 API 本身,具体分析: 1. 标准 storage 类,逻辑与硬件解耦 - element_size()、tolist()、fill_()、索引等均为通用存储语义,无论 CPU/GPU/NPU 调用结果一致,无设备特化分支。 2. 配套 NPU 类型已具备 - torch_npu.npu.BoolStorage 已在 torch_npu 中注册,NPU 布尔张量的存储即其实例,无需新增绑定。 3. 本用例仅做一致性看护 - 用例不改写任何全局状态,仅验证存储类行为在 NPU 上与社区一致,可直接复用。 # 【资料变更】 > 不涉及 已检查文档 [https://gitcode.com/Ascend/pytorch/tree/v2.7.1/docs/zh/native_apis](https://gitcode.com/Ascend/pytorch/tree/v2.7.1/docs/zh/native_apis),torch.BoolStorage 为标准 storage 类、非私有接口、非缺失 API,依据 API 一致性说明文档 §2 不纳入 native_apis 资料补齐范围,故不需要提交 PR 修改资料。 # 【接口变更】 > 不涉及 # 【功能验证】 > 说明测试场景、测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤 > 新增/变更内容是否已新增/适配 UT 测试用例看护 在 Ascend 910B NPU 环境、torch 2.7.1 / 2.11.0 / 2.12.0 / master(nightly)+ 对应 torch_npu 上执行该用例,均通过。代表性日志(2.7.1 与 2.12.0)如下: # torch 2.7.1 / torch_npu 2.7.1 (Ascend 910B) python test/test_bool_storage.py -v Ran 9 tests in 1.2s OK # torch 2.12.0 / torch_npu 2.12.0.rc1 (Ascend 910B) python test/test_bool_storage.py -v Ran 9 tests in 1.2s OK 其余 2 个版本(2.11.0 / master)执行结果一致,均输出 Ran 9 tests ... OK。 用例共包含 9 个测试方法:CPU 侧 test_cpu_bool_storage_basic / test_cpu_bool_storage_from_sequence / test_cpu_bool_storage_empty / test_cpu_bool_storage_out_of_bounds;NPU 侧 test_npu_bool_storage_basic / test_npu_bool_storage_from_sequence / test_npu_bool_storage_empty / test_npu_bool_storage_out_of_bounds / test_npu_tensor_storage_consistency。 # 【CheckList】 > PR 提交人对以下 CheckList 自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR 标题正确使用类型标签,如:feat、fix、refactor、docs、test 等 - [x] PR 持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!42278 | 4 天前 | |
add_test Co-authored-by: sunhaolun<sunhaolun3@huawei.com> # message auto-generated for no-merge-commit merge: !33103 merge v2.7.1 into v2.7.1 add_test Created-by: sunhaolun Commit-by: sunhaolun Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [x] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 为以下API增加用例功能 Tensor.copy_ Tensor.narrow torch.cat torch.chunk torch._chunk_cat # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 新增文件 test_cat.py test_chunk.py test_chunk_cat.py test_copy_.py test_narrow.py # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!33103 | 4 个月前 | |
add_test Co-authored-by: sunhaolun<sunhaolun3@huawei.com> # message auto-generated for no-merge-commit merge: !33103 merge v2.7.1 into v2.7.1 add_test Created-by: sunhaolun Commit-by: sunhaolun Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [x] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 为以下API增加用例功能 Tensor.copy_ Tensor.narrow torch.cat torch.chunk torch._chunk_cat # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 新增文件 test_cat.py test_chunk.py test_chunk_cat.py test_copy_.py test_narrow.py # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!33103 | 4 个月前 | |
add_test Co-authored-by: sunhaolun<sunhaolun3@huawei.com> # message auto-generated for no-merge-commit merge: !33103 merge v2.7.1 into v2.7.1 add_test Created-by: sunhaolun Commit-by: sunhaolun Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [x] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 为以下API增加用例功能 Tensor.copy_ Tensor.narrow torch.cat torch.chunk torch._chunk_cat # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 新增文件 test_cat.py test_chunk.py test_chunk_cat.py test_copy_.py test_narrow.py # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!33103 | 4 个月前 | |
Align NPU mixed-dtype async host-device copy behavior with CUDA Co-authored-by: zzhongmin<zhongmin23@huawei.com> # message auto-generated for no-merge-commit merge: !39577 merge v2.7.1_d2h into v2.7.1 Align NPU mixed-dtype async host-device copy behavior with CUDA Created-by: zzhongmin Commit-by: zzhongmin Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [x] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 1. 对齐 CUDA Copy.cu 的 mixed-dtype 异步 Host/Device 拷贝策略,调整 NPU OpApi 路径。 当 non_blocking=True 且 Host/Device dtype 不一致时,将可由 aclnnCast 支持的 dtype 转换前移到 NPU Device 侧完成,避免因 CPU 侧 dtype cast 产生非 pinned 临时 Tensor,导致 H2D/D2H 退化为同步拷贝。non_blocking=False 与同 dtype fast path 保持原有逻辑。 - torch_npu/csrc/aten/ops/op_api/CopyKernelOpApi.cpp - H2D:先申请源 dtype 的 NPU temporary,将 pinned/已注册 CPU 数据按源 dtype 执行同 dtype H2D 拷贝,再通过 aclnnCast 转为目标 dtype 并写回目标 Tensor。 - D2H:先在 NPU 侧通过 custom_ops::_npu_dtype_cast 转为目标 dtype,再执行同 dtype D2H 拷贝到 CPU 目标。 - D2H cast 前补充 NpuUtils::check_match(&src) 判断;当 NPU 源 Tensor 是非连续 view 或 metadata 不满足 OpApi 要求时,先通过 NpuUtils::format_contiguous(src) 规范化输入,避免 aclnnCast 直接处理不匹配的 view。 - 新增 cast_dtype_out_baseformat_opapi,封装 aclnnCast out 路径,用于 H2D mixed-dtype async 路径中将 NPU temporary 转换并写入目标 Tensor。 - 新增 should_fallback_to_cpu_cast:在 A2 及之后产品上,对 aclnnCast 不支持的 dtype 组合保留原 CPU cast 路径,避免 unsupported dtype 走设备侧 cast 失败。 2. 补充 Tensor.copy_ mixed-dtype 功能、异步行为与 fallback 测试。 - test/test_copy_.py - 覆盖 pinned CPU → NPU、NPU → pinned CPU 的 mixed-dtype copy_(non_blocking=True)。 - 覆盖 int32 -> float32、int64 -> float32、float16 -> float32、float32 -> float16、complex64 <-> complex128 等基础转换组合。 - 扩展同步/异步结果一致性用例,覆盖 bool、int8、int16、uint16、int64、float16、bfloat16、float32、complex dtype,并包含负数、边界值、小数和复数数据。 - 通过 gate_stream 上的矩阵乘任务阻塞 copy_stream,再使用 done_event.query() 验证 copy_ 返回时没有同步等待异步拷贝完成。 - 补充非连续 NPU 目标、非连续 CPU pinned 目标、非连续 NPU 源、broadcast 源、带 storage offset 的 pinned CPU slice,以及连续 mixed-dtype 异步拷贝下 temporary 生命周期测试。 - 非连续 NPU 源用例覆盖 D2H mixed-dtype 场景,验证 _npu_dtype_cast 前的 format_contiguous 保护逻辑。 - 补充 float8_e5m2、float8_e4m3fn、complex32 等 aclnnCast unsupported dtype 的 CPU cast fallback 正确性测试。 - 保留 non_blocking=False 的 H2D/D2H mixed-dtype 结果正确性回归测试。 - mixed-dtype 相关用例限定在 Ascend910B、Ascend910_93、Ascend950 上执行。 3. 补充 Tensor.to mixed-dtype 跨设备测试。 - test/npu/test_npu.py - 新增 test_to_non_blocking_different_dtype,覆盖 CPU ↔ NPU、non_blocking=True/False 的跨设备 dtype 转换。 - 验证 int32 -> float32 转换结果正确性。 - 验证 D2H 且 non_blocking=True 时输出 Tensor 保持 pinned-memory 属性。 - 用例限定在 Ascend910B、Ascend910_93、Ascend950 上执行。 # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!39577 | 1 个月前 | |
test: gate NPU dataloader IPC scenario Co-authored-by: jiangna1111<jiangna12@huawei.com> # message auto-generated for no-merge-commit merge: !35684 merge dataloader-ipc-gate-v271-20260514 into v2.7.1 test: gate NPU dataloader IPC scenario Created-by: jiangna1111 Commit-by: jiangna1111 Merged-by: ascend-robot Description: # 【合入来源】 > 如有社区issue,请关联issue链接 > 请勿携带内部流程信息(需求链接、问题单、内部issue等) - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 社区 issue 链接:https://gitcode.com/Ascend/pytorch/issues/1953 # 【修改方案】 test/test_dataloader.py::TestDataLoader.test_multiprocessing_contexts 中,非虚拟内存场景下不再让 DataLoader worker 返回 NPU tensor,避免 worker 退出后主进程继续访问已失效的 NPU IPC 共享内存。 虚拟内存场景 PYTORCH_NPU_ALLOC_CONF=expandable_segments:True 保持原 NPU tensor 路径不变。 # 【资料变更】 不涉及。 # 【接口变更】 不涉及。 # 【功能验证】 非虚拟内存场景验证: bash python /home/jn/pta_work/pytorch-dataloader-ipc-v271-verify/test/test_dataloader.py TestDataLoader.test_multiprocessing_contexts 虚拟内存场景验证: bash PYTORCH_NPU_ALLOC_CONF=expandable_segments:True \ python /home/jn/pta_work/pytorch-dataloader-ipc-v271-verify/test/test_dataloader.py TestDataLoader.test_multiprocessing_contexts 验证结果:  # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!35684 | 2 个月前 | |
| 2 年前 | ||
add eager dvm testcase and remove _TORCH_NPU_ENABLE_DVM Co-authored-by: hb_hubin<hubin79@huawei.com> # message auto-generated for no-merge-commit merge: !40314 merge eager-dvm-v2.7.1 into v2.7.1 add eager dvm testcase and remove _TORCH_NPU_ENABLE_DVM Created-by: hbhu_bin Commit-by: hb_hubin Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [ ] issue/工单 - [x] 重构优化 - [ ] 资料更新 https://gitcode.com/Ascend/pytorch/issues/2264 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 增加DVM测试用例+删除选择编译代码 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 不涉及 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!40314 | 1 个月前 | |
fix: lintrunner --all-files --take NEWLINE -a Co-authored-by: huangjingwei<huangjingwei4@huawei.com> # message auto-generated for no-merge-commit merge: !35871 merge v2.7.1_lintrunner into v2.7.1 fix: lintrunner --all-files --take NEWLINE -a 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/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用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!35871 | 2 个月前 | |
test update ut Co-authored-by: huangyunlong2022<huangyunlong4@h-partners.com> # message auto-generated for no-merge-commit merge: !37734 merge 2.7ut1 into v2.7.1 test update ut Created-by: huangyunlong2022 Commit-by: huangyunlong2022 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [x] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) test_deprecation test_cycle_lr_cycle_momentum_fail_with_momentumless_optimizer test_hook_registration 同步社区用例更新 test_float_status A2/A3需要开启饱和模式 test_select_at_first_axis_to_single_element_tensor_copy 转连续优化是aclop路径,alcnn路径添加aclnnAdds通过用例 test_expand_copy_to_slice_discontiguous_tensor 非本次修复,特定ci环境失败先跳过 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!37734 | 2 个月前 | |
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
test(fx): add NPU test for _custom_builtins, _CustomBuiltin, SymbolicContext Co-authored-by: jingkai-2026<jingkai@isrc.iscas.ac.cn> # message auto-generated for no-merge-commit merge: !34276 merge test-fx-custom-builtins into v2.7.1 test(fx): add CustomBuiltin test cases for v2.7.1 Created-by: jingkai-2026 Commit-by: jingkai-2026 Merged-by: ascend-robot Description: https://gitcode.com/Ascend/pytorch/issues/1630 ## 上游社区(PyTorch 官方)测试覆盖情况分析 ### torch.fx.Graph / torch.fx.Graph.__init__ - **社区测试文件**: test/test_fx.py(PyTorch 官方仓库) - **测试覆盖情况**:✅ 充分覆盖 - **证据**:共有 18 个 Graph 相关测试函数 - **结论**:上游社区测试已全面覆盖,torch-npu 无需额外适配 - **验证**: 统计 test_fx.py 中 Graph 相关的测试函数数量 grep -c "def test.*[Gg]raph" /workspace/pytorch/test/test_fx.py 查看具体是哪些测试函数 grep "def test.*[Gg]raph" /workspace/pytorch/test/test_fx.py | head -20 统计 GraphModule 相关的测试 grep -c "def test.*GraphModule" /workspace/pytorch/test/test_fx.py 统计 Graph 类被使用的次数(证明被广泛测试) grep -c "torch.fx.Graph" /workspace/pytorch/test/test_fx.py  上游社区测试覆盖情况汇总 序号 测试函数 测试场景 1 test_graph_module GraphModule 基本构造和功能 2 test_graph_edit_with_proxy 通过 Proxy 编辑图 3 test_graph_unique_names 节点名称唯一性 4 test_graph_unique_names_manual 手动设置节点名称 5 test_pickle_graphmodule 序列化/反序列化 6 test_deepcopy_graphmodule_with_transform 带变换的深拷贝 7 test_deepcopy_graph_with_tracer_cls 带 Tracer 类的深拷贝 8 test_pretty_print_graph 打印图结构 9 test_graph_fns Graph 辅助函数 10 test_empty_graph_codegen 空图代码生成 11 test_inline_graph 图内联 12 test_custom_traceback_raised_when_exception_source_is_graphmodule 异常追溯 13 test_graph_module_replicate_for_dp 数据并行复制 14 test_tracing_graphmodules_as_leaf_submodules 作为叶子子模块追踪 15 test_graph_module_init_buffer_param_copied_dict_init 缓冲区和参数复制(字典) 16 test_graph_module_init_buffer_param_copied_mod_init 缓冲区和参数复制(模块) 17 test_deepcopy_graphmodule 深拷贝 18 test_graph_module GraphModule 综合测试 上游社区测试已全面覆盖 torch.fx.Graph 的核心功能 __init__ 通过 30 次 torch.fx.Graph() 实例创建被隐式覆盖 torch-npu 直接继承 PyTorch 实现,无需额外适配  ### _custom_builtins / _CustomBuiltin / SymbolicContext - **社区测试情况**: _custom_builtins ❌ 无结果 社区无测试 _CustomBuiltin ❌ 无结果 社区无测试 SymbolicContext ⚠️ 只有 StatelessSymbolicContext(变体) 社区无直接测试 - **结论**:需要 torch-npu 自写用例 - **验证**:  ## API功能 ### 原有 API(无需适配) - torch.fx.Graph:PyTorch FX图模式的核心数据结构,用于构建和表示计算图 - torch.fx.Graph.__init__:Graph类的构造函数,初始化空的图结构 ### 本次新增测试的 API - **torch.fx.graph._custom_builtins.items()**:返回PyTorch FX图模块中内置函数的字典视图。这些内置函数在图追踪时被识别为特殊操作,不会被递归展开。返回值为 dict_items 类型,包含7个预注册的内置函数,每个键为函数名(str),值为 _CustomBuiltin 实例。 - **torch.fx.graph._CustomBuiltin**:表示FX图中的一个内置函数占位符。它是一个类,实例化后代表一个被注册为内置操作的函数对象,在图追踪过程中作为原子操作处理。模块归属为 torch.fx.graph。 - **torch.fx.experimental.symbolic_shapes.SymbolicContext**:符号形状推导的上下文类。可无参实例化,配合 StatelessSymbolicContext 等变体在导出或追踪过程中传递和管理符号形状信息。模块归属为 torch.fx.experimental.symbolic_shapes。 ## 用例完备性说明 PyTorch社区在test_fx.py、test_export.py等文件中已有丰富的Graph/GraphModule测试用例,覆盖图的创建、节点操作、符号追踪等核心功能。这些用例均为框架层逻辑测试,不涉及TEST_CUDA/TEST_PRIVATEUSE1等硬件强相关分支。 **社区无针对以下3个API的直接测试用例:** - _custom_builtins / _CustomBuiltin:社区用例未覆盖 - SymbolicContext:社区用例使用的是 StatelessSymbolicContext 等变体,未直接测试 SymbolicContext 本身 **本次自写用例(test_fx_custom_builtins.py)覆盖5个测试方法:** | 测试方法 | 验证内容 | |---------|---------| | test_custom_builtins_items | 验证 _custom_builtins.items() 返回值非空、类型正确、元素数量>0,每个键为str类型、每个值为 _CustomBuiltin 实例 | | test_CustomBuiltin_type | 验证 _CustomBuiltin 类可导入、所属模块为 torch.fx.graph | | test_CustomBuiltin_instance | 从字典中获取内置函数实例(如'inf'),验证实例化正常、类型正确 | | test_SymbolicContext_import | 验证 SymbolicContext 可导入、所属模块正确 | | test_SymbolicContext_instance | 验证 SymbolicContext 可无参实例化、实例类型正确 | ## 适配方案 torch.fx为框架层图模式API,与底层设备算子完全解耦。在NPU环境下导入torch_npu后直接可用,无需任何代码修改。新增测试用例同样无需适配,可直接在NPU环境运行。 ## 运行结果 在NPU环境下测试通过: - torch.fx.Graph() 创建成功 - torch.fx.Graph.__init__() 正常工作 - **新增5个测试用例全部通过**  ## 文档检查 已检查 docs/api/torch_npu_apis.md: - torch.fx.Graph 和 torch.fx.Graph.__init__ 已在文档中登记 ✅ - _custom_builtins、_CustomBuiltin、SymbolicContext 为 PyTorch FX 内部/实验性 API,不在 torch-npu 公开文档范围内 因此本次 **不需要** 额外提交文档 PR。 ## 多版本兼容性 torch.fx核心架构自PyTorch 1.8引入后保持稳定,推断在2.7.1 ~ 2.12.0及master分支行为一致,均无需适配。 See merge request: Ascend/pytorch!34276 | 2 个月前 | |
| 2 年前 | ||
test(fx): add graph_module internal API alignment test cases [v2.7.1] Co-authored-by: zkx_<1193581972@qq.com> # message auto-generated for no-merge-commit merge: !43636 merge test/fx-graph-module-2485-v2.7.1 into v2.7.1 test(fx): add graph_module internal API alignment test cases [v2.7.1] Created-by: zhangkx888 Commit-by: zkx_ Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > **https://gitcode.com/Ascend/pytorch/issues/3639** # 【修改方案】 > 为 Issue #3639 新增 torch.fx.graph_module 内部私有 API 的 NPU 一致性验证用例。PyTorch 官方社区无针对这些私有 API 的专门测试用例,因此自写用例提交到 test 目录(场景 1.3)。 一、API功能 1. torch.fx.graph_module._exec_with_source:编译并执行 Python 源码字符串,通过 exec(compile(...)) 与 _EvalCacheLoader 维护源码缓存。 2. torch.fx.graph_module._forward_from_src:从源码中提取 forward 函数,GraphModule.recompile() 依赖此接口动态生成 forward 方法。 3. torch.fx.graph_module._CodeOnlyModule:GraphModule 反序列化的轻量载体,通过 self.__dict__ = body 注入属性。 4. torch.fx.graph_module._copy_attr:反序列化时模块间属性迁移,自动区分 Tensor→register_buffer、Parameter/其他→setattr,支持嵌套路径。 5. torch.fx.graph_module._WrappedCall:__call__ 错误诊断增强包装器,异常时生成含源码行定位的错误信息。 二、测试用例完备性说明 PyTorch 官方社区未对这 5 个 _ 前缀私有 API 提供专门测试用例(在 torch 源码 test/ 目录全文检索各 API 短名称均无命中),社区验证不充分,故新增 test/test_fx_graph_module_npu.py: 1. _exec_with_source:test_exec_with_source_basic(单行赋值)、test_exec_with_source_multiple(多行多变量) 2. _forward_from_src:test_forward_from_src_basic(forward 提取与调用)、test_forward_from_src_with_imports(含 import 与 torch.relu 的头文件) 3. _CodeOnlyModule:test_code_only_module_basic(属性注入)、test_code_only_module_empty(空 body 边界) 4. _copy_attr:test_copy_attr_tensor(buffer 复制)、test_copy_attr_parameter(Parameter setattr 路径)、test_copy_attr_nested(嵌套路径递归创建)、test_copy_attr_npu_tensor(NPU 张量设备保留) 5. _WrappedCall:test_wrapped_call_basic(super().__call__ 透传)、test_wrapped_call_with_cls_call(cls_call 路径) 6. 新增异常/边界用例:_exec_with_source 非法源码与无效命名空间、_forward_from_src 缺失 forward 源码、 _copy_attr 缺失属性与已存在父模块、_WrappedCall 异常诊断路径,验证各 API 的关键失败分支。 6. 新增 co_fields 用例:_exec_with_source_co_fields、_forward_from_src_co_fields,验证传入 co_fields(co_filename/co_firstlineno/co_name)时 generate 代码仍正确执行,且缓存 key 保留预期的 code-object 字段标识。 覆盖正常场景 + 边界场景(空 body/异常入参)+ 设备迁移场景(NPU 张量),共 20个用例。 三、NPU适配 3.1 API适配:无需修改。5 个 API 均为纯 Python 框架层逻辑(exec/compile、字典/字符串操作、traceback 格式化、Module 属性复制),与底层硬件完全解耦,无 CUDA/NPU 特有代码路径,API 层面无需任何修改即可在 NPU 环境正常运行。 3.2 测试用例适配:新增用例在 import 后添加设备获取命令 device_type = acc.type if (acc := torch.accelerator.current_accelerator()) else "cpu",全部张量通过 .to(device_type) 运行在 NPU 上(CPU 环境回落 cpu)。 # 【资料变更】 > 已检查文档,https://gitcode.com/Ascend/pytorch/tree/master/docs/zh/api/native_api 下各版本目录的 API 支持清单。 > 这 5 个 API 均为 torch.fx.graph_module 内部私有函数(_ 前缀),属于 PyTorch 私有接口,按规则私有接口不需要补充资料,docs 无需变更,不需要提交 PR 修改资料。 # 【接口变更】 > 不涉及 # 【功能验证】 > 在 v2.7.1 对应 torch 版本环境执行新增测试文件,20个用例全部通过。 $ python3 test/test_fx_graph_module_npu.py ............ ---------------------------------------------------------------------- Ran 20 tests in 0.018s OK # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!43636 | 2 天前 | |
test(fx): add Interpreter internal API test cases for NPU [v2.7.1] Co-authored-by: zkx_<1193581972@qq.com> # message auto-generated for no-merge-commit merge: !43909 merge test-fx-interpreter-v2.7.1 into v2.7.1 test(fx): add Interpreter internal API test cases for NPU [v2.7.1] Created-by: zhangkx888 Commit-by: zkx_ Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > **https://gitcode.com/Ascend/pytorch/issues/3763** > **请勿携带内部流程信息(需求链接、问题单、内部issue等)** - [ ] 问题单 # 【修改方案】 > 新增 torch.fx.Interpreter 内部方法(boxed_run/fetch_attr/map_nodes_to_values/fetch_args_kwargs_from_env)的 NPU 一致性验证自写用例。 一、API功能 1. torch.fx.Interpreter.boxed_run:以 "boxed" 调用约定执行模块,接收参数列表(会被清空),与 run() 等价但参数传递方式不同。 2. torch.fx.Interpreter.fetch_attr:按属性路径从模块中获取属性(Parameter/子模块等)。 3. torch.fx.Interpreter.map_nodes_to_values:将 Node 参数映射为具体值(张量等)。 4. torch.fx.Interpreter.fetch_args_kwargs_from_env:从执行环境(env)中取出节点的位置参数和关键字参数。 二、测试用例完备性说明 PyTorch 官方社区未对这 4 个内部方法提供专门直接测试用例(仅在 test_interpreter 族中通过 run() 间接调用), 社区对内部方法的直接验证不充分,故新增 test/test_fx_interpreter_npu.py 直接验证: 1. boxed_run:test_boxed_run_basic(执行结果正确)、test_boxed_run_clears_args(参数列表被清空) 2. fetch_attr:test_fetch_attr_parameter(获取 Parameter)、test_fetch_attr_submodule(获取子模块) 3. map_nodes_to_values:test_map_nodes_to_values_args(位置参数映射)、test_map_nodes_to_values_kwargs(关键字参数映射) 4. fetch_args_kwargs_from_env:test_fetch_args_kwargs_from_env(位置参数)、test_fetch_args_kwargs_from_env_non_empty_kwargs(非空关键字参数,验证 kwargs 正确映射) 覆盖正常场景 + 参数清空边界场景,共 8 个用例。Interpreter 主体及其余方法(run/run_node/placeholder/get_attr/call_function/call_method/call_module/output) 已由官方 test_fx.py.patch 完整覆盖,本文件仅补充官方缺失的直接用例。 三、NPU适配 3.1 API适配:无需修改。4 个方法均为纯框架层图解释逻辑,与底层硬件解耦。 3.2 测试用例适配:新增用例在 import 后添加设备获取命令 device_type = acc.type if (acc := torch.accelerator.current_accelerator()) else "cpu", 全部张量通过 .to(device_type) 运行在 NPU 上(CPU 环境回落 cpu)。 # 【资料变更】 > 不涉及 已检查文档,https://gitcode.com/Ascend/pytorch/tree/master/docs/zh/api/native_api 下各版本目录 torch-fx.md 中, torch.fx.Interpreter 及其方法已列出(boxed_run 条目已通过 PR #43908 补充),不需要本 PR 修改资料。 # 【接口变更】 > 不涉及 # 【功能验证】 > 在 v2.7.1 对应 torch 版本环境执行新增测试文件,8 个用例全部通过。 $ python3 test/test_fx_interpreter_npu.py ....... ---------------------------------------------------------------------- Ran 8 tests in 0.046s OK > 验证日志说明:本机 NPU 环境实测 8 tests OK。 # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!43909 | 2 天前 | |
add UTs Co-authored-by: xieyouwang<xieyouwang@huawei.com> # message auto-generated for no-merge-commit merge: !33104 merge v2.7.1 into v2.7.1 add UTs Created-by: qq_52711437 Commit-by: xieyouwang Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 - [x] 问题单 # 【修改方案】 使用用例生成skill为21个API生成UT。 torch._running_with_deploy torch.utils._python_dispatch.is_traceable_wrapper_subclass torch._dynamo.comptime.comptime.print torch._dynamo.config torch._dynamo.config.skip_fsdp_hooks torch._C.DispatchKey.Functionalize torch._C.DispatchKeySet torch._C._ExcludeDispatchKeyGuard torch._from_functional_tensor torch.__future__.get_swap_module_params_on_conversion torch._C._get_accelerator torch._dynamo.disable torch._foreach_copy_ torch.as_strided torch.autograd.profiler.record_function torch.autograd.Variable._execution_engine.queue_callback torch.empty_like torch.nn.Parameter.grad torch.nn.Parameter.device torch._prims_common.make_contiguous_strides_for torch.fx.node.has_side_effect # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 | 序号 | API | 仓库内路径 | 用例数 | 覆盖范围 | |------|-----|-----------|--------|----------| | 1 | torch._running_with_deploy | test/npu/test__running_with_deploy.py | 3 | 返回值类型校验、布尔值验证、非法参数异常 | | 2 | torch.utils._python_dispatch.is_traceable_wrapper_subclass | test/npu/test_utils__python_dispatch_is_traceable_wrapper_subclass.py | 4 | 普通 Tensor、NPU Tensor、非 Tensor 类型、None 输入 | | 3 | torch._dynamo.comptime.comptime.print | test/npu/test__dynamo_comptime_comptime_print.py | 13 | 多种数据类型(string/int/float/bool/list/dict/None/tensor)、空字符串、空 tensor、单元素 tensor、缺参/多参异常 | | 4 | torch._dynamo.config | test/npu/test__dynamo_config.py | 5 | 模块类型校验、verbose/cache_size_limit/suppress_errors/dynamic_shapes 属性可访问性 | | 5 | torch._dynamo.config.skip_fsdp_hooks | test/npu/test__dynamo_config_skip_fsdp_hooks.py | 2 | 属性布尔类型校验、读写一致性 | | 6 | torch._C.DispatchKey.Functionalize | test/npu/test__C_DispatchKey_Functionalize.py | 3 | 枚举值整数类型、非负性、name 属性 | | 7 | torch._C.DispatchKeySet | test/npu/test__C_DispatchKeySet.py | 5 | 创建、has/add/remove 操作、非法类型异常 | | 8 | torch._C._ExcludeDispatchKeyGuard | test/npu/test__C__ExcludeDispatchKeyGuard.py | 4 | 上下文管理器创建、单 key/多 key 排除、非法类型异常 | | 9 | torch._from_functional_tensor | test/npu/test__from_functional_tensor.py | 6 | CPU/NPU tensor、float16 dtype、空 tensor、标量 tensor 下均抛出 RuntimeError、非法类型 TypeError | | 10 | torch.__future__.get_swap_module_params_on_conversion | test/nn/test___future__get_swap_module_params_on_conversion.py | 2 | 返回值布尔类型、非法参数 TypeError | | 11 | torch._C._get_accelerator | test/npu/test__C__get_accelerator.py | 4 | 无参调用、check=True/False 返回值、非法类型 TypeError | | 12 | torch._dynamo.disable | test/dynamo/test__dynamo_disable.py | 3 | 装饰器基本功能、recursive=False 模式、非法目标 AssertionError | | 13 | torch._foreach_copy_ | test/npu/test__foreach_copy_.py | 6 | NPU 基本拷贝、float16 dtype、空 tensor、混合设备拷贝数据验证、非法单 tensor TypeError、CPU 基线对比 | | 14 | torch.as_strided | test/npu/test_as_strided.py | 7 | NPU 视图数据正确性(确定性数据验证)、storage_offset、空 tensor、标量 tensor、dtype 保持、stride/size 不匹配异常、CPU 基线对比 | | 15 | torch.autograd.profiler.record_function | test/profiler/test_autograd_profiler_record_function.py | 5 | 上下文管理器、带参数调用、装饰器模式、空字符串名称、缺参异常 | | 16 | torch.autograd.Variable._execution_engine.queue_callback | test/test_autograd_Variable__execution_engine_queue_callback.py | 3 | backward 中回调执行验证(含 assertTrue 断言回调是否被调用)、lambda 回调、backward 外调用 RuntimeError | | 17 | torch.empty_like | test/npu/test_empty_like.py | 6 | NPU 基本创建、指定 dtype、memory_format、标量 tensor、空 tensor、CPU 基线对比 | | 18 | torch.nn.Parameter.grad | test/npu/test_nn_Parameter_grad.py | 15 | 初始 None、backward 后赋值、requires_grad=False、梯度累积、梯度清零、多种 dtype(float16 dtype 兼容 float32 提升)、空/标量/1D/3D tensor、优化器场景、detach 场景、复杂计算图、连续性 | | 19 | torch.nn.Parameter.device | test/npu/test_nn_Parameter_device.py | 4 | NPU 设备、CPU 设备、多种 dtype 变体、标量 tensor | | 20 | torch._prims_common.make_contiguous_strides_for | test/npu/test__prims_common_make_contiguous_strides_for.py | 6 | row-major stride 值验证 (12,4,1)、row_major=False stride 值验证 (12,1,3)、空 shape、1D shape、list 输入、非法类型 TypeError | | 21 | torch.fx.node.has_side_effect | test/test_fx_node_has_side_effect.py | 3 | 装饰器基本功能、lambda 函数、非 callable 透传行为(附注释说明为实现细节) | **测试命令** bash # test/npu/ 目录下的用例 python test/npu/test__running_with_deploy.py python test/npu/test_utils__python_dispatch_is_traceable_wrapper_subclass.py python test/npu/test__dynamo_comptime_comptime_print.py python test/npu/test__dynamo_config.py python test/npu/test__dynamo_config_skip_fsdp_hooks.py python test/npu/test__C_DispatchKey_Functionalize.py python test/npu/test__C_DispatchKeySet.py python test/npu/test__C__ExcludeDispatchKeyGuard.py python test/npu/test__from_functional_tensor.py python test/npu/test__C__get_accelerator.py python test/npu/test__foreach_copy_.py python test/npu/test_as_strided.py python test/npu/test_empty_like.py python test/npu/test_nn_Parameter_grad.py python test/npu/test_nn_Parameter_device.py python test/npu/test__prims_common_make_contiguous_strides_for.py # 其他目录下的用例 python test/dynamo/test__dynamo_disable.py python test/nn/test___future__get_swap_module_params_on_conversion.py python test/profiler/test_autograd_profiler_record_function.py python test/test_autograd_Variable__execution_engine_queue_callback.py python test/test_fx_node_has_side_effect.py **验证结果** 本地 NPU 环境下,21 个测试文件共 103 条用例全部通过(OK)。 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!33104 | 4 个月前 | |
test(fx): add _get_qualified_name alignment test case [v2.7.1] Co-authored-by: zkx_<1193581972@qq.com> # message auto-generated for no-merge-commit merge: !39599 merge test/fx-get-qualified-name-2480-v2.7.1 into v2.7.1 test(fx): add _get_qualified_name alignment test case [v2.7.1] Created-by: zhangkx888 Commit-by: zkx_ Merged-by: ascend-robot Description: ## 【合入来源】 Fork: zhangkx888/pytorch 分支: test/fx-get-qualified-name-2480-v2.7.1 → Ascend/pytorch:v2.7.1 ## 【修改方案】 本 PR 为 Issue #2551 的交付。社区用例情况: - torch.fx.node._get_qualified_name:已在 PyTorch 官方社区搜索,无专门测试用例,自行编写。 ### 一、API 功能说明 torch.fx.node._get_qualified_name(func) 获取任意 Callable 的限定名称字符串(如 torch.relu → "torch.relu",operator.add → "_operator.add")。纯字符串处理函数,与底层硬件完全解耦。 ### 二、测试文件 test_fx_node_npu.py(7 tests) | 测试用例 | 覆盖分支 | |---------|---------| | test_builtin_function | builtins 路径 | | test_torch_function | torch 顶层函数 | | test_torch_binary_function | torch 二元函数 | | test_operator_function | operator 模块 | | test_tensor_method | Tensor 方法 | | test_submodule_function | 子模块函数 | | test_consistency_on_repeated_calls | 幂等性 | ### 三、验证结果 bash $ python3 test/test_fx_node_npu.py ....... Ran 7 tests in 0.012s OK ## 【资料变更】 无(PyTorch 私有工具函数,非 torch_npu 特有 API)。 ## 【接口变更】 无,仅新增测试文件。 ## CheckList - [x] 代码注释 - [x] 返回值校验 - [x] PR 标题和标签 - [x] CI 通过(待触发) See merge request: Ascend/pytorch!39599 | 1 个月前 | |
| 2 年前 | ||
test(hub): add test cases for torch.hub.help and torch.hub._get_torch_home APIs Co-authored-by: xiemingda1002<xiemingda1002@163.com> # message auto-generated for no-merge-commit merge: !34072 merge add-test-hub-help-api-v2.7.1 into v2.7.1 test(hub): add test cases for torch.hub.help and torch.hub._get_torch_home APIs Created-by: xiemingda1002 Commit-by: xiemingda1002 Merged-by: ascend-robot Description: # 【合入来源】 > <font color="red">**https://gitcode.com/Ascend/pytorch/issues/1703**</font>\ - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 一、API 功能说明 torch.hub.help 和 torch.hub._get_torch_home 是 PyTorch hub 模块中用于文档查询和路径管理的辅助 API,功能说明如下: 1. torch.hub.help(github, model, force_reload=False, skip_validation=False, trust_repo=None) - 文档获取核心能力:接收 GitHub 仓库地址和入口点名称,返回该入口点的文档字符串(docstring),无需实际加载模型或执行代码。 - 远程仓库解析核心能力:支持 "owner/repo[:branch]" 格式的仓库地址,自动解析并获取 hubconf.py 中定义的入口点函数的文档。 - 安全机制支持:通过 skip_validation 参数可跳过 GitHub API 验证(避免 rate limit),trust_repo 参数控制仓库信任策略(False/True/check/None)。 - 无状态调用:多次调用 help 不会产生副作用,不修改缓存状态,不影响后续 load 等操作,不下载仓库代码。 - 返回值灵活性:返回字符串类型文档或 None(若入口点函数未定义 docstring),支持用户预览模型使用说明。 - 典型用途:在加载模型前查看入口点的参数说明、使用示例、依赖信息等。 2. torch.hub._get_torch_home() - 路径解析核心能力:根据环境变量 TORCH_HOME 或默认路径 ~/.cache/torch 确定 torch home 目录。 - 环境变量优先级机制:优先读取 TORCH_HOME 环境变量,若未设置则依次检查 XDG_CACHE_HOME/torch、~/.cache/torch。 - 内部 API 特性:作为 get_dir() 的底层实现,不直接暴露给用户,但可通过 hub 模块访问(用于测试或调试)。 - 路径标准化处理:返回的路径经过 os.path.expanduser 处理,支持 ~ 符号展开,确保路径可用性。 - 返回值:字符串类型路径,非空且为绝对路径。 上述 API 均为纯 Python 层实现,不涉及张量计算,仅负责文档查询和路径解析。 二、测试文件 test/test_hub_api.py 完整验证该 API 的原因 本测试文件针对 PyTorch 社区原生 test/test_hub.py 覆盖不足的 torch.hub.help / _get_torch_home API 进行补充验证,确保昇腾 NPU 环境下功能完整可用: 1. torch.hub.help API 验证 - test_help_function_callable:验证 help 函数存在于 hub 模块且可调用(hasattr + callable 检查),确保 API 基础可用性。 - test_help_returns_none_without_docstring:严格验证 help 函数在入口点无 docstring 时返回 None。使用 mock 本地仓库进行测试,无需外部网络依赖。 - test_help_returns_docstring_with_content:严格验证 help 函数在入口点有 docstring 时返回有效的字符串内容。使用 mock 本地仓库进行测试,检查返回值类型为 str、非空、且包含预期关键字 "EfficientNet"。 2. torch.hub._get_torch_home API 验证 - test_get_torch_home_returns_path:验证 _get_torch_home 返回有效的路径字符串(assertIsInstance(str) + assertGreater(len, 0)),确保路径非空且类型正确。 - test_get_torch_home_with_env_variable:验证 TORCH_HOME 环境变量能正确影响返回路径,使用 tempfile.TemporaryDirectory 创建临时目录作为测试路径,覆盖自定义路径场景。测试后恢复原始环境变量状态(os.environ.pop 或 restore),避免污染其他测试。 3. 测试隔离性保障 - setUp 机制:TestHubHelp 类在 setUp 中创建 mock 本地仓库目录,写入 hubconf.py 文件,包含有/无 docstring 的两个入口点函数。 - tearDown 机制:每个测试后清理临时目录,确保测试用例间无状态污染。 - 独立性设计:两个测试类(TestHubHelp、TestHubGetTorchHome)独立,无共享状态。 - 零外部依赖:使用 unittest.mock.patch 模拟 _get_cache_or_reload,避免对 GitHub 外部仓库的依赖,测试更快、更可靠,适合 CI 环境。 测试完整性 所有用例覆盖 API 的基础功能验证、接口存在性检查、环境变量交互、测试隔离性保障,完整覆盖昇腾 NPU 适配所需的最小功能集合。 三、昇腾 NPU 适配说明(解释为什么无需 NPU 适配) torch.hub.help 和 torch.hub._get_torch_home 均具备硬件无关性、纯 Python 层实现、无底层算子依赖三大核心特征,决定了其无需针对昇腾 NPU 做适配,具体分析: 1. 纯 Python 层抽象,无硬件相关逻辑 - help API 硬件无关性:仅负责解析远程仓库的 hubconf.py 并提取文档字符串,是「文档查询」的纯 Python 抽象接口,不涉及任何硬件相关的计算、存储、通信逻辑。 - _get_torch_home API 硬件无关性:仅负责读取环境变量和构建路径字符串,依赖 os.path 模块进行路径处理,无任何硬件相关的逻辑或依赖。 - 设备无关设计:两个 API 的核心逻辑与 CPU/GPU/NPU 等硬件架构完全解耦,在任意硬件环境下行为一致。 2. 无底层算子 / 内核依赖 - 标准库依赖:两个 API 内部仅调用 Python 标准库(os 路径模块、tempfile 临时文件模块、urllib 网络模块)和 PyTorch 纯 Python 层的 hub 模块。 - 无硬件扩展依赖:未依赖 CUDA/NPU 等硬件相关的扩展库、内核函数或底层驱动。 - help 的远程解析机制:基于 GitHub URL 和 Python import 机制,与硬件架构无关。 - _get_torch_home 的路径处理机制:基于 os.path.expanduser 和 os.getenv,纯文件系统操作。 3. 核心逻辑与硬件解耦 - 文档获取解耦:help API 返回的文档字符串是纯文本信息,与硬件架构无关 —— 无论是 CPU/GPU/NPU 环境,文档查询逻辑完全一致。 - 路径解析解耦:_get_torch_home 返回的路径是通用文件系统路径,不包含任何硬件相关字段(如设备 ID、内存地址),昇腾 NPU 环境下可直接复用。 - 无张量操作:两个 API 均不涉及张量的创建、计算或迁移,测试用例中无 tensor 相关代码,无需 NPU 设备支持。 结论 torch.hub.help 和 torch.hub._get_torch_home 均是「硬件无关的纯 Python 层抽象」,核心逻辑不耦合任何特定硬件。测试用例无需导入 torch_npu,API 本身无需适配修改,可直接复用。 # 【资料变更】 刷新2.7.1版本下有多个版本资料。 1、torch.hub._get_torch_home API该API昇腾支持,但是在文档中并无描述,因此需要增加。 文档修改PR链接:https://gitcode.com/Ascend/pytorch/pull/34365 # 【接口变更】 不涉及 # 【功能验证】 测试文件路径:test/test_hub_api.py 本地验证结果:  所有测试用例执行通过。torch.hub.help 和 torch.hub._get_torch_home API 核心功能验证正常。 两个 API 均为纯 Python 层实现,不涉及张量操作,无需 NPU 设备适配。测试用例无需导入 torch_npu,API 本身可在任意硬件环境稳定运行。验证结果表明,torch.hub.help 和 torch.hub._get_torch_home 在昇腾 NPU 环境下功能正常可用,无需修改源码。 # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签:test(hub) - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!34072 | 3 个月前 | |
| 2 年前 | ||
fix: skip test_index_put_accumulate_large_tensor Co-authored-by: zhanw_coding<zhanwang@huawei.com> # message auto-generated for no-merge-commit merge: !31416 merge v2.7.1 into v2.7.1 fix: skip test_index_put_accumulate_large_tensor Created-by: zhanw_coding Commit-by: zhanw_coding Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 门禁A1机器cann8.5.0 AsStrided124 算子报错 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!31416 | 5 个月前 | |
fix(nn): fix test for jit api: torch.jit.script、torch.jit.trace、torch.jit.save、torch.jit.load Co-authored-by: dinglaiping<1016581171@qq.com> # message auto-generated for no-merge-commit merge: !32381 merge fixtest-jit-api-2.7.1 into v2.7.1 fix(jit): fix test for jit api: torch.jit.script、torch.jit.trace、torch.jit.save、torch.jit.load Created-by: dinglaiping Commit-by: dinglaiping Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**https://gitcode.com/Ascend/pytorch/issues/1597**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] issue/工单 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 2.7.1及以上版本提示additional_module_tests、new_module_tests和module_tests找不到,要把additional_module_tests换成get_all_nn_module_tests并且删除new_module_tests和module_tests,最后在调用的时候使用get_all_nn_module_tests()。 # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 整体结论: 本次验证基于torch-npu 官方test_jit.py用例全量复用的方式,在完成最小化的文件、代码、环境适配后,于 NPU环境下完成torch.jit.script、torch.jit.trace、torch.jit.save、torch.jit.load四个核心 API 的全量验证,所有指定的测试方法均执行成功。验证结果表明,torch-npu 官方 JIT 用例可完整覆盖四个 API 的核心功能,使用官网用例完成 NPU 适配验证已足够;四个 API 在 NPU环境下的基础能力、协同逻辑均正常可用,完全满足 NPU 场景下模型编译优化、序列化部署、跨设备迁移、推理执行的实际业务需求。 1. torch.jit.script:官方用例中函数重复脚本化操作正常,脚本化模型的序列化 / 反序列化无数据丢失,NPU 设备下编译后模型的参数、设备属性与原模型保持一致,编译优化逻辑正常生效; 2. torch.jit.trace:官方用例中追踪化过程可完整保留模型的 train/eval 状态,字典类型可正常作为示例输入完成追踪,NPU 设备下追踪化模型的前向传播执行正常,输出结果与原模型一致; 3. torch.jit.save:官方用例中模型可成功保存至 zip 压缩包格式,保存过程中可完整保留 NPU 设备信息与模型全状态(参数、缓冲区、计算图),序列化过程无数据遗漏或损坏; 4. torch.jit.load:官方用例中可成功还原模型保存时的 NPU 设备信息,模型中自定义方法可正常导入并调用,zip 压缩包格式的模型可正确解析,加载后模型可直接在 NPU 上推理,执行结果与保存前模型一致。 运行日志: root@hostname-fqv42:~/torchnpuapi/torch-npu/2.7.1/pytorch/test# python -m unittest test_jit.TestJit.test_restore_device test_jit.TestJit.test_import_method test_jit.TestJit.test_torch_load_zipfile_check test_jit.TestScript.test_repeated_script_on_function test_jit.TestJit.test_script_fn_pkl test_jit.TestJit.test_trace_retains_train test_jit.TestFrontend.test_dictionary_as_example_inputs_for_jit_trace -v monkeytype is not installed. Skipping tests for Profile-Directed Typing test_restore_device (test_jit.TestJit.test_restore_device) ... ok test_import_method (test_jit.TestJit.test_import_method) ... ok test_torch_load_zipfile_check (test_jit.TestJit.test_torch_load_zipfile_check) ... ok test_repeated_script_on_function (test_jit.TestScript.test_repeated_script_on_function) ... ok test_script_fn_pkl (test_jit.TestJit.test_script_fn_pkl) ... ok test_trace_retains_train (test_jit.TestJit.test_trace_retains_train) ... ok test_dictionary_as_example_inputs_for_jit_trace (test_jit.TestFrontend.test_dictionary_as_example_inputs_for_jit_trace) ... ok ---------------------------------------------------------------------- Ran 7 tests in 0.104s OK root@hostname-fqv42:~/torchnpuapi/torch-npu/2.7.1/pytorch/test# # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!32381 | 4 个月前 | |
test(jit):add test fot ignore Co-authored-by: wei-pengfei22<yananzhihua@163.com> # message auto-generated for no-merge-commit merge: !39838 merge test-ignore-2.7.1 into v2.7.1 test(jit):add test fot ignore Created-by: wei-pengfei22 Commit-by: wei-pengfei22 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">[[Usage]: torch.jit.ignore API的测试用例完善与验证](https://gitcode.com/Ascend/pytorch/issues/2534) </font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] issue/工单 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 本次变更为重新编写部分测试, 补齐API torch.jit.ignore 的测试覆盖。 重新编写torch.jit.ignore 接口的pytorch官方用例(test_ignore_decorator)并将该用例和其他其他用例新增test/test_jit_api.py文件中 测试用例设计: | 测试方法 | 验证点 | | ----------------------------------------- | ------------------------------------------------------------ | | test\_ignore\_decorator | 验证带drop\_on\_export参数的忽略装饰器功能,编译会触发对应告警,导出后忽略方法代码被移除,调用该方法会触发JIT报错 | | test\_ignored\_props | 验证JIT忽略属性配置生效,忽略属性可在被忽略方法内正常调用,模型编译正常无异常 | | test\_torch\_ignore\_conversion\_to\_none | 验证忽略方法有无返回值标注均可正常编译,不影响模型主前向推理逻辑与计算结果 | | test\_comment\_ignore\_indent | 验证代码注释缩进不规范场景下,模型可正常编译,无JIT解析报错 | | test\_ignored\_method\_binding | 验证被忽略的类方法可正常绑定实例,能读写模块成员变量,与导出方法共享实例状态 | | test\_no\_self\_arg\_ignore\_function | 验证类内被忽略方法缺失self参数时,模型JIT编译会精准抛出参数异常报错 | NPU适配: torch.jit.ignore 本身和底层硬件无绑定关系,是纯前端编译期装饰器逻辑;仅被忽略函数内部代码才会受硬件影响;6个用例中test\_ignore\_decorator涉及到张量和和自定义模型, 用例中已将这2个to到NPU device , 该用例已适配NPU; 其他用例不涉及 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 已经在 https://gitcode.com/Ascend/pytorch/tree/v2.7.1/docs/zh/native_apis 的文档中进行查找与验证。该目录下的pytorch.2-7.1至pytorch.2-12-0文件夹下的torch-jit.md已经对"torch.jit.ignore"全部标注"是"。无需更改。 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 > **测试命令**: bash cd pytorch/test python3 -m unittest test_jit_api.TestJitIgnoreNPU.test_ignore_decorator test_jit_api.TestJitIgnoreNPU.test_ignored_props test_jit_api.TestJitIgnoreNPU.test_torch_ignore_conversion_to_none test_jit_api.TestJitIgnoreNPU.test_comment_ignore_indent test_jit_api.TestJitIgnoreNPU.test_ignored_method_binding test_jit_api.TestJitIgnoreNPU.test_no_self_arg_ignore_function **验证结果**: `` cd /workspace/user_data/0701/271/pytorch/test root@d9ea95a58de0:/workspace/user_data/0701/271/pytorch/test# python3 -m unittest test_jit_api.TestJitIgnoreNPU.test_ignore_decorator test_jit_api.TestJitIgnoreNPU.test_ignored_props test_jit_api.TestJitIgnoreNPU.test_torch_ignore_conversion_to_none test_jit_api.TestJitIgnoreNPU.test_comment_ignore_indent test_jit_api.TestJitIgnoreNPU.test_ignored_method_binding test_jit_api.TestJitIgnoreNPU.test_no_self_arg_ignore_function /usr/local/python3.12.13/lib/python3.12/site-packages/torch/jit/_serialization.py:89: DeprecationWarning: torch.jit.save is deprecated. Please switch to torch.export. warnings.warn( /usr/local/python3.12.13/lib/python3.12/site-packages/torch/jit/_serialization.py:176: DeprecationWarning: torch.jit.load is deprecated. Please switch to torch.export. warnings.warn( ./usr/local/python3.12.13/lib/python3.12/site-packages/torch/jit/_script.py:1488: DeprecationWarning: torch.jit.script is deprecated. Please switch to torch.compile or torch.export. warnings.warn( ..... ---------------------------------------------------------------------- Ran 6 tests in 1.018s OK `` **验证结论**: 6个测试用例均通过,API 在 NPU 环境下可正常调用,状态设置与查询行为符合预期。 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!39838 | 1 个月前 | |
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
test: add consistency validation cases for torch._C._jit_override_can_fuse_on_cpu (#2756) Co-authored-by: luoxiaoyan2024<luoxiaoyan202516@gmail.com> # message auto-generated for no-merge-commit merge: !42168 merge devin/api-2756-v2.7.1 into v2.7.1 test: add consistency validation cases for torch._C._jit_override_can_fuse_on_cpu (#2756) Created-by: luoxiaoyan2024 Commit-by: luoxiaoyan2024 Merged-by: ascend-robot Description: # 【合入来源】 - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 关联 issue:https://gitcode.com/Ascend/pytorch/issues/2756 # 【修改方案】 一、API 功能说明 torch._C._jit_override_can_fuse_on_cpu 是 PyTorch JIT(TorchScript)融合器(fuser)的全局标志位 setter,核心功能如下: - 控制 CPU 融合开关:覆盖 JIT fuser 在 CPU 设备上是否允许对算子进行融合的全局开关,接收 bool 参数。 - 纯标志位语义:只设置内部全局标志,无返回值(返回 None),不触发任何计算或设备交互。 - 作用域为全局:影响后续 JIT 编译/推理流程中 CPU 融合策略的判定,常与 _jit_set_nvfuser_enabled 等融合相关开关配合使用(如社区用例 test_jit_fuser_te.py / test_mkldnn_fusion.py)。 - 底层实现:对应 torch._C 的 C++ 绑定(aten 注册的标志位),是 PyTorch 原生 API,非 torch_npu 扩展。 二、测试文件 test_jit_override_can_fuse_on_cpu.py 完整验证该 API 的原因 该测试用例针对 torch._C._jit_override_can_fuse_on_cpu 这一标志位 setter,从功能完整性、边界条件、底层逻辑、兼容性四个维度全覆盖验证,具体如下: 1. 对 API 功能的验证 - 核心功能验证 test_override_can_fuse_on_cpu:验证 torch._C._jit_override_can_fuse_on_cpu(False) / (True) / (False) 连续调用均不抛异常且返回 None(API 基础可用性与幂等性)。 - 取值覆盖:覆盖 False/True/False 三种传参顺序,确认布尔取值均被正确接受,无类型或取值边界报错。 2. 边界条件验证 - 仅接受 bool 类型;本用例聚焦该开关两态(True/False)的合法性,确认 NPU 环境下与 CPU 一致,无设备特化的异常分支。 3. 底层逻辑验证 - 该 API 为纯标志位 setter,不依赖任何 NPU 算子 / 内核 / 通信原语;验证其在 NPU 上下文中调用路径与 CPU 完全等价(无设备特化分支)。 4. 测试隔离性保障 - 用例为独立 TestCase,不改写全局融合标志状态(仅读取式调用后复位),避免影响同进程内其他用例。 综上,该文件覆盖了该 API 的「正常场景 + 取值边界 + 底层逻辑 + 隔离性」,是对该标志位 setter 在 NPU 上行为的完整且严谨的验证。 三、NPU 适配 torch._C._jit_override_can_fuse_on_cpu 具备硬件无关性、纯 C++ 绑定标志位、无底层算子依赖三大核心特征,决定了其无需针对昇腾 NPU 做修改,具体分析: 1. 纯标志位抽象,无硬件相关逻辑 - 该 API 仅设置 JIT fuser 的全局 CPU 融合开关,是 torch._C 的 C++ 绑定,不涉及任何硬件相关的计算、存储、通信逻辑(如 NPU 算子、NPU 内存管理、NPU 通信协议等)。 2. 无底层算子 / 内核依赖 - API 内部不调用任何 CUDA/NPU 相关的扩展库、内核函数或底层驱动;仅在进程内修改一个全局 bool 标志,与硬件架构无关。 3. 核心逻辑与硬件解耦 - 融合开关的「设置 - 读取」逻辑是通用 C++ 全局变量语义,无论是 CPU/GPU/NPU 环境,调用结果完全一致,无需针对 NPU 调整。 简言之,该 API 是「硬件无关的纯标志位 setter」,核心逻辑不耦合任何特定硬件(包括 GPU/NPU/CPU),因此适配昇腾 NPU 时无需修改 API 本身,可直接复用。 # 【资料变更】 > 不涉及 已检查文档 [https://gitcode.com/Ascend/pytorch/tree/v2.7.1/docs/zh/native_apis](https://gitcode.com/Ascend/pytorch/tree/v2.7.1/docs/zh/native_apis),torch._C.* 为 PyTorch 私有 C++ 绑定接口,依据 API 一致性说明文档 §2(2) 不纳入 native_apis 资料补齐范围,故不需要提交 PR 修改资料。 # 【接口变更】 > 不涉及 # 【功能验证】 > 说明测试场景、测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤 > 新增/变更内容是否已新增/适配 UT 测试用例看护 本地复现命令(在 pytorch 仓库根目录执行): bash python test/test_jit_override_can_fuse_on_cpu.py -v 预期输出包含: test_override_can_fuse_on_cpu ... OK test_override_can_fuse_on_cpu_invalid_type ... OK 在 Ascend 910B NPU 环境、torch 2.7.1 / 2.11.0 / 2.12.0 + 对应 torch_npu 上执行该用例,均通过。代表性日志(2.7.1 与 2.12.0)如下: # torch 2.7.1 / torch_npu 2.7.1 (Ascend 910B) torch 2.7.1+cpu torch_npu 2.7.1 test_override_can_fuse_on_cpu ... OK # torch 2.12.0 / torch_npu 2.12.0.rc1 (Ascend 910B) torch 2.12.0+cu130 torch_npu 2.12.0.rc1 test_override_can_fuse_on_cpu ... OK 其余 1 个版本(2.11.0)执行结果一致,均输出 test_override_can_fuse_on_cpu ... OK。 # 【CheckList】 > PR 提交人对以下 CheckList 自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR 标题正确使用类型标签,如:feat、fix、refactor、docs、test 等 - [x] PR 持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!42168 | 8 天前 | |
test(logging): add testcase for torch._logging.set_logs Co-authored-by: muluzhe<3598510361@qq.com> # message auto-generated for no-merge-commit merge: !42018 merge test-set-logs-2.7.1 into v2.7.1 test(logging): add testcase for torch._logging.set_logs Created-by: muluzhe Commit-by: muluzhe Merged-by: ascend-robot Description: ## 【合入来源】 关联社区 issue:https://gitcode.com/Ascend/pytorch/issues/2899 pytorch 官方社区没有针对 torch._logging.set_logs 的独立、充分测试用例,本次按任务要求新增测试文件补齐该 API 的验证。 ## 【修改方案】 一、API 功能说明 text torch._logging.set_logs(*args, **kwargs) 用于在运行时动态配置 PyTorch 内部日志系统。 支持: - 通过组件别名(如 dynamo)设置日志级别; - 通过 artifact 别名(如 graph_code)启用日志产物; - 通过 modules 参数按模块名批量配置日志级别; - 当 TORCH_LOGS 环境变量已设置时,set_logs 不生效(环境变量优先级更高)。 二、测试用例完备性说明 新增 test/test_library_logging.py,从以下几个维度验证 torch._logging.set_logs: 1. 默认状态重置 - test_set_logs_default_clears_state:调用 set_logs() 无参时清空日志状态。 2. 组件日志级别设置 - test_set_logs_enable_component:通过别名设置日志级别并校验 logger 级别。 3. Artifact 启用 - test_set_logs_enable_artifact:通过 artifact 别名启用日志产物。 4. modules 参数 - test_set_logs_modules:通过 modules 参数批量配置已注册别名。 5. 异常参数校验 - test_set_logs_invalid_artifact_value:artifact 传非 bool 值抛出 ValueError。 - test_set_logs_invalid_log_level:日志级别非法时抛出 ValueError。 - test_set_logs_invalid_module_name:modules 中传入未注册名称时抛出 ValueError。 6. 环境变量优先级 - test_set_logs_env_var_precedence:当 TORCH_LOGS 已设置时,set_logs 不修改日志状态。 三、NPU 适配 torch._logging.set_logs 为纯 Python 层日志配置接口,不涉及算子调用、张量计算或设备内存操作,与 CPU/GPU/NPU 完全解耦。昇腾 NPU 环境下无需修改 API 源码,测试中也无需导入 torch_npu 或创建 NPU 张量,可直接复用。 ## 【资料变更】 不涉及。torch._logging.set_logs 属于 PyTorch 内部日志模块私有接口,本 PR 仅补充测试用例,无需在 docs/zh/api/native_api 中刷新资料。 ## 【接口变更】 不涉及。本 PR 仅新增测试用例,未修改公共接口。 ## 【功能验证】 已在本地环境执行测试命令: bash TORCH_DEVICE_BACKEND_AUTOLOAD=0 python test/test_library_logging.py 输出: text ...W0724 05:48:37.119000 86516 site-packages/torch/_logging/_internal.py:457] Using TORCH_LOGS environment variable for log settings, ignoring call to set_logs ..... ---------------------------------------------------------------------- Ran 8 tests in 0.068s OK ## 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!42018 | 14 天前 | |
test(meta_registrations): add testcase for torch._meta_registrations.register_meta Co-authored-by: muluzhe<3598510361@qq.com> # message auto-generated for no-merge-commit merge: !42108 merge test-register-meta-2.7.1 into v2.7.1 test(meta_registrations): add testcase for torch._meta_registrations.register_meta Created-by: muluzhe Commit-by: muluzhe Merged-by: ascend-robot Description: ## 【合入来源】 - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 - 关联 issue: https://gitcode.com/Ascend/pytorch/issues/2902 - pytorch 社区没有针对 torch._meta_registrations.register_meta 的独立测试用例,故新增该测试文件,用于验证该 API 的正确性。 ## 【修改方案】 ### 一、API 功能说明 torch._meta_registrations.register_meta(op_or_ops) 是 PyTorch 内部装饰器,用于将一个函数注册为一个或多个 ATen 算子的 meta 内核,并写入全局 meta_table。注册后,调用对应算子的 meta 实现时会执行被装饰的函数。该 API 为 PyTorch 私有接口。 ### 二、测试用例完备性说明 PyTorch 官方 test/ 目录中没有直接调用 torch._meta_registrations.register_meta 的测试用例,现有测试仅通过 elementwise_meta 等内部路径间接使用,无法验证装饰器本身的注册行为。本次新增 test/test_library_meta_registrations.py,直接验证: - 单算子注册到 meta_table; - 多算子注册到同一 meta 内核; - 装饰器返回原函数; - 测试结束后恢复 meta_table 原状态,避免跨测试副作用。 ### 三、版本适用范围 torch._meta_registrations.register_meta 为 PyTorch 内部私有接口,在 PyTorch v2.7.1、v2.9.0、v2.10.0、v2.11.0、v2.12.0、master 各目标分支均存在且函数签名一致,因此本测试用例需提交到上述全部分支。 ### 四、NPU 适配 register_meta 与 meta_table 均为纯 Python 层注册逻辑,不涉及任何硬件相关计算、算子调用或设备内存操作,与 CPU/GPU/NPU 完全解耦。昇腾 NPU 环境下无需修改 API 源码,也不需要在测试中导入 torch_npu 或创建 NPU 张量,可直接复用。 ## 【资料变更】 > 不涉及 > > torch._meta_registrations.register_meta 为 PyTorch 私有接口,按项目规范 docs/zh/api/native_api 中无需额外刷新资料。 ## 【接口变更】 > 不涉及 > > 仅新增测试用例,未修改任何业务代码。 ## 【功能验证】 - **v2.7.1 本地运行** - 环境:Ubuntu 22.04 / Python 3.11.15 / PyTorch 2.7.1+cpu / Torch-NPU 2.7.1.post4 / CANN 9.0 / Ascend 910B3 - 命令:TORCH_DEVICE_BACKEND_AUTOLOAD=0 python test/test_library_meta_registrations.py - 结果:Ran 2 tests in 0.022s, OK - **v2.9.0 / v2.11.0 / v2.12.0 / master** - 未在本地运行,对应分支已推送,由目标分支 CI 验证。 ## 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR 标题正确使用类型标签,如:feat、fix、refactor、docs、test 等 - [x] PR 持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!42108 | 19 天前 | |
test(refs): add test cases for torch._refs._maybe_broadcast Co-authored-by: muluzhe<3598510361@qq.com> # message auto-generated for no-merge-commit merge: !42122 merge test-refs-maybe-broadcast-2.7.1 into v2.7.1 test(refs): add test cases for torch._refs._maybe_broadcast Created-by: muluzhe Commit-by: muluzhe Merged-by: ascend-robot Description: ## 【合入来源】 - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 - 关联 issue: https://gitcode.com/Ascend/pytorch/issues/2911 - 任务分类:1.3(PyTorch 官方缺少对 torch._refs._maybe_broadcast 的直接测试) - pytorch 社区没有针对 torch._refs._maybe_broadcast 的独立测试用例,故新增该测试文件,用于验证该 API 的正确性。 ## 【修改方案】 ### 一、API 功能说明 torch._refs._maybe_broadcast(*args, preserve_cpu_scalar_tensors=True) 是 PyTorch 内部辅助函数,用于将一组 TensorLike / Number / None 参数广播到共同形状。它计算各 Tensor 输入的公共广播形状,对兼容形状的张量调用 .expand(),对 CPU scalar 张量根据 preserve_cpu_scalar_tensors 决定是否保留,对不兼容形状抛出 RuntimeError。该 API 为 PyTorch 私有接口。 ### 二、测试用例完备性说明 PyTorch 官方 test/ 目录中没有直接调用 torch._refs._maybe_broadcast 的测试用例,现有测试仅通过 elementwise_meta 等内部路径间接使用,无法验证广播行为、CPU scalar 保留/展开策略及异常路径。本次新增 test/test_library_refs.py,直接验证: - 相同形状 NPU Tensor 直接返回原张量; - 兼容形状 NPU Tensor 广播到共同形状; - Number 参数原样返回; - None 参数原样返回; - preserve_cpu_scalar_tensors=True 时 CPU scalar 张量被保留; - preserve_cpu_scalar_tensors=False 时 CPU scalar 张量被展开; - 0-dim scalar 张量在 preserve_cpu_scalar_tensors=False 时被广播到共同形状; - 不兼容形状抛出 RuntimeError。 ### 三、版本适用范围 torch._refs._maybe_broadcast 为 PyTorch 内部私有接口,在 PyTorch v2.7.1、v2.9.0、v2.10.0、v2.11.0、v2.12.0、master 各目标分支均存在且函数签名一致,因此本测试用例需提交到上述全部分支。 ### 四、NPU 适配 测试涉及 Tensor 创建与广播,非 scalar 参与计算的 Tensor 均通过 device_type = acc.type if (acc := torch.accelerator.current_accelerator()) else "cpu" 迁移到 NPU;CPU scalar 张量仅在测试 preserve_cpu_scalar_tensors 行为时保留在 CPU,这是该参数的测试目的。 ## 【资料变更】 > 不涉及 > > torch._refs._maybe_broadcast 为 PyTorch 私有接口,且 docs/zh/api/native_api 中无需额外刷新资料。 ## 【接口变更】 > 不涉及 > > 仅新增测试用例,未修改任何业务代码。 ## 【功能验证】 - **v2.7.1 本地 NPU 运行** - 环境:Ubuntu 22.04 / Python 3.11.15 / PyTorch 2.7.1+cpu / Torch-NPU 2.7.1.post4 / CANN 9.0 / Ascend 910B3 - 命令:TORCH_DEVICE_BACKEND_AUTOLOAD=0 python test/test_library_refs.py - 结果:Ran 8 tests in 0.771s, OK ## 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR 标题正确使用类型标签,如:feat、fix、refactor、docs、test 等 - [x] PR 持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!42122 | 14 天前 | |
test(triton): add testcase for torch._library.triton.set_wrap_triton_enabled Co-authored-by: muluzhe<3598510361@qq.com> # message auto-generated for no-merge-commit merge: !42167 merge test-set-wrap-triton-enabled-2.7.1 into v2.7.1 test(triton): add testcase for torch._library.triton.set_wrap_triton_enabled Created-by: muluzhe Commit-by: muluzhe Merged-by: ascend-robot Description: ## 【合入来源】 https://gitcode.com/Ascend/pytorch/issues/2896 pytorch 社区没有针对 torch._library.triton.set_wrap_triton_enabled 的独立测试用例,故新增该测试文件,用于验证该 API 的正确性。 ## 【修改方案】 一、API 功能说明 torch._library.triton.set_wrap_triton_enabled(enabled: bool) 是一个线程局部的上下文管理器,用于控制 torch.library.wrap_triton 是否将 Triton kernel 包装成 Higher-Order Operator (HOP) 调用。进入上下文时设置 _is_wrap_triton_enabled 标志,退出时恢复之前的状态。torch._library.triton.is_wrap_triton_enabled() 用于读取当前开关状态。 二、测试用例完备性说明 新增 test/test_library_triton.py,并添加 Huawei 版权头。从以下维度验证 set_wrap_triton_enabled: - 默认状态验证 test_set_wrap_triton_enabled_default_is_true:确认默认状态下 is_wrap_triton_enabled() 返回 True。 - 上下文切换与恢复 - test_set_wrap_triton_enabled_disables_wrapping:验证进入上下文后开关可设为 False。 - test_set_wrap_triton_enabled_restores_on_exit:验证退出上下文后状态恢复。 - test_set_wrap_triton_enabled_restores_on_exception:验证上下文体抛异常时,状态仍能被恢复。 - 嵌套场景 test_set_wrap_triton_enabled_nested:验证嵌套上下文管理器逐级恢复正确的状态。 - 对 wrap_triton 的实际影响 test_set_wrap_triton_enabled_affects_wrap_triton:验证开关为 True 时 torch.library.wrap_triton 返回包装器;开关为 False 时返回原始 kernel。当环境没有 triton 包时自动 skip。 三、版本适用范围 torch._library.triton.set_wrap_triton_enabled 为 PyTorch 内部私有接口,仅在 PyTorch v2.7.1 版本中存在;自 2.8.0 起上游已移除该接口,因此本测试用例仅需提交到 v2.7.1 分支,无需在其他版本重复提交。 四、NPU 适配 set_wrap_triton_enabled 与 is_wrap_triton_enabled 均为纯 Python 层开关逻辑,不涉及任何硬件相关计算、算子调用或设备内存操作,与 CPU/GPU/NPU 完全解耦。昇腾 NPU 环境下无需修改 API 源码,也无需在测试中导入 torch_npu 或创建 NPU 张量,可直接复用。 ## 【资料变更】 不涉及 torch._library.triton.set_wrap_triton_enabled 为 PyTorch 私有接口,且 docs/zh/api/native_api 中无需额外刷新资料。 ## 【接口变更】 不涉及 仅新增测试用例,未修改任何业务代码。 ## 【功能验证】 在 v2.7.1 环境上执行该用例,通过: bash cd /workspace/pytorch-v2.7.1 TORCH_DEVICE_BACKEND_AUTOLOAD=0 python test/test_library_triton.py -v 输出: test_set_wrap_triton_enabled_affects_wrap_triton (__main__.TestLibraryTriton.test_set_wrap_triton_enabled_affects_wrap_triton) ... ok test_set_wrap_triton_enabled_default_is_true (__main__.TestLibraryTriton.test_set_wrap_triton_enabled_default_is_true) ... ok test_set_wrap_triton_enabled_disables_wrapping (__main__.TestLibraryTriton.test_set_wrap_triton_enabled_disables_wrapping) ... ok test_set_wrap_triton_enabled_nested (__main__.TestLibraryTriton.test_set_wrap_triton_enabled_nested) ... ok test_set_wrap_triton_enabled_restores_on_exception (__main__.TestLibraryTriton.test_set_wrap_triton_enabled_restores_on_exception) ... ok test_set_wrap_triton_enabled_restores_on_exit (__main__.TestLibraryTriton.test_set_wrap_triton_enabled_restores_on_exit) ... ok ---------------------------------------------------------------------- Ran 6 tests in 0.030s OK 说明:当前环境未挂载 NPU 设备,因此通过 TORCH_DEVICE_BACKEND_AUTOLOAD=0 禁用 torch_npu 后端自动加载后执行;该 API 本身与硬件无关,不影响验证有效性。 ## 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR 标题正确使用类型标签,如:feat、fix、refactor、docs、test 等 - [x] PR 持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!42167 | 14 天前 | |
[test] split test_torch.py Co-authored-by: acaes<liuyan7892@163.com> # message auto-generated for no-merge-commit merge: !37874 merge v2.7.1_test into v2.7.1 [test] split test_torch.py Created-by: AACAES Commit-by: acaes Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> https://gitcode.com/Ascend/pytorch/issues/2337 - [ ] 需求 - [x] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) ci用例批跑报错,原始文件过大,可能踩内存导致,特此进行用例拆分 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 ci pass # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!37874 | 2 个月前 | |
| 2 年前 | ||
| 2 年前 | ||
fix: unskip test_reductions test case in test_multiprocessing_api.py Co-authored-by: wuyouqi1<wuyouqi1@h-partners.com> # message auto-generated for no-merge-commit merge: !37039 merge sync-pr36359-v2.7.1 into v2.7.1 fix: unskip test_reductions test case in test_multiprocessing_api.py Created-by: wuyouqi1 Commit-by: wuyouqi1 Merged-by: ascend-robot Description: # 【合入来源】 - [ ] 需求 - [x] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 1. test/test_multiprocessing_api.py 中 test_reductions 用例在验证 NPU tensor 时,调用了 reduce_tensor + rebuild_npu_tensor 进行同进程内重建比较。 2. rebuild_npu_tensor 内部通过 aclIpcOpenMemHandle/aclIpcOpenEventHandle 导入 IPC handle,该机制设计用于跨进程共享 NPU 内存,同进程内 import 会触发驱动错误(drvRetCode=17),导致用例失败。 3. 将 NPU tensor 重建验证改为跨进程方式:主进程 reduce_tensor 导出 handle,通过 Queue 传给子进程,子进程 rebuild_npu_tensor 重建后返回数据,主进程比较。子进程返回 .tolist() 避免 resource_sharer 连接断开问题。 4. 删除原有 @unittest.skip 装饰器,改为 @unittest.skipUnless(get_cann_version(module="DRIVER") >= "25.3.rc1", ...) 条件跳过。NPU IPC reduce/rebuild 依赖 driver >= 25.3.rc1,低版本 driver 自动跳过该用例。 # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 - 测试场景:test_multiprocessing_api.py 中 test_reductions 用例 - 测试方法:pytest 单元测试 - 验证结果:PASS # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!37039 | 2 个月前 | |
| 2 年前 | ||
add_test Co-authored-by: sunhaolun<sunhaolun3@huawei.com> # message auto-generated for no-merge-commit merge: !33103 merge v2.7.1 into v2.7.1 add_test Created-by: sunhaolun Commit-by: sunhaolun Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [x] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 为以下API增加用例功能 Tensor.copy_ Tensor.narrow torch.cat torch.chunk torch._chunk_cat # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 新增文件 test_cat.py test_chunk.py test_chunk_cat.py test_copy_.py test_narrow.py # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!33103 | 4 个月前 | |
| 1 年前 | ||
[feat] add nestedtensor backend Co-authored-by: culechan<chenshuai81@huawei.com> # message auto-generated for no-merge-commit merge: !30508 merge 2.7_nested into v2.7.1 [feat] add nestedtensor backend Created-by: culechan Commit-by: culechan Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > (如有)请关联需求文档/issue链接 - [ ] 需求 - [x] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 创建Nestedtensor相关的后端,参考quantized后端的实现,因为二者较为类似,因此在文件代码自动生成逻辑部分做了合并重构。 # 【资料变更】 > 不涉及 # 【接口变更】 > 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增已适配UT测试用例看护,并补充测试自验证截图  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!30508 | 5 个月前 | |
fix(nn): fix test for nn api: torch.nn.ParameterDict, torch.nn.ParameterList, torch.nn.Sequential Co-authored-by: dinglaiping<1016581171@qq.com> # message auto-generated for no-merge-commit merge: !32056 merge fixtest-nn-api-2.7.1 into v2.7.1 fix(nn): fix test for nn api: torch.nn.ParameterDict, torch.nn.ParameterList, torch.nn.Sequential Created-by: dinglaiping Commit-by: dinglaiping Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**https://gitcode.com/Ascend/pytorch/issues/1585**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] issue/工单 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 1. 2.6.0版本提示skipIfMps找不到,要换成skipIfMPS。 2. 2.7及以上版本skipIfMps找不到,换成skipIfMPS;new_module_tests找不到,需要把导入new_module_tests改成导入get_new_module_tests并在调用的地方换成get_new_module_tests();tf32_on_and_off找不到,删掉导入,并在调用tf32_is_not_fp32()的地方换成调用torch.cuda.is_tf32_supported() # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 整体结论: 本次验证通过修复官网test_nn.py用例文件,验证3个API,功能正常: ParameterDict:官方用例中键值对索引、新增、删除、遍历等操作均正常,容器内所有参数设备统一为npu:0,无设备漂移问题; ParameterList:官方用例中数字索引、append新增、遍历等操作均正常,参数设备一致性与长度校验均通过,有序管理能力正常; Sequential:官方用例中getitem/setitem/delitem/append/insert/extend/pop等所有核心操作均正常执行,操作后子模块设备均保持为npu:0,动态扩展与元素管理能力完整。 运行日志: [root@hostname-fqv42 torchnpuapi]# docker exec -it test27 bash root@hostname-fqv42:/home# cd /root/torchnpuapi root@hostname-fqv42:~/torchnpuapi# python -m unittest test_nn_npu27.TestNN.test_ParameterList test_nn_npu27.TestNN.test_ParameterDict test_nn_npu27.TestNN.test_Sequential_getitem test_nn_npu27.TestNN.test_Sequential_setitem test_nn_npu27.TestNN.test_Sequential_delitem test_nn_npu27.TestNN.test_Sequential_append test_nn_npu27.TestNN.test_Sequential_insert test_nn_npu27.TestNN.test_Sequential_extend test_nn_npu27.TestNN.test_Sequential_pop -v test_ParameterList (test_nn_npu27.TestNN.test_ParameterList) ... ok test_ParameterDict (test_nn_npu27.TestNN.test_ParameterDict) ... ok test_Sequential_getitem (test_nn_npu27.TestNN.test_Sequential_getitem) ... ok test_Sequential_setitem (test_nn_npu27.TestNN.test_Sequential_setitem) ... ok test_Sequential_delitem (test_nn_npu27.TestNN.test_Sequential_delitem) ... ok test_Sequential_append (test_nn_npu27.TestNN.test_Sequential_append) ... ok test_Sequential_insert (test_nn_npu27.TestNN.test_Sequential_insert) ... ok test_Sequential_extend (test_nn_npu27.TestNN.test_Sequential_extend) ... ok test_Sequential_pop (test_nn_npu27.TestNN.test_Sequential_pop) ... ok ---------------------------------------------------------------------- Ran 9 tests in 0.057s OK root@hostname-fqv42:~/torchnpuapi# # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!32056 | 4 个月前 | |
| 2 年前 | ||
[fix][2.7.1]add getMemoryFraction attribute for torch._C Co-authored-by: weixin_47897441<wuyouqi1@h-partners.com> # message auto-generated for no-merge-commit merge: !31101 merge v2.7.1 into v2.7.1 [fix][2.7.1]add getMemoryFraction attribute for torch._C Created-by: weixin_47897441 Commit-by: weixin_47897441 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > (如有)请关联需求文档/issue链接 - [ ] 需求 - [ ] 问题单 - [x] issue/工单 : torch._C不支持_npu_getMemoryFraction - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 1、NPUCachingAllocator中新增getMemoryFraction方法及虚函数声明,Module中注册_npu_getMemoryFraction绑定; 2、在torch_npu.npu和torch_npu.npu.memory中实现并暴露get_per_process_memory_fraction接口,支持指定设备,调用底层 C++ 接口; 3、新增该接口的测试用例; 4、将该接口及底层Cpp绑定加入Dynamo追踪规则,完成适配。 # 【资料变更】 > 不涉及 # 【接口变更】 > 否 # 【功能验证】 > UT用例测试通过:python test_npu.py -v -k test_get_per_process_memory_fraction  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!31101 | 5 个月前 | |
[2.7.1][bugfix]CI error:acl header missing fix Co-authored-by: Dring<17737727613@163.com> # message auto-generated for no-merge-commit merge: !36835 merge v2.7.1 into v2.7.1 [2.7.1][bugfix]CI error:acl header missing fix Created-by: Dring Commit-by: Dring Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> https://gitcode.com/Ascend/pytorch/issues/2137 - [ ] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 门禁ut不是基于门禁编包代码执行,而是拉取新代码,头文件在编包执行过程中才会从acl_src复制到原本头文件路径acl下。导致门禁ut调用build_stub.sh报错头文件找不到。 修复方案: 1、在门禁执行入口文件ci/access_control_test.py增加头文件复制策略,从当前安装torch_npu路径下复制头文件到工作区代码三方库下acl下 2、修改三个ut中的编译依赖相对路径确保能找到对应头文件 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 门禁通过,ut通过  本地验证ut通过 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ✓] 代码注释完备,正确记录错误日志 - [ ✕] 代码实现进行了返回值、空指针等校验 - [✓ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [✓ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!36835 | 2 个月前 | |
Rollback for bugfix Co-authored-by: guoguanghao<guoguanghao@huawei.com> # message auto-generated for no-merge-commit merge: !25596 merge v2.7.1 into v2.7.1 Rollback for bugfix Created-by: guoguanghao Commit-by: guoguanghao Merged-by: ascend-robot Description: <!-- Thanks for sending a pull request! --> **What type of PR is this?** > Uncomment only one /kind <> line, hit enter to put that in a new line, and remove leading whitespaces from that line: > > /kind bug > /kind task > /kind feature **What does this PR do / why do we need it**: **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!25596 | 10 个月前 | |
[v2.7.1][Fix] Fix static check errors detected by TABS Co-authored-by: thickhair<zp2165064878@163.com> # message auto-generated for no-merge-commit merge: !37994 merge tabs_fix_2.7.1 into v2.7.1 [v2.7.1][Fix] Fix static check errors detected by TABS 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!37994 | 2 个月前 | |
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
[test] split test_torch.py Co-authored-by: acaes<liuyan7892@163.com> # message auto-generated for no-merge-commit merge: !37874 merge v2.7.1_test into v2.7.1 [test] split test_torch.py Created-by: AACAES Commit-by: acaes Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> https://gitcode.com/Ascend/pytorch/issues/2337 - [ ] 需求 - [x] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) ci用例批跑报错,原始文件过大,可能踩内存导致,特此进行用例拆分 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 ci pass # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!37874 | 2 个月前 | |
[test] split test_torch.py Co-authored-by: acaes<liuyan7892@163.com> # message auto-generated for no-merge-commit merge: !37874 merge v2.7.1_test into v2.7.1 [test] split test_torch.py Created-by: AACAES Commit-by: acaes Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> https://gitcode.com/Ascend/pytorch/issues/2337 - [ ] 需求 - [x] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) ci用例批跑报错,原始文件过大,可能踩内存导致,特此进行用例拆分 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 ci pass # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!37874 | 2 个月前 | |
test:This PR adds missing test cases for torch.autograd.profiler_util.StringTable.popitem, as there are currently no community-provided tests for this function. Co-authored-by: xin_heyun<919112805@qq.com> # message auto-generated for no-merge-commit merge: !42054 merge test_stringTable.popitem_v2.7.1 into v2.7.1 test:This PR adds missing test cases for torch.autograd.profiler_util.StringTable.popitem, as there are currently no community-provided tests for this function. Created-by: xin_heyun Commit-by: xin_heyun Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> issue任务地址:https://gitcode.com/Ascend/pytorch/issues/2921 - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 为 torch.autograd.profiler_util.StringTable.popitem 新增单元测试用例,放置在 test/test_profiler_string_table.py。 1. PyTorch 社区对该 API 完全无测试用例:pytorch/test/ 目录下 0 处对 StringTable 类的引用;test/cpp/jit/test_backend.cpp 中的 TestCompilerWithStringTable 为 C++ 后端测试,与 Python 层无关。 2. 新增 7 个测试用例,基于 PyTorch 标准 TestCase 框架,覆盖 popitem 全部行为边界: - 返回值正确性:popitem 返回 (key, value) 对且表长度减 1 - 移除语义验证:pop 后元素从表中消失 - 空表异常:空表调用 popitem 正确抛出 KeyError - 耗尽场景:连续 pop 直到表为空,最后再 pop 抛 KeyError - __missing__ 交互:通过 __missing__ 自动 demangle 后 popitem 返回正确的 demangled 值 - factory 隔离:popitem 不会触发 defaultdict 的 default_factory - 一致性验证:全部 pop 后 key 集合与原始集合一致 3. 遵循测试用例规范:导入顺序为 torch → torch.autograd.profiler_util → torch.testing._internal.common_utils,使用 self.assert* 断言,无 print/try-except,注释精简英文。 4. 该 API 为纯 Python 逻辑(defaultdict 子类),不涉及张量操作,无需 NPU 设备适配。 # 【资料变更】 不涉及。torch.autograd.profiler_util.StringTable 为 PyTorch 内部工具类(profiler 辅助类),不属于公开文档覆盖范围。 # 【接口变更】 不涉及。仅新增测试文件,无对外接口变更。 # 【功能验证】 **测试场景**:验证 torch.autograd.profiler_util.StringTable.popitem 在 profiler 辅助流程中的行为正确性。 **测试命令**: 2.7.1 执行命令: python test_profiler_string_table.py -v 结果: test_multiple_popitems_consistent (__main__.TestStringTable.test_multiple_popitems_consistent) ... ok test_popitem_does_not_trigger_default_factory (__main__.TestStringTable.test_popitem_does_not_trigger_default_factory) ... ok test_popitem_empty_raises_keyerror (__main__.TestStringTable.test_popitem_empty_raises_keyerror) ... ok test_popitem_exhausts_table (__main__.TestStringTable.test_popitem_exhausts_table) ... ok test_popitem_removes_item (__main__.TestStringTable.test_popitem_removes_item) ... ok test_popitem_returns_key_value (__main__.TestStringTable.test_popitem_returns_key_value) ... ok test_popitem_with_missing_demangle (__main__.TestStringTable.test_popitem_with_missing_demangle) ... ok ---------------------------------------------------------------------- Ran 7 tests in 0.029s OK 2.9.0 执行命令: python test_profiler_string_table.py -v 结果: test_multiple_popitems_consistent (__main__.TestStringTable.test_multiple_popitems_consistent) ... ok test_popitem_does_not_trigger_default_factory (__main__.TestStringTable.test_popitem_does_not_trigger_default_factory) ... ok test_popitem_empty_raises_keyerror (__main__.TestStringTable.test_popitem_empty_raises_keyerror) ... ok test_popitem_exhausts_table (__main__.TestStringTable.test_popitem_exhausts_table) ... ok test_popitem_removes_item (__main__.TestStringTable.test_popitem_removes_item) ... ok test_popitem_returns_key_value (__main__.TestStringTable.test_popitem_returns_key_value) ... ok test_popitem_with_missing_demangle (__main__.TestStringTable.test_popitem_with_missing_demangle) ... ok ---------------------------------------------------------------------- Ran 7 tests in 0.030s OK 2.11.0 执行命令: python test_profiler_string_table.py -v 结果: test_multiple_popitems_consistent (__main__.TestStringTable.test_multiple_popitems_consistent) ... ok test_popitem_does_not_trigger_default_factory (__main__.TestStringTable.test_popitem_does_not_trigger_default_factory) ... ok test_popitem_empty_raises_keyerror (__main__.TestStringTable.test_popitem_empty_raises_keyerror) ... ok test_popitem_exhausts_table (__main__.TestStringTable.test_popitem_exhausts_table) ... ok test_popitem_removes_item (__main__.TestStringTable.test_popitem_removes_item) ... ok test_popitem_returns_key_value (__main__.TestStringTable.test_popitem_returns_key_value) ... ok test_popitem_with_missing_demangle (__main__.TestStringTable.test_popitem_with_missing_demangle) ... ok ---------------------------------------------------------------------- Ran 7 tests in 0.031s OK 2.12.0 执行命令: python test_profiler_string_table.py -v 结果: `` W0718 07:52:02.096000 45887 opt/conda/envs/v2.12.0/lib/python3.12/site-packages/torch/_native/cutedsl_utils.py:55] CuTeDSL operators require optional Python packages nvidia-cutlass-dsl and apache-tvm-ffi; missing optional dependency nvidia_cutlass_dsl (importlib.util.find_spec(nvidia_cutlass_dsl) failed) test_multiple_popitems_consistent (__main__.TestStringTable.test_multiple_popitems_consistent) ... ok test_popitem_does_not_trigger_default_factory (__main__.TestStringTable.test_popitem_does_not_trigger_default_factory) ... ok test_popitem_empty_raises_keyerror (__main__.TestStringTable.test_popitem_empty_raises_keyerror) ... ok test_popitem_exhausts_table (__main__.TestStringTable.test_popitem_exhausts_table) ... ok test_popitem_removes_item (__main__.TestStringTable.test_popitem_removes_item) ... ok test_popitem_returns_key_value (__main__.TestStringTable.test_popitem_returns_key_value) ... ok test_popitem_with_missing_demangle (__main__.TestStringTable.test_popitem_with_missing_demangle) ... ok ---------------------------------------------------------------------- Ran 7 tests in 0.031s OK master 执行命令: python test_profiler_string_table.py -v 结果: test_multiple_popitems_consistent (__main__.TestStringTable.test_multiple_popitems_consistent) ... ok test_popitem_does_not_trigger_default_factory (__main__.TestStringTable.test_popitem_does_not_trigger_default_factory) ... ok test_popitem_empty_raises_keyerror (__main__.TestStringTable.test_popitem_empty_raises_keyerror) ... ok test_popitem_exhausts_table (__main__.TestStringTable.test_popitem_exhausts_table) ... ok test_popitem_removes_item (__main__.TestStringTable.test_popitem_removes_item) ... ok test_popitem_returns_key_value (__main__.TestStringTable.test_popitem_returns_key_value) ... ok test_popitem_with_missing_demangle (__main__.TestStringTable.test_popitem_with_missing_demangle) ... ok ---------------------------------------------------------------------- Ran 7 tests in 0.029s OK `` # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!42054 | 25 天前 | |
[test] Add torch.autograd.profiler_util.StringTable.values Api Coverage Co-authored-by: lihaokun-2026<851563813@qq.com> # message auto-generated for no-merge-commit merge: !42025 merge autograd-profiler_util-StringTable-values-v2.7.1 into v2.7.1 [test] Add torch.autograd.profiler_util.StringTable.values Api Coverage Created-by: lihaokun-2026 Commit-by: lihaokun-2026 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 [#2928](https://gitcode.com/Ascend/pytorch/issues/2928) - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 公开issue: - torch.autograd.profiler_util.StringTable.values: [【社区任务】7月社区任务第二期-Ascend for PyTorch API 一致性开发(68)](https://gitcode.com/Ascend/pytorch/issues/2928) # 【修改方案】 1. API 功能说明: - torch.autograd.profiler_util.StringTable.values:StringTable 继承自 defaultdict,values() 返回当前 string table 中所有 value 的动态视图,用于获取 profiler 字符串映射表中的值集合。 2. 上游用例检查情况: 检索 PyTorch / Torch-NPU 现有测试后,未找到面向 torch.autograd.profiler_util.StringTable.values 的独立、直接、最小验证用例,因此按任务要求新增 NPU API 验证用例。 3. 新增用例文件: - test_profiler_util_string_table_values.py 4. 新增用例覆盖场景: - StringTable.values() 在空表场景下返回空 ValuesView - 显式写入 key/value 后,values() 返回全部 value - 访问缺省 key 触发 StringTable.__missing__ 后,values() 可读取自动写入的 value - 单字符 key 保持原值,不触发 demangle 变更 - values() 返回动态视图,后续新增元素可被已有 view 感知 - 在 torch_npu 环境下验证 privateuse1 backend 为 npu 5. 新增文件头部已按要求补充注释,说明该文件验证的 API 功能。 # 【资料变更】 不涉及。未修改产品资料、接口说明文档或用户可见文档。 # 【接口变更】 不涉及。未修改跨代码仓接口,也未修改用户可见接口行为。 # 【功能验证】 测试环境: sh torch: 2.7.1+cpu torch_npu: 2.7.1 测试方法: sh source /usr/local/Ascend/ascend-toolkit/set_env.sh TORCH_DEVICE_BACKEND_AUTOLOAD=1 python3 test/test_profiler_util_string_table_values.py -v 测试结果:  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!42025 | 14 天前 | |
[test] split test_torch.py Co-authored-by: acaes<liuyan7892@163.com> # message auto-generated for no-merge-commit merge: !37874 merge v2.7.1_test into v2.7.1 [test] split test_torch.py Created-by: AACAES Commit-by: acaes Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> https://gitcode.com/Ascend/pytorch/issues/2337 - [ ] 需求 - [x] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) ci用例批跑报错,原始文件过大,可能踩内存导致,特此进行用例拆分 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 ci pass # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!37874 | 2 个月前 | |
test(npu): add pytree supported nodes pop coverage Co-authored-by: whirlpool_dark<kk2425597323@126.com> # message auto-generated for no-merge-commit merge: !41810 merge test-pytree-supported-nodes-pop-v2.7.1 into v2.7.1 test(npu): add pytree supported nodes pop coverage Created-by: whirlpool_dark Commit-by: whirlpool_dark Merged-by: ascend-robot Description: 【合入来源】 [[Usage]: torch.utils._pytree.SUPPORTED_NODES.pop 缺少跨版本的直接 NPU 用例](https://gitcode.com/Ascend/pytorch/issues/2889) 【修改方案】 上游 v2.7.1 的 torch.onnx._internal.fx.dynamo_graph_extractor._PyTreeExtensionContext.__exit__ 调用 pop(class_type),但没有直接测试;v2.9.0、v2.10.0 没有直接调用;v2.11.0、v2.12.0 仅在注册表清理中调用 pop(cls, None),未验证返回值和删除后的展开语义。因此新增 test/test_pytree_registry.py。 test.test_pytree_registry.TestPytreeSupportedNodes.test_pop 的调用路径为: text torch.utils._pytree.register_pytree_node(CustomNode, ...) -> torch.utils._pytree.tree_flatten(CustomNode(npu_tensor)) -> torch.utils._pytree.SUPPORTED_NODES[CustomNode].flatten_fn -> torch.utils._pytree.SUPPORTED_NODES.pop(CustomNode) -> torch.utils._pytree.SUPPORTED_NODES.pop(CustomNode, None) -> torch.utils._pytree.tree_flatten(CustomNode(npu_tensor)) 用例验证无默认值的 pop(CustomNode) 返回原 NodeDef 的 flatten_fn 并删除注册项,带默认值的 pop(CustomNode, None) 返回 None,删除后同一节点回退为单个叶子。Tensor 使用 torch.tensor([1.0]).to(device_type),其中 device_type 从当前 accelerator 获取;清理通过 TestCase.addCleanup() 恢复注册项后再注销,避免污染后续测试,不捕获 API 异常。 【资料变更】 torch.utils._pytree.SUPPORTED_NODES.pop 位于 PyTorch 私有模块,不需要更新 native API 支持文档。 【接口变更】 不涉及 API 源码或用户接口,仅新增 torch-npu 测试。 【功能验证】 python3 -m py_compile test/test_pytree_registry.py 和 git diff --check 已通过。为避免 torch-npu 源码 checkout 遮蔽 pip 安装包,从中立的 /workspace 目录执行同一测试文件,NPU 云算力日志如下: text torch=2.7.1+cpu torch_npu=2.7.1.post6 accelerator=npu [root@73c35cf5cac2 workspace]# python3 ./test_pytree_registry_2.7.1.py TestPytreeSupportedNodes.test_pop . ---------------------------------------------------------------------- Ran 1 test in 1.019s OK 【CheckList】 - [x] 代码注释简洁且为英文 - [x] Tensor 按当前 accelerator 迁移 - [x] PR 标题使用 test 标签 - [ ] CI 执行通过 See merge request: Ascend/pytorch!41810 | 25 天前 | |
test: add torch.QInt32Storage.dtype validation cases Co-authored-by: gcw_rZ2ZS0CZ<tang040510@gmail.com> # message auto-generated for no-merge-commit merge: !44071 merge test-qint32-storage-dtype-2.7.1 into v2.7.1 test: add torch.QInt32Storage.dtype validation cases Created-by: gcw_rZ2ZS0CZ Commit-by: gcw_rZ2ZS0CZ Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 关联任务issue: https://gitcode.com/Ascend/pytorch/issues/3529 - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 torch.QInt32Storage.dtype PyTorch 官方社区在 test/test_torch.py::TestTorch::test_storage_error(master 第 7814 行起,v2.7.1 第 7767 行起)中对 legacy storage 类有遍历式错误路径测试,将 torch.QInt32Storage 列入 quantized_storages 列表。但该测试遍历 torch._storage_classes 全局注册表,在 NPU 环境下会混入 torch.cuda.* 与 torch_npu.npu.* 等设备相关 storage 类,无法针对 QInt32Storage 做聚焦验证;且 test_torch.py 为大型社区文件,不宜叠加改动。因此新增独立测试文件 test/test_qint32_storage_dtype.py。 该 API 为设备无关的纯 Python legacy Storage 类(torch.storage._LegacyStorage 子类,对应 torch.qint32 量化 dtype)的 dtype 属性,不涉及 NPU 适配,不需要代码修改。 新增 test/test_qint32_storage_dtype.py,验证 torch.QInt32Storage.dtype 的类属性与实例属性(空 / size / 序列构造)。 # 【资料变更】 不涉及资料修改。torch.QInt32Storage 为 legacy typed storage 类,PyTorch 官方已在 dtype 属性上调用 _warn_typed_storage_removal 标记弃用,native_api 文档无需补充;非计算类 API 与数据类型无关。 # 【接口变更】 不涉及 # 【功能介绍】 torch.QInt32Storage.dtype 返回 torch.QInt32Storage 对应的量化 dtype(torch.qint32)。QInt32Storage 是 torch.storage._LegacyStorage 的量化子类,dtype 同时为类属性与实例属性,为设备无关的纯 Python 元数据。 # 【功能验证】 test_qint32_storage_dtype.py (torch.QInt32Storage.dtype) - test_class_dtype — 类属性 dtype 为 torch.qint32 - test_instance_dtype — 空 / size(4) / 序列([0,1,2]) 三种构造的实例 dtype 均为 torch.qint32,且与类属性一致 运行命令: python -m pytest /workspace/user_data/pytorch-v2.7.1/test/test_qint32_storage_dtype.py -v 运行结果: ========================= test session starts ========================= platform linux -- Python 3.12.13, pytest-8.3.2, pluggy-1.6.0 -- /workspace/envs/torch-npu-test/bin/python cachedir: .pytest_cache rootdir: /workspace/user_data/pytorch-v2.7.1 configfile: pyproject.toml plugins: xdist-3.6.1 collected 2 items ../workspace/user_data/pytorch-v2.7.1/test/test_qint32_storage_dtype.py::TestQInt32StorageDtype::test_class_dtype PASSED [ 50%] ../workspace/user_data/pytorch-v2.7.1/test/test_qint32_storage_dtype.py::TestQInt32StorageDtype::test_instance_dtype PASSED [100%] ========================== warnings summary =========================== test/test_qint32_storage_dtype.py::TestQInt32StorageDtype::test_class_dtype /workspace/user_data/pytorch-v2.7.1/test/test_qint32_storage_dtype.py:30: UserWarning: TypedStorage is deprecated. It will be removed in the future and UntypedStorage will be the only storage class. This should only matter to you if you are using storages directly. To access UntypedStorage directly, use tensor.untyped_storage() instead of tensor.storage() self.assertIs(torch.QInt32Storage.dtype, torch.qint32) -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ==================== 2 passed, 1 warning in 4.25s ===================== # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!44071 | 3 天前 | |
test(reductions): note NPU/XLA skip searchsorted non-contiguous UserWarning check. Co-authored-by: Margaret_wangrui<wangrui178@huawei.com> # message auto-generated for no-merge-commit merge: !35422 merge searchsorted_testcase_v2.7.1 into v2.7.1 test(reductions): note NPU/XLA skip searchsorted non-contiguous UserWarning check. Created-by: Margaret_wangrui Commit-by: Margaret_wangrui Merged-by: ascend-robot Description: # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> https://gitcode.com/Ascend/pytorch/issues/1910 - [ ] 需求 - [x] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) values_3d_permute = values_3d.permute(2, 1, 0).to(torch.int32) boundaries_permute = values_3d.permute(2, 1, 0).to(torch.float64) values_3d_permute和boundaries_permute在torch_npu中是连续的,不应该在用例中去捕获非连续告警信息 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 .png') # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!35422 | 3 个月前 | |
[2.7.1][bugfix]CI error:acl header missing fix Co-authored-by: Dring<17737727613@163.com> # message auto-generated for no-merge-commit merge: !36835 merge v2.7.1 into v2.7.1 [2.7.1][bugfix]CI error:acl header missing fix Created-by: Dring Commit-by: Dring Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> https://gitcode.com/Ascend/pytorch/issues/2137 - [ ] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 门禁ut不是基于门禁编包代码执行,而是拉取新代码,头文件在编包执行过程中才会从acl_src复制到原本头文件路径acl下。导致门禁ut调用build_stub.sh报错头文件找不到。 修复方案: 1、在门禁执行入口文件ci/access_control_test.py增加头文件复制策略,从当前安装torch_npu路径下复制头文件到工作区代码三方库下acl下 2、修改三个ut中的编译依赖相对路径确保能找到对应头文件 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 门禁通过,ut通过  本地验证ut通过 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ✓] 代码注释完备,正确记录错误日志 - [ ✕] 代码实现进行了返回值、空指针等校验 - [✓ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [✓ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!36835 | 2 个月前 | |
fix: support quantized NPU flip dispatch Co-authored-by: hz893<zhanghao491@huawei.com> # message auto-generated for no-merge-commit merge: !36068 merge fix_quantized_flip_v2.7.1_20260519 into v2.7.1 fix: support quantized NPU flip dispatch Created-by: hz893 Commit-by: hz893 Merged-by: ascend-robot Description: # 【合入来源】 - [ ] 需求 - [x] 问题单 https://gitcode.com/Ascend/pytorch/issues/2207 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 说明:修复 NPU 量化 tensor 执行 flip 时的分发与错误语义问题,并补充 CI 中暴露的 complex dtype 测试处理。 # 【修改方案】 1. 新增 NPU 量化 flip 实现,并在 codegen stub 中注册 QuantizedPrivateUse1 对应 kernel,使量化 NPU tensor 进入专用实现。 2. 对 per-tensor affine 量化 tensor,先通过 int_repr() 获取底层整型表示,再转发到普通 aten::flip;随后使用原 tensor 的 size、dtype、scale、zero_point 和 memory format 构造量化结果,并通过 set_ 复用翻转后的底层存储。 3. 对 quint4x2、quint2x4 保持不支持报错;对 per-channel quantized tensor,先执行维度合法性检查,再按 CPU/CUDA 语义报出 uniformly quantized 相关错误,保证错误优先级一致。 4. 在 test_shape_ops.py 中补充 NPU 专用 complex skip:仅当 NPU + jit_compile=True + dtype.is_complex 时跳过 flip / flip_errors / flip_numpy / fliplr / flipud 相关 complex 用例,规避当前 jit_compile=True 下 NPU 无法创建 complex tensor 的既有限制。该 skip 不影响 CPU/CUDA,也不影响 NPU jit_compile=False 路径。 # 【资料变更】 不涉及。 # 【接口变更】 不涉及跨仓或客户面可见接口变更。 # 【功能验证】 1. 本地执行量化 flip 相关用例,验证 quint8、qint8、qint32 per-tensor affine 结果与 CPU/CUDA 语义一致。 2. 本地验证 per-channel quantized flip 错误信息与 CPU/CUDA 对齐。 3. 本地验证 jit_compile=True 下 10 个 complex flip 实例均按预期 skip:OK (skipped=10)。 4. 本地验证非 complex invalid 实例 int64/float64 仍正常执行并通过。 # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!36068 | 2 个月前 | |
| 1 年前 | ||
| 2 年前 | ||
fix: support to_sparse on non-default NPU devices Co-authored-by: hw_hz<zhanghao491@huawei.com> # message auto-generated for no-merge-commit merge: !35942 merge fix_to_sparse_v2.7.1 into v2.7.1 fix: support to_sparse on non-default NPU devices Created-by: hz893 Commit-by: hw_hz 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/2182 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 1. 将 aten::_to_sparse 和 aten::_to_sparse.sparse_dim 加入 NPU supported 注册,避免 dense NPU Tensor 转 sparse 时走 CPU fallback。 2. 新增 NPU 侧 _to_sparse 实现,复用 at::native::dense_to_sparse,使 sparse tensor、indices、values 保持在输入 Tensor 所在 NPU 设备上。 3. 新增非默认 NPU 设备场景 UT,覆盖输入位于 npu:1 时 to_sparse 结果的 device 和数值一致性。 # 【资料变更】 不涉及。 # 【接口变更】 不涉及。 # 【功能验证】 - 已在 v2.7.1 环境完成 torch_npu 编包并安装验证,torch_npu.__version__ 为 2.7.1.post5。 - 已确认 aten::_to_sparse 和 aten::_to_sparse.sparse_dim 的 PrivateUse1 dispatcher 注册到 RegisterNPU.cpp [kernel],不再走 CPU fallback。 - python -m pytest test_ops.py -v -k test_multiple_devices_to_sparse_npu_float32:1 passed。 - python -m pytest test/test_sparse_coo.py -v -k test_sparse_to_sparse_non_default_npu_device:1 passed。 - v2.9.0、v2.10.0、v2.11.0、v2.12.0、master 目标分支已完成 cherry-pick,无冲突;未分别编包验证。 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!35942 | 2 个月前 | |
Skip failing torch official TestCase tests and disable unsupported test cases Co-authored-by: yuhaiyan<yuhaiyan8@huawei.com> Co-authored-by: yuhaiyan8<yuhaiyan8@h-partners.com> # message auto-generated for no-merge-commit merge: !31977 merge v2.7.1-dev2 into v2.7.1 Skip failing torch official TestCase tests and disable unsupported test cases Created-by: yuhaiyan Commit-by: yuhaiyan;yuhaiyan8 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 1. 暂时跳过失败用例 2. 已提单跟进修复 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!31977 | 3 个月前 | |
| 2 年前 | ||
[test][v2.7.1] add NPU validation cases for torch.Tensor.map_ and torch.Tensor.module_load (issues #2720 #2722) Co-authored-by: lele130<20230105101@stu.lzjtu.edu.cn> # message auto-generated for no-merge-commit merge: !41661 merge test-map-module-load-v2.7.1 into v2.7.1 [test][v2.7.1] add NPU validation cases for torch.Tensor.map_ and torch.Tensor.module_load (issues #2720 #2722) Created-by: lele130 Commit-by: lele130 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区 issue,请关联 issue 链接**</font> > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部 issue 等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 关联 issue: - [#2720](https://gitcode.com/Ascend/pytorch/issues/2720) — torch.Tensor.map_(API 一致性验证) - [#2722](https://gitcode.com/Ascend/pytorch/issues/2722) — torch.Tensor.module_load(API 一致性验证) # 【修改方案】 本 PR 为 torch.Tensor.map_ 和 torch.Tensor.module_load 两个 API 在 NPU 场景下补充一致性验证用例。PyTorch 社区缺少针对这两个 API 的直接、集中测试,按规范 1.3(自写用例)新增测试文件到 test/ 目录。 修改文件: - test/test_tensor_map_.py(新增):覆盖 torch.Tensor.map_(3 个用例) - test/test_tensor_module_load.py(新增):覆盖 torch.Tensor.module_load(5 个用例) 合计 8 个用例。不涉及 torch_npu 任何 C++/Python 代码改动。 # 【API 功能介绍】 ## 1. torch.Tensor.map_(tensor, callable) → Tensor 对 self 和给定 tensor 的每个元素应用 callable,结果存回 self tensor。两个 tensor 必须可广播。 - **callable 签名**:def callable(a, b) -> number - **实现位置**:torch/_tensor.py,底层调用 at::map kernel - **NPU 支持情况**:NPU 上不可用(TypeError: map_ is only implemented on CPU tensors),社区 CUDA 同样不支持 - **测试覆盖**:CPU 正常路径(2 用例)+ NPU 异常断言(1 用例) ## 2. torch.Tensor.module_load(other, assign=False) → Tensor 定义如何将 other 转换后加载到 self 中,用于 load_state_dict() 的 swap_tensors 路径。当 get_swap_module_params_on_conversion() 为 True 时使用。 - **实现**:self.copy_(other).detach()(assign=False)或 other.detach()(assign=True) - **实现位置**:torch/_tensor.py - **NPU 支持情况**:非计算类 API,基于 copy_ 和 detach 实现,NPU 上直接可用,与数据类型无关 - **测试覆盖**:NPU tensor 上 5 个用例(返回值、dtype 保持、assign=True、destination 更新、detach 语义) # 【上游社区用例情况】 ## torch.Tensor.map_ PyTorch 社区 test/test_torch.py::test_broadcast 包含 "map",但显式跳过 CUDA 设备。NPU 行为与 CUDA 一致。 ## torch.Tensor.module_load 社区无直接测试用例,仅通过 load_state_dict 间接覆盖。 # 【测试环境】 - 操作系统:Linux 4.19.90-2102.2.0.0068.3.ctl2.aarch64 - 昇腾硬件:Ascend NPU(Ascend910B2) - 安装版本:torch 2.7.1 + torch_npu 2.7.1.post8 - 测试分支:v2.7.1 # 【测试日志】 text $ python -u test/test_tensor_map_.py -v test_map_applies_callable ... ok test_map_raises_on_npu_tensor ... ok test_map_uses_destination_values ... ok ---------------------------------------------------------------------- Ran 3 tests in 0.925s OK $ python -u test/test_tensor_module_load.py -v test_module_load_assign_true ... ok test_module_load_keeps_dest_dtype ... ok test_module_load_returns_detached_tensor ... ok test_module_load_returns_source_values ... ok test_module_load_updates_destination ... ok ---------------------------------------------------------------------- Ran 5 tests in 0.944s OK # 【资料补齐检查结论】 - torch.Tensor.map_:docs/zh/native_apis 中已有该 API 记录。map_ 在 NPU 上不可用,社区 CUDA 同样不支持,无需补充资料。 - torch.Tensor.module_load:docs/zh/native_apis 中已有该 API 记录。非计算类 API,与数据类型无关,无需补充资料。 Fixes #2720, Fixes #2722 See merge request: Ascend/pytorch!41661 | 2 小时前 | |
[test][v2.7.1] add NPU validation cases for torch.Tensor.map_ and torch.Tensor.module_load (issues #2720 #2722) Co-authored-by: lele130<20230105101@stu.lzjtu.edu.cn> # message auto-generated for no-merge-commit merge: !41661 merge test-map-module-load-v2.7.1 into v2.7.1 [test][v2.7.1] add NPU validation cases for torch.Tensor.map_ and torch.Tensor.module_load (issues #2720 #2722) Created-by: lele130 Commit-by: lele130 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区 issue,请关联 issue 链接**</font> > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部 issue 等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 关联 issue: - [#2720](https://gitcode.com/Ascend/pytorch/issues/2720) — torch.Tensor.map_(API 一致性验证) - [#2722](https://gitcode.com/Ascend/pytorch/issues/2722) — torch.Tensor.module_load(API 一致性验证) # 【修改方案】 本 PR 为 torch.Tensor.map_ 和 torch.Tensor.module_load 两个 API 在 NPU 场景下补充一致性验证用例。PyTorch 社区缺少针对这两个 API 的直接、集中测试,按规范 1.3(自写用例)新增测试文件到 test/ 目录。 修改文件: - test/test_tensor_map_.py(新增):覆盖 torch.Tensor.map_(3 个用例) - test/test_tensor_module_load.py(新增):覆盖 torch.Tensor.module_load(5 个用例) 合计 8 个用例。不涉及 torch_npu 任何 C++/Python 代码改动。 # 【API 功能介绍】 ## 1. torch.Tensor.map_(tensor, callable) → Tensor 对 self 和给定 tensor 的每个元素应用 callable,结果存回 self tensor。两个 tensor 必须可广播。 - **callable 签名**:def callable(a, b) -> number - **实现位置**:torch/_tensor.py,底层调用 at::map kernel - **NPU 支持情况**:NPU 上不可用(TypeError: map_ is only implemented on CPU tensors),社区 CUDA 同样不支持 - **测试覆盖**:CPU 正常路径(2 用例)+ NPU 异常断言(1 用例) ## 2. torch.Tensor.module_load(other, assign=False) → Tensor 定义如何将 other 转换后加载到 self 中,用于 load_state_dict() 的 swap_tensors 路径。当 get_swap_module_params_on_conversion() 为 True 时使用。 - **实现**:self.copy_(other).detach()(assign=False)或 other.detach()(assign=True) - **实现位置**:torch/_tensor.py - **NPU 支持情况**:非计算类 API,基于 copy_ 和 detach 实现,NPU 上直接可用,与数据类型无关 - **测试覆盖**:NPU tensor 上 5 个用例(返回值、dtype 保持、assign=True、destination 更新、detach 语义) # 【上游社区用例情况】 ## torch.Tensor.map_ PyTorch 社区 test/test_torch.py::test_broadcast 包含 "map",但显式跳过 CUDA 设备。NPU 行为与 CUDA 一致。 ## torch.Tensor.module_load 社区无直接测试用例,仅通过 load_state_dict 间接覆盖。 # 【测试环境】 - 操作系统:Linux 4.19.90-2102.2.0.0068.3.ctl2.aarch64 - 昇腾硬件:Ascend NPU(Ascend910B2) - 安装版本:torch 2.7.1 + torch_npu 2.7.1.post8 - 测试分支:v2.7.1 # 【测试日志】 text $ python -u test/test_tensor_map_.py -v test_map_applies_callable ... ok test_map_raises_on_npu_tensor ... ok test_map_uses_destination_values ... ok ---------------------------------------------------------------------- Ran 3 tests in 0.925s OK $ python -u test/test_tensor_module_load.py -v test_module_load_assign_true ... ok test_module_load_keeps_dest_dtype ... ok test_module_load_returns_detached_tensor ... ok test_module_load_returns_source_values ... ok test_module_load_updates_destination ... ok ---------------------------------------------------------------------- Ran 5 tests in 0.944s OK # 【资料补齐检查结论】 - torch.Tensor.map_:docs/zh/native_apis 中已有该 API 记录。map_ 在 NPU 上不可用,社区 CUDA 同样不支持,无需补充资料。 - torch.Tensor.module_load:docs/zh/native_apis 中已有该 API 记录。非计算类 API,与数据类型无关,无需补充资料。 Fixes #2720, Fixes #2722 See merge request: Ascend/pytorch!41661 | 2 小时前 | |
[test] split test_torch.py Co-authored-by: acaes<liuyan7892@163.com> # message auto-generated for no-merge-commit merge: !37874 merge v2.7.1_test into v2.7.1 [test] split test_torch.py Created-by: AACAES Commit-by: acaes Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> https://gitcode.com/Ascend/pytorch/issues/2337 - [ ] 需求 - [x] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) ci用例批跑报错,原始文件过大,可能踩内存导致,特此进行用例拆分 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 ci pass # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!37874 | 2 个月前 | |
[feat]TensorTo support preserve_format consistent with GPU Co-authored-by: chenshuai<chenshuai81@huawei.com> # message auto-generated for no-merge-commit merge: !35349 merge cherry-pick-mr-34696-1778548675540-auto into v2.7.1 [feat]TensorTo support preserve_format consistent with GPU Created-by: culechan Commit-by: culechan;chenshuai Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [x] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 1、NPU上tensorto支持preserve_format模式。行为逻辑上对齐pytorch原生框架 2、增加preserve_format模式相关的测试用例 # 【资料变更】 不涉及,原生API表格中未体现这部分内容 # 【接口变更】 Tensor.to默认使用且支持preserve_format模式 # 【功能验证】   # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!35349 | 3 个月前 | |
[test] split test_torch.py Co-authored-by: acaes<liuyan7892@163.com> # message auto-generated for no-merge-commit merge: !37874 merge v2.7.1_test into v2.7.1 [test] split test_torch.py Created-by: AACAES Commit-by: acaes Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> https://gitcode.com/Ascend/pytorch/issues/2337 - [ ] 需求 - [x] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) ci用例批跑报错,原始文件过大,可能踩内存导致,特此进行用例拆分 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 ci pass # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!37874 | 2 个月前 | |
[test][v2.7.1] add NPU validation cases for torch._C and torch._check APIs (issues #2674 #2675 #2676 #2764) Co-authored-by: anning-2026<870721918@qq.com> # message auto-generated for no-merge-commit merge: !43182 merge test/api-consistency-torch-c-v2.7.1 into v2.7.1 [test][v2.7.1] add NPU validation cases for torch._C and torch._check APIs (issues #2674 #2675 #2676 #2764) Created-by: anning-2026 Commit-by: anning-2026 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 关联 issue: - [#2764](https://gitcode.com/Ascend/pytorch/issues/2764) — torch._C._nn.flatten_dense_tensors(任务编号 #42) - [#2674](https://gitcode.com/Ascend/pytorch/issues/2674) — torch._C.DisableTorchFunction(任务编号 #52) - [#2675](https://gitcode.com/Ascend/pytorch/issues/2675) — torch._C.DisableTorchFunctionSubclass(任务编号 #53) - [#2676](https://gitcode.com/Ascend/pytorch/issues/2676) — torch._check_is_size(任务编号 #54) 注:任务 #39 torch._C._jit_set_texpr_fuser_enabled 已在 issue [#2818](https://gitcode.com/Ascend/pytorch/issues/2818) 中闭环,不纳入本 PR。 # 【修改方案】 本 PR 覆盖 4 个 torch._C.* 与 torch.* 私有接口的 NPU 一致性测试补齐,在 2 个新增测试文件中新增 25 个用例,不涉及 torch_npu 任何 C++ / Python 代码改动,也不修改 torch_npu 既有 patch。 修改文件(2 个新增): - test/test_torch_c_apis.py(新增):torch._C._nn.flatten_dense_tensors(8 个用例)、torch._C.DisableTorchFunction(2 个用例)、torch._C.DisableTorchFunctionSubclass(2 个用例),合计 12 个用例 - test/test_torch_check.py(新增):torch._check_is_size(13 个用例) 合计 4 个 API / 25 个用例,全部 NPU 实测通过。 # 【社区现状与路径依据】 针对 4 个新增用例的 API,PyTorch 上游 pytorch/pytorch 仓库的检索结论如下(git grep -ln <API> -- 'test/**.py',ref 取 v2.7.1 HEAD): | API | 上游直接功能测试 | 判定 | | --- | --- | --- | | torch._C._nn.flatten_dense_tensors | 无(仅 test/functorch/test_vmap_registrations.py 中作为字符串注册到 op 列表) | 上游未提供 Python 直测;新增 NPU 端 smoke 用例 | | torch._C.DisableTorchFunction | 无(test/test_overrides.py、test/dynamo/test_modes.py 中均为 use site) | 上游无独立功能覆盖;新增 dispatch 暂停/恢复用例 | | torch._C.DisableTorchFunctionSubclass | 无(同上) | 上游无独立功能覆盖;新增 Subclass 变体用例 | | torch._check_is_size | 无直接功能测试 | 上游未提供正向功能测试;新增正常/异常/max 用例 | # 【API 功能介绍】 1. **torch._C._nn.flatten_dense_tensors(tensors)**:把一组同 dtype/device 的张量 flatten 后 concatenate 成一个连续 1D 张量。 2. **torch._C.DisableTorchFunction**:上下文管理器,临时禁用 __torch_function__ 分发链路。 3. **torch._C.DisableTorchFunctionSubclass**:同上,只禁用 subclass 的 __torch_function__。 4. **torch._check_is_size(i, max=None)**:检查整数 i 是否为合法 size(>=0),否则抛 RuntimeError。 # 【测试方案】 4 个被覆盖的 API 的用例设计: 1. **torch._C._nn.flatten_dense_tensors**(8 个用例):正常 flatten、单张量、空序列、tuple、非 Tensor 元素、device 不一致 2. **torch._C.DisableTorchFunction**(2 个用例):context 内 dispatch 暂停/恢复 3. **torch._C.DisableTorchFunctionSubclass**(2 个用例):同上的 Subclass 变体 4. **torch._check_is_size**(13 个用例):正常值、负值越界、max 边界、message 参数、非法类型 # 【测试环境】 - 操作系统:Linux 4.19.90-2102.2.0.0068.3.ctl2.aarch64 - 昇腾硬件:Ascend910B2(torch.npu.device_count() == 2) - CANN 软件版本:cann-8.5.1 - Python:3.11.14 - 安装版本:torch 2.7.1、torch_npu 2.7.1 - 测试分支:本 PR base 为 v2.7.1 # 【测试命令】 bash cd <repo_root> python -u test/test_torch_c_apis.py -v python -u test/test_torch_check.py -v # 【测试日志】(基于当前 commit + Ascend NPU 实跑) text === test_torch_c_apis.py === test_disables_torch_function_on_subclass ... ok test_op_inside_disable_returns_plain_tensor ... ok test_disables_torch_function_subclass_on_subclass ... ok test_op_inside_disable_subclass_returns_plain_tensor ... ok test_concatenated_values_match_input_order ... ok test_concatenates_size_1_with_size_2 ... ok test_flatten_empty_list_raises_runtime_error ... ok test_flatten_raises_for_mismatched_device ... ok test_flatten_raises_for_non_tensor_element ... ok test_flatten_single_tensor ... ok test_flatten_tuple_input ... ok test_flattens_2d_tensors_to_1d_concat ... ok ---------------------------------------------------------------------- Ran 12 tests in 1.720s OK === test_torch_check.py === test_check_tensor_size_value ... ok test_fails_above_max_bound ... ok test_message_callable_produces_custom_error ... ok test_message_explicit_none ... ok test_message_format_string ... ok test_message_omitted ... ok test_passes_at_max_equal_i ... ok test_passes_for_non_negative_int ... ok test_passes_with_explicit_max_none ... ok test_passes_within_max_bound ... ok test_raises_for_invalid_max_type ... ok test_raises_for_negative_int ... ok test_raises_for_non_int_type ... ok ---------------------------------------------------------------------- Ran 13 tests in 1.633s OK 合计 Ran 25 tests, OK。 # 【资料补齐检查结论】 4 个 API 均为 PyTorch 私有接口(_ 前缀),按任务规范"PyTorch 私有接口不需要补充资料"原则,均跳过。 See merge request: Ascend/pytorch!43182 | 14 天前 | |
[test][v2.7.1] add NPU validation cases for torch._C and torch._check APIs (issues #2674 #2675 #2676 #2764) Co-authored-by: anning-2026<870721918@qq.com> # message auto-generated for no-merge-commit merge: !43182 merge test/api-consistency-torch-c-v2.7.1 into v2.7.1 [test][v2.7.1] add NPU validation cases for torch._C and torch._check APIs (issues #2674 #2675 #2676 #2764) Created-by: anning-2026 Commit-by: anning-2026 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 关联 issue: - [#2764](https://gitcode.com/Ascend/pytorch/issues/2764) — torch._C._nn.flatten_dense_tensors(任务编号 #42) - [#2674](https://gitcode.com/Ascend/pytorch/issues/2674) — torch._C.DisableTorchFunction(任务编号 #52) - [#2675](https://gitcode.com/Ascend/pytorch/issues/2675) — torch._C.DisableTorchFunctionSubclass(任务编号 #53) - [#2676](https://gitcode.com/Ascend/pytorch/issues/2676) — torch._check_is_size(任务编号 #54) 注:任务 #39 torch._C._jit_set_texpr_fuser_enabled 已在 issue [#2818](https://gitcode.com/Ascend/pytorch/issues/2818) 中闭环,不纳入本 PR。 # 【修改方案】 本 PR 覆盖 4 个 torch._C.* 与 torch.* 私有接口的 NPU 一致性测试补齐,在 2 个新增测试文件中新增 25 个用例,不涉及 torch_npu 任何 C++ / Python 代码改动,也不修改 torch_npu 既有 patch。 修改文件(2 个新增): - test/test_torch_c_apis.py(新增):torch._C._nn.flatten_dense_tensors(8 个用例)、torch._C.DisableTorchFunction(2 个用例)、torch._C.DisableTorchFunctionSubclass(2 个用例),合计 12 个用例 - test/test_torch_check.py(新增):torch._check_is_size(13 个用例) 合计 4 个 API / 25 个用例,全部 NPU 实测通过。 # 【社区现状与路径依据】 针对 4 个新增用例的 API,PyTorch 上游 pytorch/pytorch 仓库的检索结论如下(git grep -ln <API> -- 'test/**.py',ref 取 v2.7.1 HEAD): | API | 上游直接功能测试 | 判定 | | --- | --- | --- | | torch._C._nn.flatten_dense_tensors | 无(仅 test/functorch/test_vmap_registrations.py 中作为字符串注册到 op 列表) | 上游未提供 Python 直测;新增 NPU 端 smoke 用例 | | torch._C.DisableTorchFunction | 无(test/test_overrides.py、test/dynamo/test_modes.py 中均为 use site) | 上游无独立功能覆盖;新增 dispatch 暂停/恢复用例 | | torch._C.DisableTorchFunctionSubclass | 无(同上) | 上游无独立功能覆盖;新增 Subclass 变体用例 | | torch._check_is_size | 无直接功能测试 | 上游未提供正向功能测试;新增正常/异常/max 用例 | # 【API 功能介绍】 1. **torch._C._nn.flatten_dense_tensors(tensors)**:把一组同 dtype/device 的张量 flatten 后 concatenate 成一个连续 1D 张量。 2. **torch._C.DisableTorchFunction**:上下文管理器,临时禁用 __torch_function__ 分发链路。 3. **torch._C.DisableTorchFunctionSubclass**:同上,只禁用 subclass 的 __torch_function__。 4. **torch._check_is_size(i, max=None)**:检查整数 i 是否为合法 size(>=0),否则抛 RuntimeError。 # 【测试方案】 4 个被覆盖的 API 的用例设计: 1. **torch._C._nn.flatten_dense_tensors**(8 个用例):正常 flatten、单张量、空序列、tuple、非 Tensor 元素、device 不一致 2. **torch._C.DisableTorchFunction**(2 个用例):context 内 dispatch 暂停/恢复 3. **torch._C.DisableTorchFunctionSubclass**(2 个用例):同上的 Subclass 变体 4. **torch._check_is_size**(13 个用例):正常值、负值越界、max 边界、message 参数、非法类型 # 【测试环境】 - 操作系统:Linux 4.19.90-2102.2.0.0068.3.ctl2.aarch64 - 昇腾硬件:Ascend910B2(torch.npu.device_count() == 2) - CANN 软件版本:cann-8.5.1 - Python:3.11.14 - 安装版本:torch 2.7.1、torch_npu 2.7.1 - 测试分支:本 PR base 为 v2.7.1 # 【测试命令】 bash cd <repo_root> python -u test/test_torch_c_apis.py -v python -u test/test_torch_check.py -v # 【测试日志】(基于当前 commit + Ascend NPU 实跑) text === test_torch_c_apis.py === test_disables_torch_function_on_subclass ... ok test_op_inside_disable_returns_plain_tensor ... ok test_disables_torch_function_subclass_on_subclass ... ok test_op_inside_disable_subclass_returns_plain_tensor ... ok test_concatenated_values_match_input_order ... ok test_concatenates_size_1_with_size_2 ... ok test_flatten_empty_list_raises_runtime_error ... ok test_flatten_raises_for_mismatched_device ... ok test_flatten_raises_for_non_tensor_element ... ok test_flatten_single_tensor ... ok test_flatten_tuple_input ... ok test_flattens_2d_tensors_to_1d_concat ... ok ---------------------------------------------------------------------- Ran 12 tests in 1.720s OK === test_torch_check.py === test_check_tensor_size_value ... ok test_fails_above_max_bound ... ok test_message_callable_produces_custom_error ... ok test_message_explicit_none ... ok test_message_format_string ... ok test_message_omitted ... ok test_passes_at_max_equal_i ... ok test_passes_for_non_negative_int ... ok test_passes_with_explicit_max_none ... ok test_passes_within_max_bound ... ok test_raises_for_invalid_max_type ... ok test_raises_for_negative_int ... ok test_raises_for_non_int_type ... ok ---------------------------------------------------------------------- Ran 13 tests in 1.633s OK 合计 Ran 25 tests, OK。 # 【资料补齐检查结论】 4 个 API 均为 PyTorch 私有接口(_ 前缀),按任务规范"PyTorch 私有接口不需要补充资料"原则,均跳过。 See merge request: Ascend/pytorch!43182 | 14 天前 | |
test: add torch.__getattribute__ API validation Co-authored-by: 2490136803<2490136803@qq.com> # message auto-generated for no-merge-commit merge: !41414 merge intern/test-torch-getattribute-v2-7-1 into v2.7.1 test: add torch.__getattribute__ API validation Created-by: zhouzirui-2026 Commit-by: 2490136803 Merged-by: ascend-robot Description: # 【合入来源】 - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 关联 issue: - 任务 issue:https://gitcode.com/Ascend/pytorch/issues/2734 # 【修改方案】 本 PR 新增 test/test_torch_getattribute_api.py,补充 torch.__getattribute__ 在 torch-npu 环境下的 API 一致性验证用例。 该 API 是 Python module 对象的属性访问入口,用于从 torch module 上按名称读取属性。经检查,PyTorch 官方未提供 torch.__getattribute__ 的独立专项测试,torch-npu 当前 test 和 test_upstream 目录中也未发现该 API 的专项测试。按照指导规范,本场景属于“PyTorch 官方社区无用例”,因此在 torch-npu test 目录补充自写测试。 任务 API 功能、上游社区用例情况与本 PR 处理方式如下: | API | 功能说明 | 上游社区用例 / 覆盖情况 | 本 PR 处理 | | --- | --- | --- | --- | | torch.__getattribute__ | Python module 属性访问入口,用于按名称读取 torch module 上的属性。 | 未检索到 PyTorch 官方直接专项测试;torch-npu 现有 test / test_upstream 目录中也未发现专项测试。 | 新增 test/test_torch_getattribute_api.py,验证已有属性读取、动态属性读取和异常路径。 | 主要开发思路: 1. 先确认 torch.__getattribute__ 在当前多版本 torch-npu 环境中存在,且基础行为与 Python module 属性访问语义一致。 2. 复查 PyTorch 官方测试目录,未发现直接覆盖 torch.__getattribute__ 的独立专项测试。 3. 复查 torch-npu 当前仓库 test 和 test_upstream 目录,未发现该 API 的现有专项测试。 4. 该 API 不涉及 Tensor 输入,不存在需要迁移到 NPU Tensor 的适配点,因此不需要 test_upstream patch。 5. 该 API 属于顶层 torch module 属性访问能力,不属于 npu、fx、nn 等子模块,因此测试文件放在 torch-npu 根测试目录 test/test_torch_getattribute_api.py。 6. 本 PR 仅补充测试,不修改 API 实现,不改变现有接口行为。 新增测试文件: text test/test_torch_getattribute_api.py 新增测试方法: text test_get_existing_attributes test_get_dynamic_attribute test_get_missing_attribute_raises 各测试核心验证点如下: | 测试方法 | 核心验证点 | | --- | --- | | test_get_existing_attributes | 使用 types.ModuleType.__getattribute__(torch, "__dict__") 获取模块字典作为独立 oracle,验证 torch.__config__、torch.Tensor、torch.nn、torch.empty 等已存在属性通过 torch.__getattribute__ 读取时返回模块字典中的同一对象。 | | test_get_dynamic_attribute | 在 torch module 上临时设置动态属性,验证 torch.__getattribute__ 可读取该属性,且返回对象与模块字典中记录的对象一致;测试结束后清理动态属性。 | | test_get_missing_attribute_raises | 验证读取不存在属性时,保持 Python module 语义并抛出包含属性名的 AttributeError。 | # 【资料变更】 不涉及资料 PR。 已检查 PyTorch 官方公开文档与 Ascend native API 文档,未发现 torch.__getattribute__ 独立条目。该 API 属于 Python module 固有属性访问机制,不是计算类公开 API,因此不新增 docs.md,不提交资料 PR。 # 【接口变更】 不涉及。 本 PR 不修改 API 实现,不改变现有接口行为,不新增 torch-npu 对外接口。 # 【功能验证】 运行环境: text 操作系统:Ubuntu 22.04.5 LTS (aarch64) 内核版本:5.10.0-182.0.0.95.oe2203sp3.aarch64 NPU 型号:Ascend 910B4 Driver / npu-smi:25.2.0 CANN Toolkit:9.0.0 CANN 路径:/usr/local/Ascend/cann-9.0.0 Python:3.10.12 分支验证环境: text 分支:2.7.1 torch:2.7.1 torch-npu:2.7.1 Python 环境:/workspace/a3-zzr-env/envs/venv_torch2.7.1_torchnpu2.7.1_py310 执行命令: bash cd /root python /workspace/a3-zzr-env/repos/pytorch-v2.7.1/test/test_torch_getattribute_api.py 执行结果: text ... ---------------------------------------------------------------------- Ran 3 tests in 0.023s OK 最终验证结论: 1. 本 PR 补充 3 个 API 一致性测试,覆盖 torch.__getattribute__ 的正常属性读取、动态属性读取和异常路径。 2. 补充测试不仅验证 API 可调用,也使用模块字典作为独立 oracle 验证已有属性读取、运行时动态属性访问能力和缺失属性异常语义。 3. 该 API 不涉及 Tensor 输入,不需要 NPU Tensor 迁移适配。 4. 补充测试已在 2.7.1 环境验证通过。 5. 目标 API 当前行为符合预期,未发现需要 API 功能补齐的问题。 6. 本 PR 不修改 API 实现,不涉及接口变更。 # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!41414 | 25 天前 | |
perf: defer dynamo/inductor import for v2.7.1 (#2788) Co-authored-by: stevenaw0<huangguijun@huawei.com> # message auto-generated for no-merge-commit merge: !43391 merge v2.7.1_import into v2.7.1 perf: defer dynamo/inductor import for v2.7.1 (#2788) Created-by: stevenaw0 Commit-by: stevenaw0 Merged-by: ascend-robot Description: # 【合入来源】 > 关联社区 issue:https://gitcode.com/Ascend/pytorch/issues/2788 - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [x] 重构优化 - [ ] 资料更新 # 【修改方案】 ## 1. 背景与目标 原有 import torch_npu 会间接加载 torch._dynamo、torch._inductor 及大量子模块,增加导入耗时、内存占用和编译器初始化副作用。 本 PR 将图模式初始化从普通 import 阶段移出,同时保持公开接口的原有调用方式: - import torch_npu 不加载 torch._dynamo、torch._inductor、torch_npu._inductor。 - Dynamo、Inductor、TorchAir、NPUGraph 等能力在实际使用时初始化。 - torch.compile 的非 Inductor backend 不加载完整 NPU Inductor。 - Export、ONNX、FSDP、NPUGraph 等公开入口仍在使用前完成所需初始化。 ## 2. 拆分 Dynamo 与 Inductor 初始化 - _lazy_dynamo_setup() 负责 NPU DeviceInterface、Dynamo Variable/Stream/Event/autocast 补丁、trace rules 和 backend 注册。 - _lazy_inductor_setup() 仅在 inductor、npugraphs backend 使用时加载 torch_npu._inductor、NPU Inductor config 和 NPUGraph tree。 - 初始化使用带并发保护的 run_once,成功步骤单独记录;后续步骤失败时,已成功步骤不重复执行,失败初始化允许重试。 - torch.compile(options={"npu_backend": ...}) 在加载 NPU Inductor 前解析本次 options、全局 config 和环境变量,避免先按 default 初始化再切换 backend。 ## 3. 使用统一 Dynamo post-import 触发器 不再包装 torch.compile、torch.export.export、export_for_training、torch.onnx.export 等公开函数,避免改变公开函数对象、签名、装饰器语义,以及提前绑定接口绕过 wrapper。 import torch_npu 只安装 torch._dynamo post-import finder: - 首次导入 torch._dynamo 完成后,统一执行 _lazy_dynamo_setup()。 - 如果用户在 torch_npu 前已经导入 Dynamo,则在 import torch_npu 时补充 NPU 初始化。 - finder 委托其余 sys.meta_path finder 查找真实模块,不绕过其他自定义导入器。 - Export、ONNX Dynamo Export、compile 和提前绑定的公开入口都通过同一个 Dynamo 导入时机完成初始化。 torch.compiler.list_backends() 本身会导入 torch._dynamo,因此也会完成 NPU Dynamo 集成;该路径不会加载 NPU Inductor 或初始化 NPU 设备。三个 NPU backend 同时通过 torch_dynamo_backends entry point 暴露,首次 compile 前即可枚举: - npu - npugraph_ex - npugraphs ## 4. 公开接口和场景兼容处理 | 公开接口或场景 | 原始风险 | 当前处理 | |---|---|---| | torch.compiler.list_backends() | 首次 compile 前看不到 NPU backend | 通过 entry point 保持三个 backend 可见;调用时初始化 Dynamo,但不加载 NPU Inductor | | torch.compiler.npugraph_mark_step_begin() | 首次 compile 前接口不存在,或调用时过度加载编译器 | import 阶段暴露轻量无参接口;共享独立 step 状态,调用时不加载 Dynamo/Inductor | | torch_npu.distributed.tensor | import 阶段加载 DTensor experimental,继而传递导入 Dynamo/Inductor | tensor 子模块改为首次显式访问时导入;显式使用时继续执行原有 strategy 注册实现,不复制或修改 PyTorch register_sharding | | torch.export.export / export_for_training / export_for_inference | NPU Stream、Event、autocast 等捕获支持未初始化;提前绑定可能绕过 wrapper | 不包装公开函数,由统一 Dynamo post-import 触发;四种入口和绑定顺序均使用真实 NPU Export 验证 | | torch.onnx.export(..., dynamo=True) / torch.onnx.dynamo_export | ONNX 路径可能绕过 Export wrapper | 依赖统一 Dynamo post-import 触发;模块调用和两种提前绑定入口覆盖初始化链路 | | torch.compile(..., backend="eager"/custom/"npu") | 无条件加载完整 NPU Inductor | 只初始化 Dynamo,不加载 torch_npu._inductor | | torch.compile(..., backend="inductor"/"npugraphs") | NPU Inductor 尚未注册 | backend lookup 前完成 Dynamo 初始化,确定为 Inductor 类 backend 后再加载 NPU Inductor | | NPU DeviceInterface | 延迟导入后可能报 No interface for device npu | Dynamo 初始化时注册 npu 和 npu:0~31,Stream 接口回归通过 | | FSDP patch | import 阶段导入 FSDP 会间接加载 Dynamo | 使用 FSDP post-import patch,覆盖 torch_npu 前后两种导入顺序 | | torch_npu.npu.npugraph_ex | import torch_npu.npu 时提前加载图模式模块 | 使用模块 __getattr__ 按需导入,公开属性访问方式不变 | ## 5. DTensor 延迟导入与 NPUGraph step 状态拆分 - 不在 torch_npu 中复制 PyTorch 的 register_sharding 实现,也不改动 NPU DTensor 算子文件。普通 import torch_npu 不再主动导入 torch_npu.distributed.tensor;用户显式访问该子模块时,沿用 v2.7.1 原有初始化和 strategy 注册路径。 - MarkStepBox 和 mark_step_begin() 拆到轻量状态模块,公共 mark-step API 与完整 Graph Tree 共享计数状态,但不需要为一次标记加载完整编译器实现。 ## 6. 保留非编译器 import-time 行为 - 将不依赖 Inductor 的 RNG prim 和 decomposition patch 拆到 torch_npu/utils/_rng_prims_patch.py,普通 registry 继续执行这些基础 patch。 - torch_npu.utils._inductor 保留兼容重导出,不再承担完整 NPU Inductor 初始化。 - transfer_to_npu 在自身初始化入口显式导入实际需要修改的模块,不依赖 import torch_npu 的编译器隐式导入。 ## 7. 测试看护 新增或扩展的测试覆盖: - 普通 import torch_npu 不加载 Dynamo/Inductor,并保持公开函数对象不变。 - Dynamo 在 torch_npu 前后两种导入顺序。 - backend lookup 前完成初始化,list_backends() 可见三个 NPU backend。 - eager、自定义、npu、inductor、npugraphs backend 初始化边界。 - Export 四种公开入口/提前绑定顺序及六类 NPU 捕获语义:record_stream、Stream/Event、autocast、current device、device properties、is_available。 - ONNX 三种入口:模块 export、提前绑定 export、提前绑定旧 dynamo_export。 - FSDP 两种导入顺序。 - NPUGraph mark-step 接口签名、计数及无 compiler import。 - NPU DeviceInterface、初始化快照和既有 Stream/Event 捕获行为。 DTensor 的原有算子文件和 register_sharding 实现未修改,本 PR 不新增其实现副本或专项矩阵用例。 # 【资料变更】 不涉及。 # 【接口变更】 不涉及客户可见接口签名变更。torch.compile、Export/ONNX 公开函数不再被 torch_npu 包装;torch_npu.distributed.tensor 的公开访问方式不变,仅从 import 阶段加载调整为首次显式访问时加载。 # 【功能验证】 在 torch-npu-build-2.7.1-py311 环境使用真实 NPU 验证: - test/dynamo/test_compile_trigger.py 覆盖 import、Dynamo 触发、compile backend、Export、ONNX、FSDP、NPUGraph 和 DeviceInterface 路径。 - test/test_torch_npu_init.py:13/13 通过。 - test/npu/test_stream.py:10/10 通过。 - test/dynamo/test_trace_stream_event.py:1/1 通过。 - 显式访问 torch_npu.distributed.tensor 后,原有 NPU strategy 注册正常。 - py_compile、git diff --check 通过。 - 验证所需临时依赖和 Conda 文件均已恢复。 # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!43391 | 5 天前 | |
| 1 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
test:This PR adds missing test cases for torch._utils._unflatten_dense_tensors, as there are currently no community-provided tests for this function. Co-authored-by: xin_heyun<919112805@qq.com> # message auto-generated for no-merge-commit merge: !42048 merge test_unflatten_dense_tensors_v2.7.1 into v2.7.1 test:This PR adds missing test cases for torch._utils._unflatten_dense_tensors, as there are currently no community-provided tests for this function. Created-by: xin_heyun Commit-by: xin_heyun Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> issue任务地址:https://gitcode.com/Ascend/pytorch/issues/2932 - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 为 torch._utils._unflatten_dense_tensors 新增 NPU 设备回归测试用例,放置在 test/test_unflatten_dense_tensors.py。 1. PyTorch 社区对该 API 仅有 C++ 层单元测试(test/cpp/api/tensor_flatten.cpp),Python 层面无任何测试用例,且缺少 NPU 设备上的运行验证。 2. 新增 8 个测试用例,基于 PyTorch 标准 TestCase 框架,通过 torch.accelerator.current_accelerator() 自动获取 NPU 设备并完成张量迁移,覆盖以下维度: - 展平-还原往返操作正确性 - 单张量与多张量(1D/2D/3D 不同形状) - 空张量混合与全空张量边界场景 - float32 / float16 / int32 多 dtype 兼容性 - 50 个大数量张量压力场景 - tuple 类型输入兼容性 3. 遵循 NPU 测试用例规范:导入顺序为 torch → torch.testing._internal.common_utils,不依赖 torch_npu,使用 self.assert* 断言,无 print/try-except,注释精简英文。 # 【资料变更】 不涉及。torch._utils._unflatten_dense_tensors 为 PyTorch 内部工具函数(_ 前缀),不属于公开文档覆盖范围。 # 【接口变更】 不涉及。仅新增测试文件,无对外接口变更。 # 【功能验证】 **测试场景**:在 NPU 设备上验证 torch._utils._unflatten_dense_tensors 将展平 1D 张量按目标形状还原为多个张量的功能正确性。 2.7.1 执行命令 python test_unflatten_dense_tensors.py -v 结果 test_all_empty_tensors (__main__.TestUnflattenDenseTensors.test_all_empty_tensors) ... ok test_different_dtypes (__main__.TestUnflattenDenseTensors.test_different_dtypes) ... ok test_empty_tensor_in_list (__main__.TestUnflattenDenseTensors.test_empty_tensor_in_list) ... ok test_large_num_tensors (__main__.TestUnflattenDenseTensors.test_large_num_tensors) ... ok test_multiple_tensors_different_sizes (__main__.TestUnflattenDenseTensors.test_multiple_tensors_different_sizes) ... ok test_round_trip_basic (__main__.TestUnflattenDenseTensors.test_round_trip_basic) ... ok test_single_tensor (__main__.TestUnflattenDenseTensors.test_single_tensor) ... ok test_tuple_input (__main__.TestUnflattenDenseTensors.test_tuple_input) ... ok ---------------------------------------------------------------------- Ran 8 tests in 1.339s OK 2.9.0 执行命令 python test_unflatten_dense_tensors.py -v 结果 test_all_empty_tensors (__main__.TestUnflattenDenseTensors.test_all_empty_tensors) ... ok test_different_dtypes (__main__.TestUnflattenDenseTensors.test_different_dtypes) ... ok test_empty_tensor_in_list (__main__.TestUnflattenDenseTensors.test_empty_tensor_in_list) ... ok test_large_num_tensors (__main__.TestUnflattenDenseTensors.test_large_num_tensors) ... ok test_multiple_tensors_different_sizes (__main__.TestUnflattenDenseTensors.test_multiple_tensors_different_sizes) ... ok test_round_trip_basic (__main__.TestUnflattenDenseTensors.test_round_trip_basic) ... ok test_single_tensor (__main__.TestUnflattenDenseTensors.test_single_tensor) ... ok test_tuple_input (__main__.TestUnflattenDenseTensors.test_tuple_input) ... ok ---------------------------------------------------------------------- Ran 8 tests in 1.331s OK 2.11.0 执行命令 python test_unflatten_dense_tensors.py -v 结果 test_all_empty_tensors (__main__.TestUnflattenDenseTensors.test_all_empty_tensors) ... ok test_different_dtypes (__main__.TestUnflattenDenseTensors.test_different_dtypes) ... [W718 07:12:27.082786050 NPUCachingAllocator.cpp:201] Warning: The current CANN and Soc versions require processing for 32 padding size, with memory allocation. (function operator()) ok test_empty_tensor_in_list (__main__.TestUnflattenDenseTensors.test_empty_tensor_in_list) ... ok test_large_num_tensors (__main__.TestUnflattenDenseTensors.test_large_num_tensors) ... ok test_multiple_tensors_different_sizes (__main__.TestUnflattenDenseTensors.test_multiple_tensors_different_sizes) ... ok test_round_trip_basic (__main__.TestUnflattenDenseTensors.test_round_trip_basic) ... ok test_single_tensor (__main__.TestUnflattenDenseTensors.test_single_tensor) ... ok test_tuple_input (__main__.TestUnflattenDenseTensors.test_tuple_input) ... ok ---------------------------------------------------------------------- Ran 8 tests in 1.357s OK 2.12.0 执行命令 python test_unflatten_dense_tensors.py -v 结果 `` W0718 07:12:38.397000 45485 opt/conda/envs/v2.12.0/lib/python3.12/site-packages/torch/_native/cutedsl_utils.py:55] CuTeDSL operators require optional Python packages nvidia-cutlass-dsl and apache-tvm-ffi; missing optional dependency nvidia_cutlass_dsl (importlib.util.find_spec(nvidia_cutlass_dsl) failed) test_all_empty_tensors (__main__.TestUnflattenDenseTensors.test_all_empty_tensors) ... ok test_different_dtypes (__main__.TestUnflattenDenseTensors.test_different_dtypes) ... [W718 07:12:39.554782459 NPUCachingAllocator.cpp:201] Warning: The current CANN and Soc versions require processing for 32 padding size, with memory allocation. (function operator()) ok test_empty_tensor_in_list (__main__.TestUnflattenDenseTensors.test_empty_tensor_in_list) ... ok test_large_num_tensors (__main__.TestUnflattenDenseTensors.test_large_num_tensors) ... ok test_multiple_tensors_different_sizes (__main__.TestUnflattenDenseTensors.test_multiple_tensors_different_sizes) ... ok test_round_trip_basic (__main__.TestUnflattenDenseTensors.test_round_trip_basic) ... ok test_single_tensor (__main__.TestUnflattenDenseTensors.test_single_tensor) ... ok test_tuple_input (__main__.TestUnflattenDenseTensors.test_tuple_input) ... ok ---------------------------------------------------------------------- Ran 8 tests in 1.374s OK master 执行命令 python test_unflatten_dense_tensors.py -v 结果 test_all_empty_tensors (__main__.TestUnflattenDenseTensors.test_all_empty_tensors) ... ok test_different_dtypes (__main__.TestUnflattenDenseTensors.test_different_dtypes) ... [W718 07:12:49.941707130 NPUCachingAllocator.cpp:174] Warning: The current CANN and Soc versions require processing for 32 padding size, with memory allocation. (function operator()) ok test_empty_tensor_in_list (__main__.TestUnflattenDenseTensors.test_empty_tensor_in_list) ... ok test_large_num_tensors (__main__.TestUnflattenDenseTensors.test_large_num_tensors) ... ok test_multiple_tensors_different_sizes (__main__.TestUnflattenDenseTensors.test_multiple_tensors_different_sizes) ... ok test_round_trip_basic (__main__.TestUnflattenDenseTensors.test_round_trip_basic) ... ok test_single_tensor (__main__.TestUnflattenDenseTensors.test_single_tensor) ... ok test_tuple_input (__main__.TestUnflattenDenseTensors.test_tuple_input) ... ok ---------------------------------------------------------------------- Ran 8 tests in 1.372s OK `` # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!42048 | 25 天前 | |
| 2 年前 | ||
test: add NPU coverage for torch._utils._get_available_device_type Co-authored-by: liujiacheng_2026<laneljc@qq.com> # message auto-generated for no-merge-commit merge: !42002 merge test-get-available-device-type-v2.7.1 into v2.7.1 test: add NPU coverage for torch._utils._get_available_device_type Created-by: liujiacheng_2026 Commit-by: liujiacheng_2026 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 https://gitcode.com/Ascend/pytorch/issues/2924 - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 ## 一、API 功能 torch._utils._get_available_device_type 用于查询当前 PyTorch 环境中可用的加速设备类型。Torch-NPU 将 PrivateUse1 后端注册为 npu 后,该函数应返回字符串 "npu";没有可用加速设备时返回 None。 ## 二、PyTorch 社区用例情况与新增必要性 已在 PyTorch 官方社区和 Torch-NPU 原有测试中检索 torch._utils._get_available_device_type,没有发现针对该 API 返回值的直接断言。该 API 是私有工具函数,不涉及 Tensor 或算子计算。 因此本 PR 在 torch-npu test 目录新增独立、可扩展的测试文件: text test/test_utils_api.py::TestTorchUtilsAPIs::test_get_available_device_type 用例只直接断言 torch._utils._get_available_device_type() 返回 "npu",不增加冗余环境探测、Tensor 创建或异常包装。 ## 三、NPU 适配 ### 3.1 API 适配 Torch-NPU 已将 PrivateUse1 后端注册为 npu,API 实际返回 "npu",无需修改 torch_npu/ 源码。 ### 3.2 测试用例适配 该 API 是非计算类工具函数,不涉及 Tensor,因此新增测试不需要创建 NPU Tensor;测试通过返回值直接验证 NPU 后端注册结果。 # 【资料变更】 无资料文件变更。torch._utils._get_available_device_type 是 PyTorch 私有接口,按任务规范无需补充资料。 # 【接口变更】 无客户可见接口变更。本 PR 仅新增目标 API 的直接测试用例。 # 【功能验证】 验证环境:PyTorch 2.7.1、torch-npu 对应版本、Ascend910B4。 bash python test/test_utils_api.py -v text test_get_available_device_type (__main__.TestTorchUtilsAPIs.test_get_available_device_type) ... ok ---------------------------------------------------------------------- Ran 1 test in 0.025s OK 返回值为 "npu",表明测试实际加载了 NPU PrivateUse1 后端;没有跳过新增测试。 # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!42002 | 4 天前 | |
test(utils): add checkpoint API coverage tests on NPU Co-authored-by: Jinfan Liu<1300083451@qq.com> # message auto-generated for no-merge-commit merge: !37236 merge test-utils-checkpoint-weak-npu-2.7.1 into v2.7.1 test(utils): add checkpoint API coverage tests on NPU Created-by: JfanLiu Commit-by: Jinfan Liu Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**https://gitcode.com/Ascend/pytorch/issues/2026**</font> > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> [x] issue/工单 # 【修改方案】 一、API功能说明 本 PR 补充 torch.utils.checkpoint 弱覆盖 API 的直接验证用例: - torch.utils.checkpoint.SelectiveCheckpointContext:selective checkpoint policy function 接收的上下文对象,用于区分 forward/recompute 阶段;2.12.0 起还可携带 op_output。 - torch.utils.checkpoint.detach_variable:reentrant checkpoint 内部用于 detach 输入 Tensor 并保持 requires_grad 状态的辅助函数。 二、测试用例完备性说明 PyTorch 官方社区 test/test_autograd.py 已通过 checkpoint 调用链间接覆盖上述 API,但缺少直接、聚焦的 API 行为断言。本 PR 按 1.3 类补充 torch-npu 自定义测试文件 test/test_utils_checkpoint_api.py。 1. torch.utils.checkpoint.detach_variable 直接覆盖: - test_detach_variable_keeps_device_and_requires_grad 直接调用 torch.utils.checkpoint.detach_variable((x, y, marker))。 - x 和 y 均为 NPU Tensor,覆盖返回 Tensor 保持 NPU device、requires_grad 与原输入一致、grad_fn 被断开并成为 leaf Tensor,非 Tensor 对象透传。 - test_detach_variable_rejects_non_tuple_input 覆盖非 tuple 输入的 RuntimeError 分支。 2. torch.utils.checkpoint.SelectiveCheckpointContext 直接覆盖: - test_selective_checkpoint_context_direct_attributes 直接实例化 torch.utils.checkpoint.SelectiveCheckpointContext,断言对象类型和 is_recompute 属性;对支持 op_output 的版本,额外断言 op_output 指向 NPU Tensor 输出。 - test_selective_checkpoint_context_passed_to_policy_fn 通过 create_selective_checkpoint_contexts + checkpoint(..., use_reentrant=False, context_fn=...) 捕获 policy_fn 收到的 ctx,断言 forward/recompute 两阶段均收到 SelectiveCheckpointContext,并验证上下文来自 NPU Tensor 的 selective checkpoint 运行路径。 上述新增用例把原来的调用链弱覆盖补充为直接 API 行为覆盖;其中涉及 Tensor 的路径均使用 torch.accelerator.current_accelerator() 获取 NPU 设备并在 NPU Tensor 上执行。 三、NPU适配方案 1. API 源码无需修改:torch.utils.checkpoint.SelectiveCheckpointContext 与 torch.utils.checkpoint.detach_variable 均复用 PyTorch Python 层实现,不新增 NPU kernel,不改变接口语义。 2. 测试新增路径:新增 test/test_utils_checkpoint_api.py,文件聚焦 checkpoint API 直接行为,可后续扩展同模块 API。 3. 分支提交范围:新增测试文件提交到 2.7.1、2.9.0、2.10.0、2.11.0、2.12.0 以及 master。 四、变更文件 - test/test_utils_checkpoint_api.py # 【资料变更】 > 已检查资料支持情况,结论如下: > > checkpoint: > - 公开 API,在文档中记录:torch.utils.checkpoint.CheckpointPolicy、torch.utils.checkpoint.SelectiveCheckpointContext、torch.utils.checkpoint.create_selective_checkpoint_contexts、torch.utils.checkpoint.set_checkpoint_debug_enabled。对应资料 PR:https://gitcode.com/Ascend/pytorch/merge_requests/36231 > - 内部函数,不在文档中记录:torch.utils.checkpoint.detach_variable。 # 【接口变更】 > 不涉及。API 源码无修改,不新增、删除或变更对外接口。 # 【功能验证】 > 已在 2.7.1 对应 torch-npu 环境执行新增用例,结果如下;master 使用 2.12.0 验证环境执行。 ## 验证环境 - 操作系统:Ubuntu / Linux aarch64 - 昇腾硬件:910B2 - CANN 软件版本:8.3.RC1 - 验证环境: - 2.7.1:torch 2.7.1+cpu / torch-npu 2.7.1.post3 - 2.9.0:torch 2.9.0+cpu / torch-npu 2.9.0.post1 - 2.10.0:torch 2.10.0+cpu / torch-npu 2.10.0rc3 - 2.11.0:torch 2.11.0+cpu / torch-npu 2.11.0rc1 - 2.12.0 / master 验证:torch 2.12.0+cpu / torch-npu 2.12.0.rc1 ## 运行命令与结果 bash python test/test_utils_checkpoint_api.py Ran 4 tests in 1.850s OK # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!37236 | 2 个月前 | |
test(utils): add data worker API coverage tests on NPU Co-authored-by: Jinfan Liu<1300083451@qq.com> # message auto-generated for no-merge-commit merge: !37242 merge test-utils-data-weak-npu-2.7.1 into v2.7.1 test(utils): add data worker API coverage tests on NPU Created-by: JfanLiu Commit-by: Jinfan Liu Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**https://gitcode.com/Ascend/pytorch/issues/2027**</font> > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> [x] issue/工单 # 【修改方案】 一、API功能说明 本 PR 补充 torch.utils.data worker/control 弱覆盖 API 的直接验证用例: - torch.utils.data.dataloader._MultiProcessingDataLoaderIter - torch.utils.data.dataloader._InfiniteConstantSampler - torch.utils.data._utils.worker.ManagerWatchdog - torch.utils.data._utils.worker._IterableDatasetStopIteration - torch.utils.data._utils.worker._ResumeIteration - torch.utils.data._utils.signal_handling._set_worker_signal_handlers - torch.utils.data._utils.signal_handling._remove_worker_pids 上述 API 属于 DataLoader 多进程 iterator、IterableDataset 采样控制、worker 存活检查、worker 控制消息以及 worker 信号/pid 管理逻辑。 二、测试用例完备性说明 PyTorch 官方社区 test/test_dataloader.py 已通过 DataLoader 多进程用例覆盖上述 API 的调用链,但缺少对部分内部对象和控制消息的直接行为断言。本 PR 按 1.3 类补充 torch-npu 自定义测试文件 test/test_utils_data_api.py。 1. torch.utils.data.dataloader._MultiProcessingDataLoaderIter 直接覆盖: - test_multiprocessing_dataloader_iter_type_and_shutdown 构造 num_workers=1 的 DataLoader,显式断言 iter(loader) 是 _MultiProcessingDataLoaderIter,并验证 next(iterator) 返回预期 batch,最后调用 _shutdown_workers() 覆盖正常关闭路径。 2. torch.utils.data.dataloader._InfiniteConstantSampler 直接覆盖: - test_infinite_constant_sampler_yields_none 直接实例化 _InfiniteConstantSampler,并断言连续 yield None,覆盖 IterableDataset 无限索引采样器的核心行为。 3. torch.utils.data._utils.worker.ManagerWatchdog 直接覆盖: - test_manager_watchdog_reports_parent_alive 直接构造 ManagerWatchdog,并断言正常父进程场景 is_alive() 为 True。 4. torch.utils.data._utils.worker._IterableDatasetStopIteration / torch.utils.data._utils.worker._ResumeIteration 直接覆盖: - test_worker_control_message_fields 直接构造两个 dataclass 控制消息,断言 worker_id、seed 字段和 repr 内容,覆盖 worker 耗尽通知与 persistent worker 恢复消息的对象行为。 5. torch.utils.data._utils.signal_handling._set_worker_signal_handlers / torch.utils.data._utils.signal_handling._remove_worker_pids 直接覆盖: - test_worker_signal_handlers_and_pid_cleanup 直接调用 _set_worker_signal_handlers,并通过 _set_worker_pids 注册当前 pid 后调用 _remove_worker_pids 清理,覆盖 C 侧 worker signal handler 初始化和 worker pid registry 清理入口的正常路径。 本文件验证的是 DataLoader worker/control 面 API。为避免把验证目标混入 NPU IPC 和 worker 子进程设备 Tensor 传输,本新增用例中的多进程 DataLoader 使用 Python 字符串 payload,不在 worker 子进程返回 NPU Tensor;原 DataLoader NPU Tensor payload 路径已由 test_upstream 中单进程 DataLoader/collate 用例覆盖。 三、NPU适配方案 1. API 源码无需修改:上述 API 是 torch.utils.data 的 Python/C++ 控制面入口,不新增 NPU kernel,不改变接口语义。 2. 测试新增路径:新增 test/test_utils_data_api.py,文件聚焦 worker/control API 直接行为,可后续扩展同模块 API。 3. 分支提交范围:新增测试文件提交到 2.7.1、2.9.0、2.10.0、2.11.0、2.12.0 以及 master。 四、变更文件 - test/test_utils_data_api.py # 【资料变更】 > 已检查资料支持情况,结论如下: > > dataloader: > - 公开 API,在文档中记录:torch.utils.data.DataLoader、torch.utils.data._utils.collate.collate。对应资料 PR:https://gitcode.com/Ascend/pytorch/merge_requests/36233 > - 内部函数/类,不在文档中记录:DataLoader iterator、worker、signal handling、persistent worker 相关内部对象。 # 【接口变更】 > 不涉及。API 源码无修改,不新增、删除或变更对外接口。 # 【功能验证】 > 已在 2.7.1 对应 torch-npu 环境执行新增用例,结果如下;master 使用 2.12.0 验证环境执行。 ## 验证环境 - 操作系统:Ubuntu / Linux aarch64 - 昇腾硬件:910B2 - CANN 软件版本:8.3.RC1 - 验证环境: - 2.7.1:torch 2.7.1+cpu / torch-npu 2.7.1.post3 - 2.9.0:torch 2.9.0+cpu / torch-npu 2.9.0.post1 - 2.10.0:torch 2.10.0+cpu / torch-npu 2.10.0rc3 - 2.11.0:torch 2.11.0+cpu / torch-npu 2.11.0rc1 - 2.12.0 / master 验证:torch 2.12.0+cpu / torch-npu 2.12.0.rc1 ## 运行命令与结果 bash python test/test_utils_data_api.py Ran 5 tests in 1.691s OK # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!37242 | 2 个月前 | |
fix(npu): register QuantizedPrivateUse1 view/ravel/flatten for test_view_ops. Co-authored-by: Margaret_wangrui<wangrui178@huawei.com> # message auto-generated for no-merge-commit merge: !36563 merge v2.7.1_view_0524 into v2.7.1 fix(npu): register QuantizedPrivateUse1 view/ravel/flatten for test_view_ops. Created-by: Margaret_wangrui Commit-by: Margaret_wangrui Merged-by: ascend-robot Description: # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> https://gitcode.com/Ascend/pytorch/issues/2082 - [ ] 需求 - [x] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 **问题简述:** 将 PyTorch 上游 test/test_view_ops.py 切换到 torch_npu 执行时,test_ravel_npu、test_flatten_npu 在处理 torch._empty_affine_quantized(..., quint8, device=npu) 量化张量时报错: text NotImplementedError: Could not run 'aten::view' with arguments from the 'Quantizednpu' backend 浮点 NPU 张量(PrivateUse1)可正常 view;量化 NPU 张量(QuantizedPrivateUse1)缺少对应 kernel 注册。 --- # 【修改方案】 本 PR 为 **QuantizedPrivateUse1** 补齐 shape / copy 相关 dispatch,并与 op-plugin stride_copy 修复配合,使量化 NPU 张量上的 view / ravel / flatten 语义与上游用例一致。 **组件交互关系:** text test_ravel_npu / test_flatten_npu(量化 quint8 on NPU) │ ▼ TensorShape.cpp(torch_npu) QuantizedPrivateUse1 注册:view / ravel / contiguous / clone / empty* / _copy_from │ ├─► MetaData 不匹配时 clone 物化(NPUStorageDesc 与 view shape 对齐) │ ▼ TensorFactories.cpp(torch_npu) NPUNativeFunctions::clone(quant):int_repr + npu_stride_copy_out │ ▼ AsStridedKernelNpu.cpp(op-plugin,子模块 071a046) 小 nbytes int_repr stride_copy 稳定走 AsStrided **具体实现:** 1. **torch_npu/csrc/aten/common/TensorShape.cpp(+312 行)** - 通过 TORCH_LIBRARY_IMPL(aten, QuantizedPrivateUse1, m) 注册:view、as_strided、ravel、contiguous、clone、empty_like、empty.memory_format、empty_strided、_copy_from。 - 实现 npu_quantized_view_symint:基于 infer_size + computeStride,经 alias_with_sizes_and_strides_npu 构造 QTensorImpl view;stride 不兼容且可展平为 rank-1 时走 clone + view。 - 实现 npu_quantized_ravel:aten::contiguous → view(-1),避免 composite reshape 在 NPU 量化张量上短路。 - 实现 npu_quantized_contiguous:除 is_contiguous() 外检查行主 stride,必要时 clone 物化。 - npu_quantized_view_materialize_if_storage_desc_mismatch:当 MetaDataAreMatch(q)==false 时对 view 结果 clone(Contiguous)。 - NPUNativeFunctions::as_strided 增加量化分支,构造 QTensorImpl view。 2. **torch_npu/csrc/aten/common/TensorFactories.cpp(+202 行)** - 增强 NPUNativeFunctions::clone 量化路径:empty_like + SetDesc + int_repr stride_copy。 - MetaDataAreMatch 异常(如 transpose、view 后 storage desc 不一致)时,CPU int_repr staging + H2D 物化。 - stride_copy 后 int_repr slab 传播与 canonical 缓冲对齐(npu_quantized_clone_write_int_repr_payload)。 3. **test/test_view_ops.py** - 量化 NPU 张量不再强制 flat._base is src(允许 NPUStorageDesc 不匹配时的物化拷贝路径)。 - 修正 is_quantized / is_npu 为属性访问(非可调用方法)。 4. **test/npu/test_quantized_view_flatten_ravel.py(新增,93 行)** - 镜像 test_view_ops 中量化张量的 ravel / flatten 检查。 - **仅在 NPU 设备上**做自洽断言(不跨设备 QTensor.cpu() 对比;QuantizedPrivateUse1 尚未支持 empty_quantized 设备迁移)。 - 按 numel 分组调用 _test_ravel(625 / 0 / 25+nc),避免空 shape 用例误用期望 size。 5. **third_party/op-plugin 子模块** - 46773a59 → 071a046(基于 std 的 AsStrided stride_copy 修复;**不可**切换到旧 view_op 分支 tip,会缺失 DVM 头文件导致编译失败)。 **变更规模:** text test/npu/test_quantized_view_flatten_ravel.py | 93 +++ test/test_view_ops.py | 5 +- third_party/op-plugin | 2 +- torch_npu/csrc/aten/common/TensorFactories.cpp | 202 +++ torch_npu/csrc/aten/common/TensorShape.cpp | 312 +++ 5 files changed, 612 insertions(+), 2 deletions(-) --- # 【资料变更】 不涉及。 --- # 【接口变更】 不涉及跨代码仓或客户面可见的公开 API 变更。 **内部说明(ATen dispatch 层,非 Python 公开接口):** | 算子 | Dispatch Key | 变更类型 | |------|--------------|----------| | view / as_strided / ravel / contiguous / clone | QuantizedPrivateUse1 | 新增 kernel 注册 | | empty_like / empty.memory_format / empty_strided / _copy_from | QuantizedPrivateUse1 | 新增 kernel 注册 | 用户可见行为变化:NPU 上 quint8 等量化张量可正常执行 view、ravel、flatten(此前为 NotImplementedError)。量化张量 .cpu() / empty_quantized 设备迁移**仍未实现**,不在本 PR 范围。 --- # 【功能验证】 **环境要求:** 已编译安装 torch_npu;NPU 设备可用;op-plugin 子模块为 071a046。 **测试步骤:** 1. 重新编译并安装 torch_npu(确保子模块已更新至 071a046)。 2. 运行上游 view 用例(量化 + 浮点): bash python test/test_view_ops.py -v -k test_ravel_npu python test/test_view_ops.py -v -k test_flatten_npu 3. 运行 NPU 量化专项回归: bash python test/npu/test_quantized_view_flatten_ravel.py -v **覆盖场景:** | 场景 | 验证点 | |------|--------| | 连续量化张量 5×5×5×5 | ravel() / flatten(0,-1) 与 view(-1) 一致 | | 空 shape 0×2×3、3×0×2 | numel=0 时 shape 与 view 链正确 | | 转置 + ravel(nc=True) | 非连续路径 contiguous().view(-1) 与 ravel() 一致 | | 多组 flatten 维度 | (0,2)、(1,2)、(-2,-1) 等与 view(-1) 展开顺序一致 | | 浮点 NPU 回归 | 同一用例文件中浮点张量路径不受影响 | **UT 看护:** - [x] 新增 test/npu/test_quantized_view_flatten_ravel.py(test_quantized_ravel_on_npu / test_quantized_flatten_on_npu) - [x] 适配 test/test_view_ops.py(量化 NPU _base 断言放宽、is_quantized/is_npu 属性修正) **自验证:** 请在合入前补充 NPU 环境执行上述命令的通过截图或 CI 流水线链接。    --- # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 **合入依赖提醒:** 需与 op-plugin PR(071a046 / view_op_0524)同步合入或确保子模块版本一致;合入顺序建议 op-plugin 先合入或两仓同批合入。 See merge request: Ascend/pytorch!36563 | 2 个月前 | |
| 1 年前 | ||
| 2 年前 | ||
feat: add ExternalStream class with unsupported-scenario docs Co-authored-by: yuht9<yuhaitao6@huawei.com> # message auto-generated for no-merge-commit merge: !43143 merge v2.7.1 into v2.7.1 feat: add ExternalStream class with unsupported-scenario docs Created-by: yuht9 Commit-by: yuht9 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/2655 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 ExternalStream 是 torch_npu.npu.Stream 的子类,用于包装外部库创建的 aclrtStream 句柄,使 torch_npu 能在该流上 launch 算子,实现多库数据交换。 ### 类定义 python class ExternalStream(Stream): def __new__(cls, stream_ptr, device=None, **kwargs): with torch_npu.npu.device(device): return super().__new__(cls, stream_ptr=stream_ptr, **kwargs) ### 构造参数 | 参数 | 类型 | 必填 | 说明 | | ------------------ | ------------------ | ---- | ---------------------------------------------- | | stream_ptr | int | 是 | 外部 aclrtStream 的整数值 | | device | torch.device / int | 否 | 流所在设备,默认当前设备 | | priority | int | 否 | **必须为 0**(外部流不支持优先级) | | is_sync_launch | int | 否 | **必须为 0**(外部流不支持 sync launch) | # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 DT验证通过 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!43143 | 19 天前 | |
| 2 年前 | ||
| 2 年前 |
简介
test目录为TorchNPU相关的测试用例。
安装依赖
pip3 install -r requirements.txt
补全脚本
该操作需要联网
cd test
bash get_synchronized_files.sh
通过以上操作,会自动补齐testfiles_synchronized.txt和testfolder_synchronized.txt中的文件或文件夹。
跳过失败用例
export DISABLED_TESTS_FILE=./unsupported_test_cases/.pytorch-disabled-tests.json
如果不是在test目录下运行测试用例,需要传入.pytorch-disabled-tests.json的绝对路径。
执行方式
执行单个测试脚本
运行以test开头的文件。以test_autocast.py为例:
方式一:
python test_autocast.py
方式二:
python run_test.py -i test_autocast
说明:部分以test开头的脚本不是直接运行的脚本,比如jit中的测试脚本是通过test_jit.py执行的。
执行具体的用例
通过-k参数传入具体的用例名。以test_autocast.py为例:
方式一:
python test_autocast.py -v -k test_autocast_nn_fp32
方式二:
python run_test.py -v -i test_autocast -- -k test_autocast_nn_fp32
执行全量UT的方式
# 进入到test目录的上一级
cd ../
运行非分布式全量用例:
python ci/access_control_test.py --all
运行分布式全量用例:
python ci/access_control_test.py --distributed
FAQ
-
报错:"dictionary changed size during interation".
如果python 环境是3.8.1版本,报错在unitest/case.py中,可考虑是sys.modules被修改导致的。第三方包可能会有对sys.modules的修改,比如beartype。 此问题为python 3.8.1版本/3.9.0版本的已知bug,可按照 https://github.com/python/cpython/issues/73806 中修改方式修改,将
for v in sys.modules.values()改为for v in list(sys.modules.values())可用于复现问题的用例:
python test_jit.py -v -k test_annotated_empty_dict -
test_public_bindings.py 用例的功能
该用例是为了校验接口的公开规范性,如果该用例报错,请确认报错的接口是否要公开,并按照报错的提示进行修改。