当前位置: 首页 > news >正文

CANN分组HiFloat8量化矩阵乘

Grouped Matmul HiFloat8量化矩阵乘算子

【免费下载链接】cann-samples算子领域高性能实战演进样例与体系化调优知识库项目地址: https://gitcode.com/cann/cann-samples

概述

本示例展示了Grouped Matmul HiFloat8量化矩阵乘算子在昇腾AI处理器上的完整实现。算子以专家数进行分组,执行分组矩阵乘计算,适用于MoE等包含多专家分组计算的训推场景。

当前目录提供以下能力:

  • quant_grouped_matmul_hif8_split_m_tt:基于M轴分组、采用T-T量化模式的分组量化矩阵乘示例。每个group一组FP32标量pertoken_scale.bin+scale.bin
  • quant_grouped_matmul_hif8_split_m_tc:基于M轴分组、采用T-C量化模式的分组量化矩阵乘示例。每个group的N维uint64per-channelscale.bin
  • scripts/gen_data_tt.py:生成T-T量化模式输入数据和CPU golden结果。
  • scripts/gen_data_tc.py:生成T-C量化模式输入数据和CPU golden结果。
  • scripts/verify_result.py:校验NPU输出与CPU golden是否一致。

使用约束

当前样例需要满足以下约束条件:

  • 当前仅支持M轴分组(split-M路径),transA必须为false
  • 支持transB=truetransB=false两种场景:
    • transB=true时,A的形状为[M, K],B的形状为[E, N, K]
    • transB=false时,A的形状为[M, K],B的形状为[E, K, N]
  • 输入数据类型为hifloat8,输出数据类型为bfloat16

支持架构

NPU ARCH 3510

API参考

Ascend C API文档

输入参数

算子执行文件与结果校验脚本的命令行参数格式一致:

<program> group_num m k n [transA transB]
  • program:可执行文件,当前支持quant_grouped_matmul_hif8_split_m_ttquant_grouped_matmul_hif8_split_m_tc
  • group_num:专家数,也就是分组数
  • group_value_list:表示每个专家对应的分组大小,例如64,80,96
  • m:总的M大小,要求m >= sum(group_value_list)
  • k:矩阵A的列数,同时也是每组矩阵B的行数(transB=true时)或列数(transB=false时)
  • n:每组矩阵B的列数(transB=true时)或行数(transB=false时),也是输出矩阵每组结果的列数
  • transA:可选参数,默认值为false;当前仅支持false
  • transB:可选参数,默认值为truetrue表示B以[E, N, K]组织,false表示B以[E, K, N]组织

transAtransB需要同时省略或同时指定,取值支持0/1/true/false

其中实际参与计算的group_value_list由数据生成脚本(gen_data_tt.pygen_data_tc.py)生成,并写入input/input_groupList.bin。当前文件中保存的是每个分组各自的分组值大小,允许某些组为0

golden输入数据由对应的数据生成脚本生成。编译安装后请在build_out下的本示例目录中执行该脚本。

数据生成方式

scripts/gen_data_tt.py(T-T量化模式)与scripts/gen_data_tc.py(T-C量化模式)支持以下两种调用方式:

方式一:显式指定group_value_list

python3 scripts/<gen_script>.py group_list group_value_list m k n [transA transB]

示例:

# T-T量化模式 python3 scripts/gen_data_tt.py group_list 64,80,96 256 128 256 # T-C量化模式 python3 scripts/gen_data_tc.py group_list 64,80,96 256 128 256 false false

含义如下:

  • group_list:显式分组模式,直接传入每个专家的分组大小。
  • group_value_list:每个专家对应的分组大小,例如64,80,96
  • m:矩阵乘的m维,要求m >= sum(group_value_list)
  • k:矩阵乘的k
  • n:矩阵乘的n

方式二:按专家数和期望平均值随机生成group_value_list

python3 scripts/<gen_script>.py expect_m_per_group group_num expect_m_per_group m k n [transA transB]

示例:

# T-T量化模式 python3 scripts/gen_data_tt.py expect_m_per_group 3 80 256 128 256 # T-C量化模式 python3 scripts/gen_data_tc.py expect_m_per_group 3 80 256 128 256 false false

含义如下:

  • expect_m_per_group:随机分组模式,按每组期望分组大小随机生成分组
  • group_num:专家数/分组数
  • expect_m_per_group:每组期望平均分组大小
  • m:矩阵乘的m维,要求m >= sum(group_value_list)
  • k:矩阵乘的k
  • n:矩阵乘的n

在该模式下,脚本会随机生成长度为group_numgroup_value_list,并保证:

  • 每个分组大小均在[floor(0.7 * expect_m_per_group), ceil(1.3 * expect_m_per_group)]范围内

构建与运行

在仓库根目录下执行全量编译与安装,并进入安装目录:

