已关闭
[Requirement|需求建议]: QuantBatchMatmulV4 + Transpose 图融合适配新版 GE 融合框架 #3893
马琦钧创建于  7月7日关闭于  7月20日
马琦钧
马琦钧成员
7月7日 创建

Backgroud(背景信息)

QuantBatchMatmulV4(qbmmv4)+ Transpose 的图融合规则在旧版 canndev 框架中已有实现。现需迁移到新版 GE 融合框架(FusionBasePass + REG_FUSION_PASS)。

融合规则:绕过 QuantBatchMatmulV4 的 x2 和 x2_scale 输入前的 Transpose/Reshape 节点,通过翻转 transpose_x2 属性实现融合。支持三种拓扑:

  1. x2 Transpose + x2_scale Transpose
  2. x2 Transpose + x2_scale Reshape(simple reshape,输入 2D 且含维度 1)
  3. x2 Transpose + x2_scale Reshape + Pack + Gather + Shape(动态 shape 场景)

Origin(信息来源)

算子图融合框架迁移

Benefit / Necessity (价值/作用)

  • 性能加速:消除 qbmmv4 输入链路上的冗余 Transpose/Reshape/Pack/Gather/Shape 节点,减少数据搬运和计算开销,加速量化推理网络(特别是 A8W4、A8W8 等低比特量化场景)
  • 对齐新版 GE 融合框架,支持 fusion_result.json 上报(9.1.0 GraphFuseInspectorUtils::ReportFuse
  • 通过编译宏 + 运行时版本隔离,兼容 9.0.0 / 9.1.0
  • 保持与 canndev 原始融合规则完全一致(含 X2ScaleOk 对 null 的处理、IsSimpleReshape 对动态 shape 的处理)

Design(设计方案)

融合场景

支持以下 3 种融合场景(x2 前必须有 Transpose):

  1. x2 Transpose + x2_scale Transpose:x2 和 x2_scale 输入前均有 Transpose 节点,翻转 transpose_x2 属性
  2. x2 Transpose + x2_scale Reshape(静态 shape):x2 前有 Transpose,x2_scale 前有 Reshape(simple reshape,输入 2D 且含维度 1),翻转 transpose_x2 属性
  3. x2 Transpose + x2_scale Reshape + Pack + Gather + Shape(动态 shape):x2 前有 Transpose,x2_scale 前有 Reshape + Pack + Gather + Shape 链(动态 shape 场景),翻转 transpose_x2 属性,同时删除整个链

实现方案

  • 继承 FusionBasePass,重写 Run() 方法,使用 GraphPtr API 直接改图
  • 拆分 RelinkNode(重连边)和 RemoveFusedNode(删节点),ReportFuse 在两者之间调用
  • ReportFuse 使用 weak 符号声明,IsTargetVersion 为 protected virtual 成员函数
  • REG_FUSION_PASS 注册,编译宏 GE_COMPILER_VERSION_NUM >= 90100000 保护
  • UT 15 个(8 正向 + 5 负向 + 1 x2-only 正向 + 1 to_v3),平台设置照搬 canndev 原始写法
likedislike
马琦钧马琦钧成员
7月7日 添加了label:requirement
马琦钧马琦钧成员
7月7日 修改了issue 的描述
马琦钧马琦钧成员
7月7日 修改了issue 的描述
CANN-robotCANN-robot成员
7月20日 关闭了 issue
CANN-robotCANN-robot成员
7月20日 添加了label:resolved