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.binscale.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。支持transBtrue和transBfalse两种场景当transBtrue时A的形状为[M, K]B的形状为[E, N, K]。当transBfalse时A的形状为[M, K]B的形状为[E, K, N]。输入数据类型为hifloat8输出数据类型为bfloat16。支持架构NPU ARCH 3510API参考Ascend C API文档输入参数算子执行文件与结果校验脚本的命令行参数格式一致program group_num m k n [transA transB]program可执行文件当前支持quant_grouped_matmul_hif8_split_m_tt和quant_grouped_matmul_hif8_split_m_tcgroup_num专家数也就是分组数group_value_list表示每个专家对应的分组大小例如64,80,96m总的M大小要求m sum(group_value_list)k矩阵A的列数同时也是每组矩阵B的行数transBtrue时或列数transBfalse时n每组矩阵B的列数transBtrue时或行数transBfalse时也是输出矩阵每组结果的列数transA可选参数默认值为false当前仅支持falsetransB可选参数默认值为truetrue表示B以[E, N, K]组织false表示B以[E, K, N]组织transA和transB需要同时省略或同时指定取值支持0/1/true/false。其中实际参与计算的group_value_list由数据生成脚本gen_data_tt.py或gen_data_tc.py生成并写入input/input_groupList.bin。当前文件中保存的是每个分组各自的分组值大小允许某些组为0。golden输入数据由对应的数据生成脚本生成。编译安装后请在build_out下的本示例目录中执行该脚本。数据生成方式scripts/gen_data_tt.pyT-T量化模式与scripts/gen_data_tc.pyT-C量化模式支持以下两种调用方式方式一显式指定group_value_listpython3 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,96m矩阵乘的m维要求m sum(group_value_list)k矩阵乘的k维n矩阵乘的n维方式二按专家数和期望平均值随机生成group_value_listpython3 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_num的group_value_list并保证每个分组大小均在[floor(0.7 * expect_m_per_group), ceil(1.3 * expect_m_per_group)]范围内构建与运行在仓库根目录下执行全量编译与安装并进入安装目录cmake -S . -B build -DNPU_ARCHdav-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 # 运行可执行文件并校验结果默认transAfalse,transBtrue ./quant_grouped_matmul_hif8_split_m_tt 3 256 128 256 # 运行transAfalse, transBfalse场景显式指定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 falseT-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 # 运行可执行文件并校验结果默认transAfalse,transBtrue ./quant_grouped_matmul_hif8_split_m_tc 3 256 128 256 # 运行transAfalse, transBfalse场景显式指定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),仅供参考