Closed
【社区任务】[Requirement|需求建议]: 新增 SplitQkvRmsnormMrope 算子 #6240
gcw_xAjKNLcrAdd on  Oct 16Closed at  23 days ago
gcw_xAjKNLcr
Oct 16 Create

Backgroud(背景信息)

Qwen3-VL 注意力模块在进入 Attention 计算前,需要从融合输入中拆分 Q、K、V 和 Gate,
并对 Q/K 执行 RMSNorm、weight/bias 仿射以及三轴 MRoPE。若分别调用多个算子,会产生多个中间 Tensor、
多次 Kernel Launch 和重复 GM 读写。

SplitQkvRmsnormMrope 将上述步骤融合到一个 Ascend C Kernel 中;Q/K 使用 FP32 中间计算,
V/Gate 保持 BF16 原始位直通,适用于 Qwen3-VL Decode 和 Prefill 场景。

本算子来源于 CANN 社区任务,设计文档和验收已经按社区任务流程完成。

Benefit / Necessity (价值/作用)

  1. 将 QKV/Gate 拆分、Q/K RMSNorm、仿射和 MRoPE 融合,减少 Kernel Launch。
  2. 不生成 RMSNorm、仿射和旋转位置编码的中间 Tensor,降低峰值内存。
  3. 减少中间结果写回和重新读取,降低 GM 带宽开销。
  4. 支持 Qwen3-VL 三轴 MRoPE。
  5. V/Gate 使用 BF16 原始位直通,避免不必要的类型转换和精度损失。
  6. 同时覆盖 Decode、Small、Medium 和 Prefill 场景。

支持设备:

  • Atlas A2 训练系列产品
  • Atlas A2 推理系列产品
  • Ascend 910B

Design(设计方案)

主要输入输出:

名称 dtype shape 说明
qkv BF16 [T,W] 融合 QKV/Gate 输入
q_weight BF16 [256] Q RMSNorm weight
k_weight BF16 [256] K RMSNorm weight
cos_sin BF16 [3,T,64] 三轴 MRoPE cos/sin
q_bias BF16 [256] 可选 Q bias
k_bias BF16 [256] 可选 K bias
q_output BF16 [T,Nq*256] Q 输出
k_output BF16 [T,Nkv*256] K 输出
v_output BF16 [T,Nkv*256] V 直通输出
gate_output BF16 [T,Nq*256] 或 [T,0] Gate 输出

host侧设计

1. Shape 和 dtype 推导

根据 T、num_q_heads、num_kv_heads 和 has_gate 推导 Q/K/V/Gate 输出二维 shape,
输出 dtype 跟随 BF16 输入。

2. 分核策略

  • 常规路径按 token 分配 AIV 核;
  • block 数为 min(tokens, AIV core num),至少为 1;
  • 短路径按 (Nq+Nkv)/2 个 head group 分配任务。

3. Tiling 数据和 workspace

Tiling 下发 token 数、Q/KV head 数、block 数、eps、bias/Gate/interleaved 标志。
正式 Kernel 入口内根据 tiling data 选择短路径或常规路径,TilingKey 为 0,workspace 为 0。

kernel侧设计

1. 数据拆分

根据 has_gate 和 interleaved 从融合输入中提取 Q、K、V 和 Gate。
V/Gate 直接搬运到输出,保证 BF16 原始字节一致。

2. RMSNorm 和仿射

Q/K 从 BF16 转为 FP32,计算平方和、均值、rsqrt,再乘以 weight,并按需加 bias。

3. 三轴 MRoPE

加载 [3,T,64] cos/sin,根据 section [11,11,10] 生成三轴映射,对 Q/K 前 64 维完成旋转,
其余维度保持仿射结果。

likedislike
gcw_xAjKNLcr
Oct 16 Comments:

/assign

likedislike
CANN-robotCANN-robotCollaborators
Oct 16 Assign gcw_xAjKNLcr as responsible person
Ggcw_xAjKNLcr
Oct 16 Associated pull request
CANN-robotCANN-robotCollaborators
23 days ago Close issue
CANN-robotCANN-robotCollaborators
23 days ago Added label: resolved
周云飞
周云飞Collaborators
4 days ago Comments:

已合入 PR !13997,新增实验性 SplitQkvRmsnormMrope 算子,用于 Qwen3-VL 注意力输入预处理,融合 QKV/Gate 拆分、Q/K RMSNorm、仿射和三轴 MRoPE。同步新增算子定义、形状和数据类型推导、Tiling 相关代码,以及接口文档、调用示例和 Host 单元测试。

关联 PR:PR #13997

likedislike