文件最后提交记录最后更新时间
inductor/dvm: adapt to latest dvm API and executor pool Co-authored-by: huangchengnuo<huangchengnuo1@huawei.com> # message auto-generated for no-merge-commit merge: !30584 merge optimize_dvm into v2.7.1 inductor/dvm: adapt to latest dvm API and executor pool Created-by: SorryNaCN Commit-by: huangchengnuo Merged-by: ascend-robot Description: # 【合入来源】 > (如有)请关联需求文档/issue链接 - [ ] 需求 - [ ] 问题单 - [ ] issue/工单 - [x] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 1. 对齐 DVM 子模块与分支管理: - 更新 third_party/dvm/dvm 子模块提交到 b4bc31aaeb340a15ab8facc8b077457a2f4112de。 - 在 .gitmodules 中为 third_party/dvm/dvm 增加 branch = r2.9,统一后续子模块跟踪分支。 2. Python 侧 DVM 适配最新 API: - torch_npu/_inductor/dvm/__init__.py:移除 KernelType/KernelFlag 依赖,改为 Kernel.K_* / Kernel.F_* 常量。 - torch_npu/_inductor/dvm/op_emitter.pyview_load 去掉 offset 参数;新增 aten._copy_to.default 映射到 cast 逻辑。 - torch_npu/_inductor/dvm/graph_build.py:同步 view_load(shape, stride, dtype) 新签名。 - torch_npu/_inductor/dvm/decomp.py:调整 decomp exclude 列表(移除部分 BN/LN 相关条目)。 - torch_npu/_inductor/dvm/mlir_fusion.py:移除对 can_fuse_horizontal/can_fuse_vertical 的 patch,适配新调度行为。 3. C++ pybind 侧适配最新执行模型: - torch_npu/csrc/inductor/dvm/pybind_api.h/.cpp: - 构造参数从 KernelType 切换为 int kernel_type(内部转换)。 - ViewLoad 移除 offset 参数并同步 kernel_.Load 调用。 - 引入 Run/Call 分离接口,补充 ParseTensorCallInputs/ParseDynCallInputs。 - DynGraphSplitKernelPy 引入 executor pool(AcquireExecutor/CloneExecutor + 互斥保护),替换旧计数等待方案,提升并发调用稳定性。 - 增强动态输入类型校验与错误信息。 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及。 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及跨代码仓或客户面可见接口变更。 本次主要为 torch_npu._C.dvm 内部绑定接口适配与执行逻辑重构(上层调用已同步)。 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 1. 子模块配置验证: - 检查 .gitmodulesthird_party/dvm/dvm 存在 branch = r2.9。 - 检查子模块提交已更新到目标 commit。 2. DVM API 适配验证: - 验证 Kernel.K_* / Kernel.F_* 路径可正常创建 Kernel/DynKernel/GraphSplitKernel。 - 验证 view_load 新签名链路(op_emitter -> graph_build -> pybind)参数一致。 3. 图编译与执行验证: - 验证 aten._copy_to 走 cast 路径可正常生成 DVM 表达式。 - 验证静态/动态 graph split 路径执行可用,动态场景下 executor pool 可正常获取/归还 executor。 4. 本次未新增 UT 用例;回归依赖现有 inductor/dvm 测试链路与CI。 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!305843 个月前
[DVM] Update decomposition excludes and generate list Co-authored-by: huangchengnuo<huangchengnuo1@huawei.com> # message auto-generated for no-merge-commit merge: !32068 merge fix_inductor_dvm_bug_v2.7.1 into v2.7.1 [DVM] Update decomposition excludes and generate list Created-by: SorryNaCN Commit-by: huangchengnuo Merged-by: ascend-robot Description: # 【合入来源】 - [ ] 需求 - [ ] 问题单 - [ ] issue/工单 - [x] 重构优化 - [ ] 资料更新 # 【修改方案】 1. 更新 torch_npu/_inductor/dvm/decomp.py 中的 decomps_to_exclude_npu,将 DVM 与 NPU 侧需要排除 decomposition 的算子列表做并集整理,并按字面顺序排序,便于后续维护和差异比对。 2. 新增多类需要保留原始算子语义的排除项,包括 embeddingupsample_*nll_loss2d_*max_pool2d_with_indices*reflection_pad2d*grid_sampler_2d*triuslice.Tensor 等,避免这些算子在 DVM 路径上被提前 decomposition 后影响后续处理。 3. 更新 torch_npu/_inductor/dvm/mlir_fusion.py 中的 anir_config.GENERATE_LIST,增加 aten.unsqueeze,补充 DVM 融合生成阶段对该算子的支持范围。 # 【资料变更】 不涉及。 # 【接口变更】 不涉及。本次修改仅涉及 torch_npu/_inductor/dvm 内部算子处理配置和生成列表调整,不涉及跨仓接口和客户可见接口变更。 # 【功能验证】 1. 本地对修改文件执行语法校验: python -m py_compile torch_npu/_inductor/dvm/decomp.py torch_npu/_inductor/dvm/mlir_fusion.py 2. 已提交 MR 并触发流水线校验。 3. 当前未新增独立 UT 用例。本次修改主要为 DVM 内部配置项与算子列表调整,后续以流水线结果和相关场景回归为主。 # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!320682 个月前
Add DVM fusion support for inductor Co-authored-by: huangchengnuo<huangchengnuo1@huawei.com> # message auto-generated for no-merge-commit merge: !28636 merge update_graph_fusion into v2.7.1 Add DVM fusion support for inductor Created-by: SorryNaCN Commit-by: huangchengnuo 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 /kind feature **What does this PR do / why do we need it**: 这次变更为 inductor 引入 DVM fusion 支持,新增 DVM 图融合/MLIR 融合流水线及其绑定与测试,并把 DVM 作为第三方依赖接入构建。 主要改动 - 引入 DVM 子模块并在构建中编译/静态链接到插件 - 新增 DVM inductor 流水线与图融合实现 - 增加 DVM pybind 接口与初始化注册 - 更新 ACL 头文件与 msprof 工具链头 - 新增融合测试与公开绑定清单 ## DVM 融合模式设计说明 DVM 当前支持 **两种融合模式**:mlir_fusiongraph_fusion,分别对应 **复用 Inductor-MLIR 融合结果** 与 **自定义图融合路径** 两种策略。 --- ### 1. mlir_fusion 融合模式 **设计思路** * 基于 **Inductor-MLIR** 已生成的融合算子 FX 图。 * 在 Inductor 的 MLIR 编译路径中获取 **已融合的 FX 子图**。 * 使用 **DVM codegen** 将该融合子图转化为 DVM 融合算子并执行。 **特点** * 复用 Inductor 既有的 **lowering 与 MLIR 融合能力**。 * 不引入额外的 pattern 识别逻辑,强调 **与 Inductor 编译链路协同**。 * 适合快速承接 Inductor-MLIR 的融合收益。 --- ### 2. graph_fusion 融合模式 **设计思路** * 不依赖 Inductor 的 lowering / MLIR 流程。 * 通过 **CapabilityBasedPartitioner** 和dvm自身能力识别可融合 pattern。 * 构建融合子图后,使用 **DVM codegen** 生成并执行融合算子。 **特点** * 提供 **独立的融合路径**,不受 Inductor 融合策略限制。 * 支持更灵活、可控的 **pattern 设计与扩展**。 * 适合复杂融合、定制优化或实验性融合策略。 --- ## 使用方式 ### 启用方式 * **mlir_fusion** ```python import os os.environ["TORCHINDUCTOR_MLIR_BACKEND"] = '1' import torch_npu._inductor.dvm.mlir_fusion ``` * **graph_fusion** ```python from torch_npu._inductor.dvm.graph_fusion import DvmGraphFusionPatch DvmGraphFusionPatch.enable() ``` > 需在 torch.compile **之前导入**。 --- ### 示例 ```python import torch import torch_npu from torch_npu._inductor.dvm import mlir_fusion model = ... compiled = torch.compile(model, backend="inductor", dynamic=True) out = compiled(*inputs) ``` --- ### 简要对比 | 模式 | 依赖 Inductor MLIR | Pattern 控制 | 适用场景 | | ----------- | ---------------- | ---------- | ---------------- | | mlir_fusion | 是 | 低 | 复用 Inductor 融合结果 | | graph_fusion | 否 | 高 | 定制/复杂/实验性融合 | * **mlir_fusion算子** ```python # 声明算子 @​dvm.kernel(ktype='vector', dyn_shape=True) def dvm_fused_add_mul_sum_0_build(k): arg0_1 = k.load([-1, 1], torch.bfloat16) arg1_1 = k.intref() arg2_1 = k.intref() arg3_1 = k.intref() arg4_1 = k.view_load([-1, -1, -1], [-1, -1, 1], torch.bfloat16) arg5_1 = k.load([1, -1], torch.bfloat16) expand = k.broadcast(arg0_1, [arg1_1, arg2_1, arg3_1]) mul = k.mul(expand, arg4_1) expand_1 = k.broadcast(arg5_1, [arg1_1, arg2_1, arg3_1]) add = k.add(mul, expand_1) _npu_dtype_cast = k.cast(add, torch.float32) sum_1 = k.sum(_npu_dtype_cast, [0, 2], True) k.store(sum_1, torch.float32) k.set_kernel_info( 'dvm_fused_add_mul_sum', # kernel_name 'dvm_fused_add_mul_sum_0', # kernel_fullname [True, True, True, True, True, True, True], # contiguity_flags ) dvm_fused_add_mul_sum_1 = dvm_fused_add_mul_sum_1_build # 使用 buf2 = empty_strided((1, s0, 1), (s0, 1, s0), device='npu', dtype=torch.float32) stream0 = get_raw_stream(0) dvm_fused_add_mul_sum_0.run(arg4_1, s1, s0, s2, buf1, arg5_1, buf2, stream=stream0) ``` * **graph_fusion算子** ```python # 声明算子 @​dvm.kernel(ktype='split', dyn_shape=True) def dvm_graph_fused_0(k): arg4_1 = k.load([-1, 1], torch.bfloat16) permute = k.view_load([-1, -1, -1], [-1, -1, 1], torch.bfloat16) mul_3 = k.mul(arg4_1, permute) arg5_1 = k.load([1, -1], torch.bfloat16) add_8 = k.add(mul_3, arg5_1) convert_element_type_default = k.cast(add_8, torch.float32) sum_1 = k.sum(convert_element_type_default, [0, 2], True) convert_element_type_default_1 = k.cast(sum_1, torch.bfloat16) k.store(convert_element_type_default_1, torch.bfloat16) # 使用 buf0 = dvm_graph_fused_0(arg4_1, reinterpret_tensor(arg3_1, (s1, s0, s2), (s2, s1*s2, 1), 0), arg5_1) ``` **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!286364 个月前
dvm: refactor ws alloc paths and reorder pybind_api functions Co-authored-by: huangchengnuo<huangchengnuo1@huawei.com> # message auto-generated for no-merge-commit merge: !31627 merge fix_inductor_dvm_bug into v2.7.1 dvm: refactor ws alloc paths and reorder pybind_api functions Created-by: SorryNaCN Commit-by: huangchengnuo Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [ ] issue/工单 - [x] 重构优化 - [ ] 资料更新 # 【修改方案】 1. 在 torch_npu/csrc/inductor/dvm/pybind_api.cpp 增加流捕获状态判断 IsCurrentStreamCapturing(),并引入两套 workspace 分配/launch 路径: LaunchV2 + AllocWorkspaceV2(常规路径)和 LaunchV1 + AllocWorkspaceV1(流捕获路径)。 2. 在 TorchKernelPy::CallGraphSplitKernelPy::Call 增加 if (!IsCurrentStreamCapturing()) ... else ... 分支,确保流捕获场景不走 allocate_workspace 路径。 3. 将 TorchKernelPy::Launch 拆分为 LaunchV1/LaunchV2;将 GraphSplitBase::Launch 拆分为 LaunchV1/LaunchV2,并提供 ExternalWsAllocator 支持外部 workspace 指针。 4. 在 GraphSplitKernelPy::Setup 增加 fake allocator 路径,用于提前探测并记录 ws_size_。 5. 在动态 shape 路径增加保护: DynKernelPy::CallDynGraphSplitKernelPy::Call 中新增 TORCH_CHECK(!IsCurrentStreamCapturing(), ...),明确动态 shape 运行时 CodeGen/Infer 不支持流捕获。 6. 头文件 torch_npu/csrc/inductor/dvm/pybind_api.h 同步接口声明变更(LaunchV1/LaunchV2SetWorkspaceSizeGraphSplitBase::Alloc 等)。 # 【资料变更】 不涉及。 # 【接口变更】 不涉及(无跨仓接口或客户可见接口变更)。 # 【功能验证】 1. 代码变更范围仅限: torch_npu/csrc/inductor/dvm/pybind_api.cpptorch_npu/csrc/inductor/dvm/pybind_api.h。 2. 已完成代码级差异核对(与目标提交中流捕获判断相关逻辑对齐)。 3. 本地未完成完整编译/UT(当前环境 build 目录缺少可用 Makefile,cmake --build build --target torch_npu 无法执行),后续以 CI 结果为准。 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!316272 个月前
inductor/dvm: adapt to latest dvm API and executor pool Co-authored-by: huangchengnuo<huangchengnuo1@huawei.com> # message auto-generated for no-merge-commit merge: !30584 merge optimize_dvm into v2.7.1 inductor/dvm: adapt to latest dvm API and executor pool Created-by: SorryNaCN Commit-by: huangchengnuo Merged-by: ascend-robot Description: # 【合入来源】 > (如有)请关联需求文档/issue链接 - [ ] 需求 - [ ] 问题单 - [ ] issue/工单 - [x] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 1. 对齐 DVM 子模块与分支管理: - 更新 third_party/dvm/dvm 子模块提交到 b4bc31aaeb340a15ab8facc8b077457a2f4112de。 - 在 .gitmodules 中为 third_party/dvm/dvm 增加 branch = r2.9,统一后续子模块跟踪分支。 2. Python 侧 DVM 适配最新 API: - torch_npu/_inductor/dvm/__init__.py:移除 KernelType/KernelFlag 依赖,改为 Kernel.K_* / Kernel.F_* 常量。 - torch_npu/_inductor/dvm/op_emitter.pyview_load 去掉 offset 参数;新增 aten._copy_to.default 映射到 cast 逻辑。 - torch_npu/_inductor/dvm/graph_build.py:同步 view_load(shape, stride, dtype) 新签名。 - torch_npu/_inductor/dvm/decomp.py:调整 decomp exclude 列表(移除部分 BN/LN 相关条目)。 - torch_npu/_inductor/dvm/mlir_fusion.py:移除对 can_fuse_horizontal/can_fuse_vertical 的 patch,适配新调度行为。 3. C++ pybind 侧适配最新执行模型: - torch_npu/csrc/inductor/dvm/pybind_api.h/.cpp: - 构造参数从 KernelType 切换为 int kernel_type(内部转换)。 - ViewLoad 移除 offset 参数并同步 kernel_.Load 调用。 - 引入 Run/Call 分离接口,补充 ParseTensorCallInputs/ParseDynCallInputs。 - DynGraphSplitKernelPy 引入 executor pool(AcquireExecutor/CloneExecutor + 互斥保护),替换旧计数等待方案,提升并发调用稳定性。 - 增强动态输入类型校验与错误信息。 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及。 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及跨代码仓或客户面可见接口变更。 本次主要为 torch_npu._C.dvm 内部绑定接口适配与执行逻辑重构(上层调用已同步)。 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 1. 子模块配置验证: - 检查 .gitmodulesthird_party/dvm/dvm 存在 branch = r2.9。 - 检查子模块提交已更新到目标 commit。 2. DVM API 适配验证: - 验证 Kernel.K_* / Kernel.F_* 路径可正常创建 Kernel/DynKernel/GraphSplitKernel。 - 验证 view_load 新签名链路(op_emitter -> graph_build -> pybind)参数一致。 3. 图编译与执行验证: - 验证 aten._copy_to 走 cast 路径可正常生成 DVM 表达式。 - 验证静态/动态 graph split 路径执行可用,动态场景下 executor pool 可正常获取/归还 executor。 4. 本次未新增 UT 用例;回归依赖现有 inductor/dvm 测试链路与CI。 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!305843 个月前
refactor: dvm tighten dynamic scalar path and Python bindings Co-authored-by: huangchengnuo<huangchengnuo1@huawei.com> # message auto-generated for no-merge-commit merge: !29840 merge optimize_dvm into v2.7.1 refactor: dvm tighten dynamic scalar path and Python bindings Created-by: SorryNaCN Commit-by: huangchengnuo Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > (如有)请关联需求文档/issue链接 - [ ] 需求 - [ ] 问题单 - [ ] issue/工单 - [x] 重构优化 - [ ] 资料更新 # 【修改方案】 1. 更新 DVM Python 包装层:导出 DataType 常量、优化 kernel 构建与 debug 同步路径,统一 bf16 promote 逻辑并设置 deterministic。(torch_npu/_inductor/dvm/__init__.py) 2. 重构 DVM pybind:引入 dvm_py.hKernelPy 更名为 TorchKernelPy,动态 kernel 统一标量/shape 处理并增强 输入类型校验。(torch_npu/csrc/inductor/dvm/pybind_api.{h,cpp}) 3. 适配 DVM 相关分解与代码生成:tanh 分解加 clamp 及常量,op_emitter/graph_build/mlir_fusion 适配标量路 径。(torch_npu/_inductor/dvm/*.py) 4. 更新 dvm 子模块并补测试:新增动态标量 kernel 测试,调整 MLIR backend 环境变量。(`test/_inductor/ test_dvm_kernel.pytest/_inductor/test_dvm_mlir_fusion.pythird_party/dvm/dvm`) # 【资料变更】 不涉及 # 【接口变更】 不涉及(仅 torch_npu 内部 DVM 接口调整) # 【功能验证】 - 新增UT:test/_inductor/test_dvm_kernel.py - 未本地执行,待CI验证(如需可补自验证截图) # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!298403 个月前
[DVM] Update decomposition excludes and generate list Co-authored-by: huangchengnuo<huangchengnuo1@huawei.com> # message auto-generated for no-merge-commit merge: !32068 merge fix_inductor_dvm_bug_v2.7.1 into v2.7.1 [DVM] Update decomposition excludes and generate list Created-by: SorryNaCN Commit-by: huangchengnuo Merged-by: ascend-robot Description: # 【合入来源】 - [ ] 需求 - [ ] 问题单 - [ ] issue/工单 - [x] 重构优化 - [ ] 资料更新 # 【修改方案】 1. 更新 torch_npu/_inductor/dvm/decomp.py 中的 decomps_to_exclude_npu,将 DVM 与 NPU 侧需要排除 decomposition 的算子列表做并集整理,并按字面顺序排序,便于后续维护和差异比对。 2. 新增多类需要保留原始算子语义的排除项,包括 embeddingupsample_*nll_loss2d_*max_pool2d_with_indices*reflection_pad2d*grid_sampler_2d*triuslice.Tensor 等,避免这些算子在 DVM 路径上被提前 decomposition 后影响后续处理。 3. 更新 torch_npu/_inductor/dvm/mlir_fusion.py 中的 anir_config.GENERATE_LIST,增加 aten.unsqueeze,补充 DVM 融合生成阶段对该算子的支持范围。 # 【资料变更】 不涉及。 # 【接口变更】 不涉及。本次修改仅涉及 torch_npu/_inductor/dvm 内部算子处理配置和生成列表调整,不涉及跨仓接口和客户可见接口变更。 # 【功能验证】 1. 本地对修改文件执行语法校验: python -m py_compile torch_npu/_inductor/dvm/decomp.py torch_npu/_inductor/dvm/mlir_fusion.py 2. 已提交 MR 并触发流水线校验。 3. 当前未新增独立 UT 用例。本次修改主要为 DVM 内部配置项与算子列表调整,后续以流水线结果和相关场景回归为主。 # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!320682 个月前
inductor/dvm: adapt to latest dvm API and executor pool Co-authored-by: huangchengnuo<huangchengnuo1@huawei.com> # message auto-generated for no-merge-commit merge: !30584 merge optimize_dvm into v2.7.1 inductor/dvm: adapt to latest dvm API and executor pool Created-by: SorryNaCN Commit-by: huangchengnuo Merged-by: ascend-robot Description: # 【合入来源】 > (如有)请关联需求文档/issue链接 - [ ] 需求 - [ ] 问题单 - [ ] issue/工单 - [x] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 1. 对齐 DVM 子模块与分支管理: - 更新 third_party/dvm/dvm 子模块提交到 b4bc31aaeb340a15ab8facc8b077457a2f4112de。 - 在 .gitmodules 中为 third_party/dvm/dvm 增加 branch = r2.9,统一后续子模块跟踪分支。 2. Python 侧 DVM 适配最新 API: - torch_npu/_inductor/dvm/__init__.py:移除 KernelType/KernelFlag 依赖,改为 Kernel.K_* / Kernel.F_* 常量。 - torch_npu/_inductor/dvm/op_emitter.pyview_load 去掉 offset 参数;新增 aten._copy_to.default 映射到 cast 逻辑。 - torch_npu/_inductor/dvm/graph_build.py:同步 view_load(shape, stride, dtype) 新签名。 - torch_npu/_inductor/dvm/decomp.py:调整 decomp exclude 列表(移除部分 BN/LN 相关条目)。 - torch_npu/_inductor/dvm/mlir_fusion.py:移除对 can_fuse_horizontal/can_fuse_vertical 的 patch,适配新调度行为。 3. C++ pybind 侧适配最新执行模型: - torch_npu/csrc/inductor/dvm/pybind_api.h/.cpp: - 构造参数从 KernelType 切换为 int kernel_type(内部转换)。 - ViewLoad 移除 offset 参数并同步 kernel_.Load 调用。 - 引入 Run/Call 分离接口,补充 ParseTensorCallInputs/ParseDynCallInputs。 - DynGraphSplitKernelPy 引入 executor pool(AcquireExecutor/CloneExecutor + 互斥保护),替换旧计数等待方案,提升并发调用稳定性。 - 增强动态输入类型校验与错误信息。 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及。 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及跨代码仓或客户面可见接口变更。 本次主要为 torch_npu._C.dvm 内部绑定接口适配与执行逻辑重构(上层调用已同步)。 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 1. 子模块配置验证: - 检查 .gitmodulesthird_party/dvm/dvm 存在 branch = r2.9。 - 检查子模块提交已更新到目标 commit。 2. DVM API 适配验证: - 验证 Kernel.K_* / Kernel.F_* 路径可正常创建 Kernel/DynKernel/GraphSplitKernel。 - 验证 view_load 新签名链路(op_emitter -> graph_build -> pybind)参数一致。 3. 图编译与执行验证: - 验证 aten._copy_to 走 cast 路径可正常生成 DVM 表达式。 - 验证静态/动态 graph split 路径执行可用,动态场景下 executor pool 可正常获取/归还 executor。 4. 本次未新增 UT 用例;回归依赖现有 inductor/dvm 测试链路与CI。 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!305843 个月前