已合并
inductor: port DVM support to v2.8 #31058
inductor: port DVM support to v2.8 #31058
已合并
SorryNaCN创建于 2月26日
SorryNaCN
SorryNaCN成员
2月26日

What type of PR is this?

/kind feature

What does this PR do / why do we need it

本 PR 将 v2.7.1 分支中的 DVM 相关能力迁移到 v2.8.0,为 inductor 增加 DVM 融合支持,并补齐绑定、构建与测试。

主要改动:

  • 引入 DVM 第三方依赖并接入构建
  • 新增/迁移 DVM inductor 融合流水线代码
  • 新增 DVM C++ pybind 接口并在 _C 初始化阶段注册
  • 补充 DVM 相关测试与 public bindings 清单
  • 调整 inductor 后端选择逻辑,支持 npu_backend=dvm

DVM 融合模式说明(按当前代码更新)

当前 DVM 支持两种融合路径:

  1. mlir_fusion:复用 Inductor-MLIR 主流程,只替换融合范围与 codegen 引擎为 DVM
  2. graph_fusion:独立图分区融合路径,通过 CapabilityBasedPartitioner 做子图融合并落到 DVM

1) mlir_fusion

设计:

  • 复用 Inductor-MLIR 编译流程
  • 在融合子图阶段按 DVM 支持规则筛选
  • 使用 DVM codegen 生成并执行融合 kernel

特点:

  • 与现有 inductor/mlir 链路协同,接入成本低
  • 融合行为与主编译流程一致性更好

2) graph_fusion

设计:

  • 通过 DvmGraphFusionPatch 挂接 post-grad pass
  • 使用 CapabilityBasedPartitioner 划分可融合子图
  • 生成 dvm::fused_graph_* 自定义算子并在代码生成阶段替换为 DVM kernel 调用

特点:

  • 独立融合路径,可扩展性强
  • pattern 控制更灵活

dvm_graph_fused_* 命名来自 graph fusion 路径(dvm_graph_fusion(...) pass 生成融合子图名)。


使用方式(更新后的正确接口)

A. 启用 mlir_fusion 路径

推荐三种方式(二选一即可):

  1. config 方式
import torch
import torch_npu
import torch_npu._inductor

torch._inductor.config.npu_backend = "dvm"
compiled = torch.compile(model, backend="inductor", dynamic=True)
out = compiled(*inputs)
  1. options 方式
compiled = torch.compile(
    model, backend="inductor", dynamic=True, options={"npu_backend": "dvm"}
)
  1. 环境变量方式(需在 torch.compile 前设置)
import os
os.environ["TORCHINDUCTOR_NPU_BACKEND"] = "dvm"

B. 启用 graph_fusion 路径

import torch
import torch_npu
from torch_npu._inductor.dvm.graph_fusion import DvmGraphFusionPatch

with DvmGraphFusionPatch():
    compiled = torch.compile(model, backend="inductor", dynamic=False)
    out = compiled(*inputs)

两种模式对比

模式 依赖 Inductor-MLIR 主流程 Pattern 控制 典型命名 备注
mlir_fusion dvm_fused_* 推荐默认接入路径
graph_fusion 否(独立图分区) dvm_graph_fused_* 更适合定制/实验性融合

注意:矩阵相关算子(mm/bmm/addmm)仅在 graph_fusion 融合模式支持。


Which issue(s) this PR fixes

Fixes #

Special notes for your reviewers

  • 本 PR 为跨版本迁移,核心逻辑与 v2.7.1 DVM 实现保持一致,冲突已按 v2.8.0 基线语义对齐。
  • 建议重点 review:
    • _C 初始化与 DVM pybind 注册
    • torch_npu._inductor 后端分支与 npu_backend=dvm 使能逻辑
    • mlir_fusion / graph_fusion 两条路径的行为一致性
likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 SorryNaCN 的贡献)
SorryNaCNSorryNaCN成员
2月26日 创建了 pull request,commit e6fc7a19
ascend-robot
ascend-robot成员
2月26日 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here
You can get sig-info at here


PR Approval Progress

Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
repo-Ascend/pytorch guoqi1024, li_jing_hw (2/2) guoqi1024, li_jing_hw (2/1)
test guoqi1024, li_jing_hw, zichun_ye (3/2) li_jing_hw, zichun_ye, guoqi1024 (3/1)
torch_npu/_inductor guoqi1024, li_jing_hw, zichun_ye (3/2) guoqi1024, li_jing_hw, zichun_ye (3/1)
torch_npu/csrc/inductor zichun_ye, guoqi1024, li_jing_hw (3/2) li_jing_hw, zichun_ye, guoqi1024 (3/1)
torch_npu/utils guoqi1024, li_jing_hw, zichun_ye (3/2) zichun_ye, guoqi1024, li_jing_hw (3/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)
likedislike
ascend-robotascend-robot成员
2月26日 添加了label:ascend-cla/yes
SorryNaCN
SorryNaCN成员
2月26日 评论:

compile

likedislike
此处折叠了47条消息 查看更多
zichun_ye
zichun_ye成员
3月4日 评论:

/lgtm

likedislike
guoqi成员
3月5日 评论:

/approve

likedislike
ascend-robotascend-robot成员
3月5日 添加了label:lgtm
ascend-robot
ascend-robot成员
3月5日 评论:

Review Guide

This pull-request passes review.
Committers who wrote a comment of /approve are: li_jing_hw, zichun_ye, guoqi1024.
Reviewers who wrote a comment of /lgtm are: guoqi1024, li_jing_hw, zichun_ye.

likedislike
ascend-robotascend-robot成员
3月5日 合入了pull request