Closed
[Requirement|需求建议]: 迁移 TopK 融合规则 #4203
jerry_gdAdd on  12 days agoClosed at  10 days ago
jerry_gdCollaborators
12 days ago Create

一、背景信息

TopKFusionPass 融合规则需迁移至 ops-math 仓库统一维护。TopK/TopKV2 在 GE 图中的 AICore 路径依赖融合规则改写:不融合时退回 AICPU 实现,Host 侧调度与数据搬运开销大。旧规则基于 fe 老框架(REG_PASS + 原地 SetType 改写),接口老旧且维护成本高,需按新融合 Pass 框架(PatternFusionPass + ES 接口)重构并迁移。

二、价值/作用

  • 将 TopK/TopKV2 按平台家族改写为 AICore 优化路径:regbase(Ascend950/350、MC62/630)上统一收敛到新体系 TopKV2(k 保留输入、支持 11 种 dtype、indices_dtype 属性);legacy tbe 平台(Ascend910B/910_93/310B/310P/031/610Lite)上常量 k 转换为 TopKD(k 转属性 + assist_seq 权重输入),动态 k 保持 TopKV2
  • 非末轴场景自动插入转置链(regbase 用双输入 Transpose,legacy 用属性版 TransposeD),使 TopKV2/TopKD 仅在末轴执行,命中 kernel 最优路径
  • 迁移后由 kCompatibleInherited 同名接管旧规则槽位,9.x 运行时自适应生效;老运行时空跑回退,版本兼容三保险

三、设计方案

迁移一条 GE 自定义融合规则(多平台分支,覆盖 soc_arch_variables 构建矩阵内全部芯片家族):

  1. TopKFusionPass:识别 TopK/TopKV2 节点(双 pattern),按 NpuArch 家族分流——regbase(DAV_3510/DAV_5102)生成 TopKV2(k 保留输入、11 dtype 白名单、sorted=false 放行、int64 k 保留、indices_dtype 跟随源输出);legacy(DAV_2201/3002/2002/3004/3102)常量 k 生成 TopKD(k 转属性 + 2048 fp16 assist_seq 常量,310B/031 动态 shape 用 4096+4096 tik 口味),动态 k 生成旧 IR TopKV2;dim 归一化后非末轴插入输入/输出侧转置链并强制 dim=-1
  2. 平台与合法性门控按 opp 算子信息库实况逐 soc 对齐 旧版本(dtype 白名单/sorted/k dtype/031 无 TopKV2 条目静默/防环幂等守卫),未知 rank dim 豁免、源输出 desc 校验、输出侧转置按家族区分条件插入(regbase 无条件/legacy 按下游消费者)均与旧规则逐项一致
  3. 替换图全部 desc 手动设置(不跑全图 InferShape):实测证实 TopKD 路径会被全图推导破坏 tbe Pre-compile,TopKV2 路径虽可推导但统一走手动更稳;节点输入 desc 从 producer 回填 + desc 未设置判据回退,规避 ATC 场景 k desc 污染("The data type DT_FLOAT of the input k is not supported")
  4. 版本与符号兼容:kCompatibleInherited 阶段注册(编译期宏 + 运行时版本 + Run 入口空跑三保险);assist 权重节点使用 legacy Constant 类型(tbe Pre-compile 权重专用通道,普通 Const 会导致预编译崩溃);Transpose 节点携带 _op_infer_depends 属性对齐旧 SetOpInferDepends({"perm"})
likedislike
Jjerry_gdCollaborators
12 days ago Added label: requirement
Jjerry_gdCollaborators
12 days ago Assign jerry_gd as responsible person
Jjerry_gdCollaborators
12 days ago Modify description of issue
Jjerry_gdCollaborators
12 days ago Modify description of issue
CANN-robotCANN-robotCollaborators
10 days ago Close issue
CANN-robotCANN-robotCollaborators
10 days ago Added label: resolved