已合并
feat(gmm): expand qgmm mx grouped examples #220
feat(gmm): expand qgmm mx grouped examples #220
已合并
zhangzhizhuo创建于 6 天前
zhangzhizhuo
zhangzhizhuo成员
6 天前

描述

本次改动完善 QGMM MX Example 的分组场景覆盖、CSV 配置能力及精度验证流程,主要包括:

  1. 补充 M 轴分组和 K 轴分组用例,覆盖 Length、Offset、Sparse Group List,以及等长和不等长分组。
  2. 新增 group_list CSV 字段,支持显式配置各组长度、累计偏移或稀疏索引/长度对。
  3. 增加 Group List 合法性检查,校验分组数量、索引、正长度及分组轴完整覆盖关系。
  4. 扩展 MXFP8 E4M3/E5M2、MXFP4 E2M1/E1M2、ND/NZ、单 Tensor/多 Tensor、Bias 和 Weight 转置等场景。
  5. 增加 M/N/K 尾块、大 K、L1 双/三 Buffer、L0C 双 Buffer和 A Full Load 等配置。
  6. 扩展 CSV Tiling 参数,支持独立配置 base_ktile_k_l1scale_k_l1l1_buffersdb_l0ca_full_load
  7. 调整 K 轴分组的数据生成、Scale 布局及 Golden 计算逻辑,并在精度校验阶段输出各分组的最大绝对误差,便于定位失败分组。
  8. 完善 CSV 参数检查,仅允许当前实现支持的 K 轴分组组合进入执行流程。

关联的Issue

https://gitcode.com/cann/ops-tensor/issues/63

测试

在配置 CANN 环境的 Ascend 950 设备上执行:

bash build.sh --examples --ops=gmm --target=qgmm_mx

验证内容包括:

  • QGMM MX Example 编译和运行;
  • CSV 参数解析及 Group List 合法性检查;
  • M 轴和 K 轴分组场景;
  • Length、Offset 和 Sparse Group List;
  • 等长及不等长分组;
  • MXFP4、MXFP8、ND、NZ、单 Tensor及多 Tensor场景;
  • NPU 输出与 CPU Golden 精度比对。

测试无问题。

同时对当前 PR 的全部变更文件执行 pre-commit,格式及静态检查通过。

文档更新

更新 examples/gmm/qgmm_mx/README.md

  • 补充 group_list 及新增 Tiling 配置字段说明;
  • 补充 M 轴和 K 轴分组说明;
  • 说明不同 Group List 类型的配置形式及完整覆盖约束;
  • 更新样例支持范围和执行方式。

类型标签

  • Bug修复
  • 新特性
  • 性能优化
  • 文档更新
  • 其他,请描述:
likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 zhangzhizhuo 的贡献)
zhangzhizhuozhangzhizhuo成员
6 天前 创建了 pull request,commit a6f3881d
atomgit-bot
atomgit-bot
6 天前 评论:

变更摘要

这个 PR 主要扩展了 qgmm_mx 分组矩阵乘法示例,将原来的单一 l1_buffer_stage 参数细化为完整的 tiling 配置(baseKtileKL1scaleKL1l1BufferStagedbL0C),同时新增了对转置 A(transA)场景下 K 维度分组(k-groups)的支持,并在核函数中引入 FullLoadMode 模板参数来控制 A 矩阵的加载策略。

主要改动

  • 新增 QgmmTilingConfig 结构与 tiling 参数传递:在 qgmm_mx.cpp 中引入 QgmmTilingConfig 结构体,将原来单一的 l1BufferStage 替换为 baseKtileKL1scaleKL1l1BufferStagedbL0C 五个字段,命令行参数从 14 个扩展到 19 个,核函数签名和 gmmParams 初始化均相应更新。

  • 新增 FullLoadMode 模板参数与 DispatchFullLoad 分发函数:在核函数 qgmm_mx_kernel 及所有下游分发函数(LaunchKernelRunCaseDispatchMultiDispatchFormatDispatchTransADispatchConfig)中添加 FullLoadMode 模板参数,新增 DispatchFullLoad 函数根据配置项 aFullLoad 选择 FullLoadMode=0FullLoadMode=1 进行路由。

  • 新增 transA 场景下 K 维度分组(k-groups)支持:在 gen_data.py 中新增 _parse_k_groups 函数,支持通过 --k-groups 参数指定每组 K 维度大小;transA 分支改为按组分别生成矩阵 A/B、scale 数据和随机 scale 编码,group_list 按 k 维度累积和生成;在 qgmm_mx.cpp 中,PrepareWeightBuffers 新增 KGrouped 模板参数,transA 情况下权重和 scale 按 tensorCount=1 分配内存。

  • CSV 解析与命令构建逻辑重构:在 parse_csv.py 中,CSV 字段从 l1_buffer_stage 扩展为 base_ktile_k_l1scale_k_l1l1_buffersdb_l0ca_full_load,验证逻辑要求 A 布局固定为 nd、B 布局仅允许 ndnz,transA 仅在 mxfp8 类型且特定条件下允许,生成的命令行和 gen_data.py 调用均传递新增参数及 --k-groups

  • 验证脚本增强:在 verify_result.py 中新增 --groups--m--n 命令行参数,当实际输出可重塑为分组形状时,按组输出每组最大绝对误差(max_abs_error),便于定位分组维度下的精度问题。

likedislike
atomgit-bot
atomgit-bot
6 天前 评论:

代码审查

审查总结

各文件审查结果

文件 结果
examples/gmm/qgmm_mx/parse_csv.py 1 个 P3 发现(line 42 新增限制与 line 45 未修改条件产生死代码不一致)
examples/gmm/qgmm_mx/qgmm_mx.cpp 1 个 P3 发现(transA 路径 int64 乘法后转 size_t 的非安全模式)
examples/gmm/qgmm_mx/qgmm_mx.csv 无问题——新增用例数据与 CSV 列定义、parse_csv.py 校验逻辑一致
examples/gmm/scripts/gen_data.py 无问题——transA/kgroup 路径与非 transA 路径的数据生成、scale 计算、group_list 生成均与 C++ 侧对齐
examples/gmm/scripts/verify_result.py 无问题——新增 --groups/--m/--n 参数,调用链正确提供所有参数,空值防护到位

按优先级统计

  • P0: 0
  • P1: 0
  • P2: 0
  • P3: 2(均为轻微问题,不影响正确性)

整体风险评估

低风险。本次变更是一次结构良好的功能扩展,为 QGMM MX grouped-matmul 示例新增了 kgroup(transA)测试用例、a_full_load 策略支持以及更细粒度的 tiling 参数化。Python 和 C++ 两侧的数据生成、命令行参数传递、内核模板派发链路均正确对齐。两个 P3 问题均为代码整洁性/防御性编程层面的改进建议,不影响运行时正确性。

类型 数量
🔴 阻塞 0
🟡 建议 2

💬 仅评论

likedislike
CANN-robotCANN-robot成员
6 天前 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
6 天前 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here
You can get sig-info at here


PR Approval Progress

Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
repo-cann/ops-tensor 陈康, 商晓波 (2/2) 陈康, 商晓波 (2/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

zhangzhizhuo, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
此处折叠了93条消息 查看更多
chen-kang30
chen-kang30成员
3 天前 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
3 天前 添加了label:approved
sxb154714
sxb154714成员
3 天前 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
3 天前 添加了label:lgtm
CANN-robotCANN-robot成员
3 天前 合入了pull request