A2Fp8E4M3Matmul Example Readme【免费下载链接】catlass本项目是CANN的算子模板库提供NPU上高性能矩阵乘及其相关融合类算子模板样例。项目地址: https://gitcode.com/cann/catlass代码组织├── 29_a2_fp8_e4m3_matmul │ ├── CMakeLists.txt # CMake编译文件 │ ├── README.md │ ├── gen_data.py # 数据生成脚本 │ └── fp8_matmul.cpp # 主文件功能介绍该算子支持输入A矩阵和B矩阵的数据类型为FP8 E4M3格式软实现然后进行矩阵乘输出C矩阵FP16。实现细节1、输入处理接收两个FP8 E4M3格式的输入矩阵A和B2、伪量化将FP8数据伪量化成FP16格式per-tensor量化模式3、矩阵乘使用FP16数据进行矩阵乘中间结果使用FP32精度进行累加4、输出转换将最终结果转换成FP16格式输出使用示例example使用第一步编译获取代码之后编译相应的算子可执行文件可参考quickstart# 编译指定用例 bash scripts/build.sh 29_a2_fp8_e4m3_matmul第二步执行gen_data.py生成测试数据测试用例规格从命令行输入cd examples/29_a2_fp8_e4m3_matmul python gen_data.py 256 512 1024 0 0 cd ../.. # 输入参数分别对应 m, n, k, trans_a, trans_b # trans_a表示A矩阵是否转置0是不转置1是转置 # trans_b表示B矩阵是否转置0是不转置1是转置执行该命令后会在当前路径下生成input和output目录包含算子的输入数据和用于精度验证的golden数据├── input │ ├── a_8.bin │ ├── b_8.bin └── output └── expected_data.bin第三步执行算子注意提供给算子的输入shape和上面第二步生成数据的shape需一致# 可执行文件名 |矩阵m轴|n轴|k轴|Device ID # Device ID可选默认为0 ./output/bin/29_a2_fp8_e4m3_matmul 256 512 1024 0执行结果如下说明精度比对成功。Compare success.说明1、gen_data.py的输入支持trans_a和trans_b但29_a2_fp8_e4m3_matmul可执行文件不支持仅仅是trans_a和trans_b均为0的example示例。若要对应转置情况请修改example示例中的layout因为layout隐式表征转置状态即layout::RowMajor表示不转置layout::ColumnMajor表示转置。其对应关系如下表trans_atrans_bLayoutALayoutB00layout::RowMajorlayout::RowMajor01layout::RowMajorlayout::ColumnMajor10layout::ColumnMajorlayout::RowMajor11layout::ColumnMajorlayout::ColumnMajor2、对比FP16 Matmul该样例针对大shape的case有较为明显的显存收益3、针对小shape场景可以参考catlass_optimize_guidance对样例进行tiling调优【免费下载链接】catlass本项目是CANN的算子模板库提供NPU上高性能矩阵乘及其相关融合类算子模板样例。项目地址: https://gitcode.com/cann/catlass创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考