已关闭
[Requirement|需求建议]: QuantBatchMatmulV3 通过 APILEVEL tiling key 区分 high/basic/blaze API 入口 #3649
Hu1L1创建于  6月29日关闭于  7月1日
Hu1L1
Hu1L1成员
6月29日 创建

Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.

Backgroud(背景信息)

QuantBatchMatmulV3 当前部分场景需要区分 high api、basic api、blaze api 的 kernel 入口选择。原方案曾考虑新增 kernel type,但 kernel type 本身承载的是计算入口类型,继续扩展会和高阶 API/低阶 API 能力区分耦合,且容易造成 host 侧 tiling key 和 kernel cpp 中实际编译分支不一致。

因此需要在 tiling key 中新增 API level 字段,用于表达同一 kernel type 下的 API 能力层级,覆盖 3510 上 MX、perblock、纯 cube ND、Weight NZ 等场景。

Origin(信息来源)

Benefit / Necessity (价值/作用)

  1. 避免通过新增 kernel type 区分 API 层级,降低 kernel type 语义膨胀。
  2. 保证 host 侧生成的 tiling key 与 kernel 侧 ASCENDC_TPL_ARGS_SEL 和 cpp 分支一一对齐,减少部分 .o 编译失败风险。
  3. 支持各场景上 Weight NZ、MX、perblock、纯 cube ND 场景按 high/basic/blaze 正确分流。
  4. 保持 kernel 入口复用现有实现,例如 blaze 下仍使用 QUANT_BMMV3_CUBE_TENSOR_API_IMPL_CLASS

Design(设计方案)

  1. 在 tiling key 的 KERNELTYPE 字段后新增 2 bit APILEVEL 字段:

    • HIGH_LEVEL
    • BASIC_LEVEL
    • BLAZE_LEVEL
  2. host 侧在各 tiling class 内部实现/重写 GetApiLevel

    • 默认 high api
    • MX basic tiling 根据 tensor api 能力返回 basic/blaze
    • perblock 返回 basic
    • cube basic tiling 根据、Weight NZ、纯 cube ND、tensor api 能力等返回 basic/blaze/high
    • iterbatch 维持 high
  3. kernel 侧根据 TPL_APILEVEL 拆分 high/basic/blaze 分支,并保证 tilingkey.h 中枚举出来的组合在 cpp 中有对应入口。

  4. 同步调整 host UT 中受 APILEVEL 影响的 tiling key 期望值。

likedislike
Hu1L1Hu1L1成员
6月29日 添加了label:requirement
Hu1L1
Hu1L1成员
6月29日 评论:

/assign

likedislike
CANN-robotCANN-robot成员
6月29日 将 Hu1L1 设为负责人
CANN-robotCANN-robot成员
7月1日 关闭了 issue
CANN-robotCANN-robot成员
7月1日 添加了label:resolved