文件最后提交记录最后更新时间
[feature] add broadcast_matmul_perblock_quant Co-authored-by: gt0cd001<ranzherui@huawei.com> # message auto-generated for no-merge-commit merge: !581 merge broadcast_matmul_perblock_quant into master [feature] add broadcast_matmul_perblock_quant Created-by: gt0cd001 Commit-by: gt0cd001 Merged-by: cann-robot Description: ## 描述 新增 broadcast_matmul_perblock_quant 算子,实现张量 A \[B,M,K] 与矩阵 B \[K,N] 的广播矩阵乘法,并对计算结果进行 per-block 量化输出 FP8 (e4m3fn) 格式。对标[aclnnMatmul](https://gitcode.com/cann/ops-nn/tree/master/matmul/mat_mul_v3)和[aclnnDynamicQuantV2](https://gitcode.com/cann/ops-nn/tree/master/quant/dynamic_quant_v2)。 ### 主要改动点 1. 算子实现 (examples/62_ascend950_broadcast_matmul_perblock_quant/) - Kernel 实现 AIC/AIV 双核协作:AIC 负责矩阵乘累加,AIV 负责 per-block 量化(最大值计算、scale 计算、FP8 转换) - 使用 TLA 编程模型和 MmadPingpong 调度策略,针对 Ascend950 (dav-3510) 架构优化 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 运行测试脚本(gen_data_compare.py将在后续[PR](https://gitcode.com/cann/catlass/pull/623)提交) ``` python3 gen_data_compare.py batch_count m n k device_id ``` ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!5814 天前
[feature] add broadcast_matmul_perblock_quant Co-authored-by: gt0cd001<ranzherui@huawei.com> # message auto-generated for no-merge-commit merge: !581 merge broadcast_matmul_perblock_quant into master [feature] add broadcast_matmul_perblock_quant Created-by: gt0cd001 Commit-by: gt0cd001 Merged-by: cann-robot Description: ## 描述 新增 broadcast_matmul_perblock_quant 算子,实现张量 A \[B,M,K] 与矩阵 B \[K,N] 的广播矩阵乘法,并对计算结果进行 per-block 量化输出 FP8 (e4m3fn) 格式。对标[aclnnMatmul](https://gitcode.com/cann/ops-nn/tree/master/matmul/mat_mul_v3)和[aclnnDynamicQuantV2](https://gitcode.com/cann/ops-nn/tree/master/quant/dynamic_quant_v2)。 ### 主要改动点 1. 算子实现 (examples/62_ascend950_broadcast_matmul_perblock_quant/) - Kernel 实现 AIC/AIV 双核协作:AIC 负责矩阵乘累加,AIV 负责 per-block 量化(最大值计算、scale 计算、FP8 转换) - 使用 TLA 编程模型和 MmadPingpong 调度策略,针对 Ascend950 (dav-3510) 架构优化 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 运行测试脚本(gen_data_compare.py将在后续[PR](https://gitcode.com/cann/catlass/pull/623)提交) ``` python3 gen_data_compare.py batch_count m n k device_id ``` ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!5814 天前
[feature] add broadcast_matmul_perblock_quant Co-authored-by: gt0cd001<ranzherui@huawei.com> # message auto-generated for no-merge-commit merge: !581 merge broadcast_matmul_perblock_quant into master [feature] add broadcast_matmul_perblock_quant Created-by: gt0cd001 Commit-by: gt0cd001 Merged-by: cann-robot Description: ## 描述 新增 broadcast_matmul_perblock_quant 算子,实现张量 A \[B,M,K] 与矩阵 B \[K,N] 的广播矩阵乘法,并对计算结果进行 per-block 量化输出 FP8 (e4m3fn) 格式。对标[aclnnMatmul](https://gitcode.com/cann/ops-nn/tree/master/matmul/mat_mul_v3)和[aclnnDynamicQuantV2](https://gitcode.com/cann/ops-nn/tree/master/quant/dynamic_quant_v2)。 ### 主要改动点 1. 算子实现 (examples/62_ascend950_broadcast_matmul_perblock_quant/) - Kernel 实现 AIC/AIV 双核协作:AIC 负责矩阵乘累加,AIV 负责 per-block 量化(最大值计算、scale 计算、FP8 转换) - 使用 TLA 编程模型和 MmadPingpong 调度策略,针对 Ascend950 (dav-3510) 架构优化 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 运行测试脚本(gen_data_compare.py将在后续[PR](https://gitcode.com/cann/catlass/pull/623)提交) ``` python3 gen_data_compare.py batch_count m n k device_id ``` ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!5814 天前
README.md

BroadcastMatmulPerblockQuant Example Readme

代码组织

├── 62_ascend950_broadcast_matmul_perblock_quant
│   ├── CMakeLists.txt              # CMake编译文件
│   ├── README.md
│   ├── gen_data_compare.py         # 数据生成+精度比对脚本
│   └── broadcast_matmul_perblock_quant_tla.cpp # 算子调用示例

功能说明

该算子实现了张量A (shape [B,M,K])和矩阵B(shape [K,N])的广播矩阵乘法,并对计算结果进行perblock量化(block大小为[M,K])。 算子典型应用场景为Q,K,V与旋转矩阵进行矩阵乘法以平滑数据分布,然后进行MXFP8(E4M3)量化。

参数说明

参数名 输入/输出 描述 数据类型 数据格式
a 输入 张量a bfloat16 ND
b 输入 矩阵b bfloat16 ND
out 输出 a与b的广播矩阵乘法的量化结果 float8_e4m3fn ND
scale 输出 a与b的广播矩阵乘法的量化缩放系数 float32 ND
  • 输入a的shape为[B,M,K]
  • 输入b的shape为[K,N]
  • 输出out的shape为[B,M,N]
  • 输出scale的shape为[B]

约束说明

  • B的取值范围为[1,65536]; 对应Q,K,V按照MXFP8量化分块后block的数量。
  • M的取值范围为{128,256}; 对应MXFP8量化的block大小。
  • N和K的取值范围为{128}; 对应旋转矩阵的大小

使用示例

数据生成与精度比对

# 编译指定用例
bash scripts/build.sh 62_ascend950_broadcast_matmul_perblock_quant -DCATLASS_ARCH=3510

# 在示例目录下运行数据生成和比对脚本
cd examples/62_ascend950_broadcast_matmul_perblock_quant

# python3 gen_data_compare.py <batch_count> <m> <n> <k> <device_id>
python3 gen_data_compare.py 1024 128 128 128 0

执行结果如下,说明dst和scale精度比对成功。

------ 生成测试数据 ------
batch_count=1024, m=128, n=128, k=128
------ 运行NPU算子 ------
npu op run log =
------ 比对结果 ------
------ 计算相对误差 -----
------ 综合精度指标 ------
dst: npu mare=0.1250, golden mare=0.125000
dst: npu mere=0.0018, golden mere=0.001839
dst: npu rmse=1.3765, golden rmse=1.377344
scale: npu mare=0.0030, golden mare=0.003028
scale: npu mere=0.0013, golden mere=0.001291
scale: npu rmse=0.0006, golden rmse=0.000632
------ 开始比较 ------
精度指标比较结果:Compare success