已关闭
[Requirement|需求建议]:新增weight_quant_matmul_mxfp8fp4样例 #190
xubinglin创建于  6月4日关闭于  6月5日
xubinglin成员
6月4日 创建

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

一、背景信息 (必填)

新增 weight_quant_matmul_mxfp8fp4 权重量化矩阵乘样例,支持 MXFP8 输入、packed MXFP4 NZ 权重、E8M0 scale、BF16 输出的矩阵乘计算。

二、价值/作用 (必填)

展示 MXFP8 + MXFP4 权重量化矩阵乘在 Ascend C 上的完整实现路径,可作为低比特权重量化矩阵乘的参考样例。

三、设计方案 (必填)

3.1 使能方式(涉及哪些框架:如Aclnn直调、Pytorch训练等)

<<<>>>直调

3.2 总体设计
3.2.1 算子支持的数据类型
  • A:MXFP8,ND layout。
  • B:packed MXFP4,NZ layout。
  • ScaleA:E8M0 scale。
  • ScaleB:E8M0 scale。
  • C:BF16,ND layout。
3.2.2 host侧设计

host 侧主要包括:

  • 新增 WeightQuantMatmulMxfp8Fp4TilingData,序列化 kernel 所需 tiling 字段。
  • 新增 WeightQuantMatmulMxfp8Fp4SwatTiling,基于 SWAT-derived 策略生成 tiling。
  • tiling 固定由 target 决定 2-buffer/4-buffer,不通过运行时参数切换。
3.2.3 kernel侧设计

kernel 侧主要包括:

  • 新增 GemmUniversal primary template,并为 MXFP8FP4 实现特化。
  • 新增 MXFP8FP4 专用 BlockMmad 特化,负责 L1/L0 tensor 构造、MMAD 计算和 C 输出。
  • 新增 SWAT scheduler,负责 block 分核、tail split 和 compact valid tile 映射。
  • 新增 weight prologue,将 packed MXFP4 weight 从 GM 搬到 UB,完成 W4 到 W8 的展开,再搬入 L1。
  • B L1 buffer 空间按固定 base tile 分配,tensor 有效 N 维保持当前 tile 真实 N,保证 prologue 与 block MMAD 的 L1 buffer stride 契约一致。
  • 2-buffer/4-buffer 由 WeightQuantMatmulMxfp8Fp4DispatchPolicy<L1_BUF_NUM> 控制。
3.3 支持硬件

Ascend950

3.4 算子约束限制

当前样例约束:

  • 命令行参数固定为 m k n,不支持 transA / transB 参数。
  • m > 0k > 0n > 0
  • k 必须为 64 的倍数。
  • n 必须为 16 的倍数。
  • A 固定为 ND layout。
  • B 固定为 packed MXFP4 NZ layout。
  • C 固定为 BF16 输出。
  • 2-buffer/4-buffer 由可执行 target 固定,不随输入 shape 自动切换。

💡 备注(选填)

likedislike
Xxubinglin成员
6月4日 添加了label:requirement
Xxubinglin成员
6月4日 修改标题为 “[Requirement|需求建议]:新增”,原标题为“[Requirement|需求建议]: ”
Xxubinglin成员
6月4日 修改标题为 “[Requirement|需求建议]:新增weight_quant_matmul_mxfp8fp4样例”,原标题为“[Requirement|需求建议]:新增”
CANN-robotCANN-robot成员
6月5日 关闭了 issue
CANN-robotCANN-robot成员
6月5日 添加了label:resolved