cmake -S . -B build -DNPU_ARCH=dav-3510 cmake --build build --parallel cmake --install build --prefix ./build_out cd build_out/2_Performance/grouped_matmul_story/grouped_matmul_recipes/quant_grouped_matmul_hif8

之后可按需执行以下命令:

T-T量化模式:

# 生成数据方式一:显式指定grouplist生成一组测试数据 python3 scripts/gen_data_tt.py group_list 64,80,96 256 128 256 # 生成数据方式二:按专家数和平均M随机生成grouplist python3 scripts/gen_data_tt.py expect_m_per_group 3 80 256 128 256 # 运行可执行文件并校验结果(默认transA=false,transB=true) ./quant_grouped_matmul_hif8_split_m_tt 3 256 128 256 # 运行transA=false, transB=false场景(显式指定transA/transB) python3 scripts/gen_data_tt.py group_list 64,80,96 256 128 256 false false ./quant_grouped_matmul_hif8_split_m_tt 3 256 128 256 false false

T-C量化模式:

# 生成数据方式一:显式指定grouplist生成一组测试数据 python3 scripts/gen_data_tc.py group_list 64,80,96 256 128 256 # 生成数据方式二:按专家数和平均M随机生成grouplist python3 scripts/gen_data_tc.py expect_m_per_group 3 80 256 128 256 # 运行可执行文件并校验结果(默认transA=false,transB=true) ./quant_grouped_matmul_hif8_split_m_tc 3 256 128 256 # 运行transA=false, transB=false场景(显式指定transA/transB) python3 scripts/gen_data_tc.py group_list 64,80,96 256 128 256 false false ./quant_grouped_matmul_hif8_split_m_tc 3 256 128 256 false false
# 可选:手动再次校验(用于调试/复核) python3 scripts/verify_result.py 3 256 128 256

【免费下载链接】cann-samples算子领域高性能实战演进样例与体系化调优知识库项目地址: https://gitcode.com/cann/cann-samples

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

http://www.jsqmd.com/news/941816/

相关文章:

  • 2026年洛阳婚礼堂全案设计与宴会厅改造一站式落地完全指南 - 优质企业观察收录
  • 微信里投票怎么做的?微信投票活动制作教程|火星投票2026最新版|附操作步骤 - 微信投票小程序
  • WorkshopDL终极指南:轻松获取Steam创意工坊模组的完整解决方案
  • ComfyUI-Manager终极指南:如何批量卸载自定义节点并彻底清理依赖
  • 【保姆级教程】2026 开发者必看:手把手教你本地部署专属 Claude 工作流,打造超强私有化 AI 助手
  • 如何快速提升OneNote效率:终极插件完全指南
  • 【无锡市黄金白银回收城区连锁门店精选】 - 余生黄金回收
  • Video2X 6.0.0完整指南:用AI技术让你的视频瞬间焕发新生
  • Neo4j 5.25.1 Windows 便携版:含完整Java依赖、SSL证书与Cypher运行环境
  • 闲置宝玑宝珀想变现,石家庄本地靠谱名表回收机构盘点 - 合扬奢侈品交易中心
  • 减速机厂家选购指南:如何选择靠谱的减速机厂家 - 资讯纵览
  • 聚焦旧房焕新赛道|2026 珠海家先生装饰专项测评,装配式翻新 + 本土防潮双优势 - 起跑123
  • 社会人工智能:从算法优化到社会价值的技术实践框架
  • Steam成就管理终极指南:如何免费快速掌控你的游戏成就
  • 《Agent Skills橙皮书:给AI装技能的完全指南》读书摘记
  • PyQt5轻量首页模板:侧边导航悬停高亮 + 窗口自由拖拽关闭
  • 【Java框架】知识点汇总Day2:MyBatis(含集合基础)(持续更新)
  • 3PEAK思瑞浦 TP1564AL1-TR TSSOP14 运算放大器
  • 深圳翡翠回收:2026年实地走访,行家甄选,六大机构各有专长 - 薛定谔的梨花猫
  • 抖音下载神器:免费批量下载视频、直播回放与图集的终极指南
  • Git 分支merge合并常用步骤与命令操作
  • 5分钟搭建Python股票数据分析系统:MOOTDX让你轻松玩转通达信数据
  • 匠选:变压器吊装公司推荐榜 - 品牌推广大师
  • 题解:P10121 『STA - R4』保险丝
  • 泰和县26年最新专业手表包包回收权威店铺推荐,TOP排行榜 - 莘州文化
  • 免费Windows虚拟显示器终极指南:如何轻松扩展多屏工作空间
  • 2026玻璃钢储罐厂家实测盘点 多场景化工环保罐体选型参考指南 - GrowthUME
  • Meta AI 助力黑客攻击,多知名 Instagram 账号被盗,开启 MFA 可防范
  • 铜鼓县26年最新专业手表包包回收权威店铺推荐,TOP排行榜 - 莘州文化
  • 手把手实战:用PyTorch复现MIMO-UNet图像去模糊(从数据准备到模型训练全流程)