news 2026/7/4 8:18:36

CANN ops-tensor QGMM MX文档

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN ops-tensor QGMM MX文档

Kernel Qgmm Mx

【免费下载链接】ops-tensorops-tensor 是 CANN (Compute Architecture for Neural Networks)算子库中提供张量类计算的基础算子库,采用模块化设计,支持灵活的算子开发和管理。项目地址: https://gitcode.com/cann/ops-tensor

代码位置

功能说明

MX 量化 Grouped Matmul 的 Kernel 组件,基于 Tensor API 实现,仅支持 AIC 计算。 组件负责 group list 解析、group 间m/n/k更新、A/B/Scale/Bias/C 的 GM 偏移维护,以及 tail split 调度。

实现框架参考:Kernel 公共框架

特殊约束

计算模式

仅支持 AIC,不支持 AIV 参与主计算流程。

Block 依赖

通常与BlockMmad<GroupedMatmulWithScaleMx<...>, ...>搭配使用。

调度器限制

使用BlockSchedulerGmmSwatWithTailSplit负责 grouped matmul 的 tile 分发和 tail split。

Scale 类型

ScaleA 和 ScaleB 固定按fp8_e8m0_t解释。

特殊类型别名

别名含义
ProblemShape整体问题规模
TupleShape当前 group 的问题规模
BlockShape单 tile 形状
SchedulerShapescheduler 使用的问题规模
BlockCoordtile 坐标

特殊数据结构

GMMTiling

struct GMMTiling { uint32_t groupNum; int64_t m; int64_t n; int64_t k; uint32_t baseM; uint32_t baseN; uint32_t baseK; uint32_t kAL1; uint32_t kBL1; uint32_t scaleKAL1; uint32_t scaleKBL1; uint8_t isBias; uint8_t dbL0C; int8_t groupType; uint8_t groupListType; };

参数说明:

参数说明
groupNumgroup 数量
m/n/k初始问题规模
baseM/baseN/baseK基础 tile 大小
kAL1/kBL1A/B 的 L1 K 轴切分
scaleKAL1/scaleKBL1ScaleA/ScaleB 的 L1 K 轴切分 tiling 字段;在 MX 量化中两者必须一致,并作为 BlockMmad 的共享scaleKL1
isBias是否启用 bias
dbL0CL0C 双缓冲模式;当前仅值2启用,其余值均视为禁用
groupTypeGMM tiling 兼容保留字段;当前 kernel 未读取该字段,split 方向由LayoutA对应的transA编译期路径决定(!transA按 M,transA按 K)
groupListTypeoffset、length 或 sparse

kAL1/kBL1/scaleKAL1/scaleKBL1需满足 BlockMmad 的 L1 参数约束:kAL1kBL1的较大值作为外层 K 窗口,较大值需为较小值的整数倍;tiling 需传入一致的scaleKAL1scaleKBL1,且不小于该外层窗口,并为该外层窗口的整数倍。Kernel 使用scaleKAL1作为共享scaleKL1

Params

struct Params { ProblemShape problemShape; BlockMmadParams mmadParams; BlockEpilogueParams epilogueParams; GM_ADDR groupListGmAddr; GMMTiling gmmParams; };

特殊成员方法

operator() 函数

__aicore__ inline void operator()(const Params& params)

功能:

  • 作为 kernel 入口,内部调用Run(params)

Init 函数

__aicore__ inline void Init(const Params& params)

功能:

  • 初始化 GM 基地址
  • 读取 grouped matmul tiling 参数
  • 构造首个 group 的problemShape_

Run 函数

__aicore__ inline void Run(const Params& params)

功能:

  • 遍历所有 group
  • 逐 group 更新m/n/k
  • 逐 group 更新地址偏移
  • 调用 scheduler 和 block 完成 tile 级计算

SetMNK 函数

__aicore__ inline void SetMNK(uint32_t groupIdx)

功能:

  • 从 group list 中提取当前组切分值
  • 当前 QGMM MX scalar 路径按LayoutA对应的transA编译期路径更新当前组的problemShape_groupType在当前 kernel 中未参与该判断

UpdateBaseOffsets 函数

__aicore__ inline void UpdateBaseOffsets(uint32_t groupIdx)

功能:

  • 根据上一组的m/n/k更新 A/B/ScaleA/ScaleB/Bias/C 偏移
  • 兼容普通 group list 与 sparse group list

ProcessSingleGroup 函数

template <bool isLastGroupAndNeedSplit> __aicore__ inline void ProcessSingleGroup(BlockScheduler& scheduler, uint32_t groupIdx)

