Pull Request已成功合入, 合并人@CANN-robot
(感谢 zhangzhizhuo 的贡献)变更摘要
这个 PR 主要扩展了 qgmm_mx 分组矩阵乘法示例,将原来的单一 l1_buffer_stage 参数细化为完整的 tiling 配置(baseK、tileKL1、scaleKL1、l1BufferStage、dbL0C),同时新增了对转置 A(transA)场景下 K 维度分组(k-groups)的支持,并在核函数中引入 FullLoadMode 模板参数来控制 A 矩阵的加载策略。
主要改动
-
新增
QgmmTilingConfig结构与 tiling 参数传递:在qgmm_mx.cpp中引入QgmmTilingConfig结构体,将原来单一的l1BufferStage替换为baseK、tileKL1、scaleKL1、l1BufferStage、dbL0C五个字段,命令行参数从 14 个扩展到 19 个,核函数签名和gmmParams初始化均相应更新。 -
新增
FullLoadMode模板参数与DispatchFullLoad分发函数:在核函数qgmm_mx_kernel及所有下游分发函数(LaunchKernel、RunCase、DispatchMulti、DispatchFormat、DispatchTransA、DispatchConfig)中添加FullLoadMode模板参数,新增DispatchFullLoad函数根据配置项aFullLoad选择FullLoadMode=0或FullLoadMode=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_k、tile_k_l1、scale_k_l1、l1_buffers、db_l0c、a_full_load,验证逻辑要求 A 布局固定为nd、B 布局仅允许nd或nz,transA 仅在mxfp8类型且特定条件下允许,生成的命令行和gen_data.py调用均传递新增参数及--k-groups。 -
验证脚本增强:在
verify_result.py中新增--groups、--m、--n命令行参数,当实际输出可重塑为分组形状时,按组输出每组最大绝对误差(max_abs_error),便于定位分组维度下的精度问题。


代码审查
审查总结
各文件审查结果
| 文件 | 结果 |
|---|---|
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 |
💬 仅评论


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
/approveor/lgtm- Commenting
/approveimplies 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. 👍


/lgtm
/approve


/lgtm
/approve


描述
本次改动完善 QGMM MX Example 的分组场景覆盖、CSV 配置能力及精度验证流程,主要包括:
group_listCSV 字段,支持显式配置各组长度、累计偏移或稀疏索引/长度对。base_k、tile_k_l1、scale_k_l1、l1_buffers、db_l0c和a_full_load。关联的Issue
https://gitcode.com/cann/ops-tensor/issues/63
测试
在配置 CANN 环境的 Ascend 950 设备上执行:
验证内容包括:
测试无问题。
同时对当前 PR 的全部变更文件执行 pre-commit,格式及静态检查通过。
文档更新
更新
examples/gmm/qgmm_mx/README.md:group_list及新增 Tiling 配置字段说明;类型标签