功能:

  • 构造当前 group 的 Tensor API GM Tensor
  • 获取每个 tile 的坐标和形状
  • 将 slice 后的 tensor 交给BlockMmad

调用示例

组件组装

using ProblemShape = AscendC::Te::Shape<int64_t, int64_t, int64_t, int64_t>; using DispatchPolicy = Blaze::Gemm::GroupedMatmulWithScaleMx<0>; using BlockMmad = Blaze::Gemm::Block::BlockMmad< DispatchPolicy, AType, LayoutA, BType, LayoutB, CType, LayoutC, BiasType, LayoutBias>; using BlockEpilogue = Blaze::Gemm::Block::BlockEpilogueEmpty; using BlockScheduler = Blaze::Gemm::Block::BlockSchedulerGmmSwatWithTailSplit; using QgmmKernel = Blaze::Gemm::Kernel::GemmUniversal< ProblemShape, BlockMmad, BlockEpilogue, BlockScheduler>;

参数准备

using Params = typename QgmmKernel::Params; Params params = { {m, n, k, 0}, {aGmAddr, bGmAddr, cGmAddr, biasGmAddr, scaleAGmAddr, scaleBGmAddr}, {}, groupListGmAddr, {groupNum, m, n, k, baseM, baseN, baseK, kAL1, kBL1, scaleKAL1, scaleKBL1, isBias, dbL0C, groupType, groupListType} };

Kernel 执行

QgmmKernel kernel; kernel(params);

调度流程

读取首组 tiling -> 初始化 block scheduler -> 遍历 group -> 更新当前组的 m/n/k -> 更新 A/B/Scale/Bias/C 偏移 -> scheduler 分发 tile -> block 执行单 tile 计算 -> 末组按需执行 tail split

适用场景

  • MX 量化 grouped matmul
  • group 间mk动态变化
  • 需要 sparse group list / tail split 的 grouped matmul 场景

【免费下载链接】ops-tensorops-tensor 是 CANN (Compute Architecture for Neural Networks)算子库中提供张量类计算的基础算子库,采用模块化设计,支持灵活的算子开发和管理。项目地址: https://gitcode.com/cann/ops-tensor

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/4 8:17:03

switch.vim快速入门:5个实用示例教你掌握文本切换核心功能

switch.vim快速入门&#xff1a;5个实用示例教你掌握文本切换核心功能 【免费下载链接】switch.vim A simple Vim plugin to switch segments of text with predefined replacements 项目地址: https://gitcode.com/gh_mirrors/sw/switch.vim switch.vim是一款强大的Vim…

作者头像 李华
网站建设 2026/7/4 8:15:21

Java计算机毕设之智慧医院医疗器械全生命周期管理系统的设计与实现 医疗机构设备采购招投标与入库管理系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/7/4 8:14:56

WVP-GB28181-Pro:构建企业级视频监控平台的完整开源解决方案

WVP-GB28181-Pro&#xff1a;构建企业级视频监控平台的完整开源解决方案 【免费下载链接】wvp-GB28181-pro 基于GB28181-2016、部标808、部标1078标准实现的开箱即用的网络视频平台。自带管理页面&#xff0c;支持NAT穿透&#xff0c;支持海康、大华、宇视等品牌的IPC、NVR接入…

作者头像 李华
网站建设 2026/7/4 8:14:48

高频电磁场仿真在RFIC设计中的关键应用与优化

1. 高频电磁场仿真在射频集成电路设计中的核心价值射频集成电路&#xff08;RFIC&#xff09;设计工程师们每天都要面对一个残酷的现实&#xff1a;当工作频率上升到GHz级别时&#xff0c;传统的集总参数电路理论开始失效。我十年前设计的第一款2.4GHz WiFi前端芯片就曾因此吃尽…

作者头像 李华
网站建设 2026/7/4 8:13:18

从零到一:用Manim打造震撼的3D科学可视化动画

从零到一&#xff1a;用Manim打造震撼的3D科学可视化动画 【免费下载链接】manim A community-maintained Python framework for creating mathematical animations. 项目地址: https://gitcode.com/GitHub_Trending/man/manim 还在为制作复杂的科学动画而头疼吗&#…

作者头像 李华
网站建设 2026/7/4 8:13:13

5分钟打造终端音乐视觉盛宴:CAVA音频可视化工具深度解析

5分钟打造终端音乐视觉盛宴&#xff1a;CAVA音频可视化工具深度解析 【免费下载链接】cava Cross-platform Audio Visualizer 项目地址: https://gitcode.com/GitHub_Trending/ca/cava 想象一下&#xff0c;当你在终端中工作或编程时&#xff0c;背景音乐不仅仅是听觉的…

作者头像 李华