DynamicOptimizedQuantMatmulPerTokenBasic Example Readme【免费下载链接】catlass本项目是CANN的算子模板库提供NPU上高性能矩阵乘及其相关融合类算子模板样例。项目地址: https://gitcode.com/cann/catlass1 背景基于泛化性要求本样例在样例102之外新增了处理量化Matmul的泛化工程实现本样例目前支持PerToken-PerChannel量化Matmul基础模板。量化被广泛应用于现代高性能计算的深度学习模型中特别是在推理过程中。通过量化模型可以在硬件上更高效地运行减少计算资源的消耗和加速推理过程同时降低模型的存储需求。目前支持的量化计算模式包括PerToken量化和PerChannel量化。在以下的介绍中m、n、k变量分别表示Tensor计算的不同轴大小。左矩阵、右矩阵分别指进行矩阵乘法计算的两个输入Tensor。PerToken量化通常用于量化左矩阵对每个Token即左矩阵的一行使用独立的量化参数进行计算。假设左矩阵shape为(m, k)k为reduce轴则生成的PerToken量化参数的shape为(m,)。PerChannel量化通常用于量化右矩阵对每个Channel即右矩阵的一列使用独立的量化参数进行计算。假设右矩阵shape为(k, n)k为reduce轴则生成的PerChannel量化参数的shape为(n,)。一般左矩阵代表激活activationA、右矩阵代表权重weightW本样例目前支持左右矩阵输入数据类型为int8、对左矩阵进行PerToken量化对右矩阵进行PerChannel量化的场景可简记为W8A8 PerToken-PerChannel 全量化Matmul场景。2 文档索引和约束说明2.1 工程说明泛化量化Matmul工程结构说明可参考工程结构说明。本工程遵循与样例102类似的模板生成、Tiling计算、模板选择等流程并根据量化Matmul计算特点进行了适配修改。工程编译前会调用python脚本生成代码具体包括调用各模板的外围代码以及launch_map.h(包含tilingKey和具体Kernel的映射关系)。本工程默认编译为动态库编译完成执行样例前请export动态库路径export LD_LIBRARY_PATH/path/to/catlass/output/shared_lib/lib/:$LD_LIBRARY_PATH2.2 工程结构├── CMakeLists.txt ├── README.md ├── dynamic_optimized_quant_matmul_per_token_basic.cpp ├── impl │ ├── kernel │ │ ├── per_token_matmul_kernel.h │ ├── scripts │ │ ├── templates │ │ │ ├── per_token_matmul_template.py │ │ ├── utils │ │ │ └── config.py │ │ └── wrapper_code_gen.py │ └── wrapper # 自动生成 │ ├── per_token_matmul_kernel_int8_t_layout00.cpp # 自动生成 │ ├── per_token_matmul_kernel_int8_t_layout01.cpp # 自动生成 │ ├── per_token_matmul_kernel_int8_t_layout10.cpp # 自动生成 │ ├── per_token_matmul_kernel_int8_t_layout11.cpp # 自动生成 └── include ├── do_tiling_b8.h ├── dynamic_optimized_matmul_w8a8.h ├── launch_map.h # 自动生成 ├── platform_info.h ├── select_kernel_b8.h ├── tiling_params.h └── utils.h2.3 模板文档模板名称说明PerTokenBasicMatmulPerToken 基础模板文档待补充...2.4 约束说明A、B矩阵的数据类型支持int8。C矩阵的数据类型支持fp16。A、B、C矩阵的数据格式支持NDRowMajor和ColumnMajor。3 编译指定用例bash scripts/build.sh 103_dynamic_optimized_quant_matmul_per_token_basic export LD_LIBRARY_PATH/path/to/catlass/output/shared_lib/lib/:$LD_LIBRARY_PATH cd output/bin # 可执行文件名 |矩阵m轴|n轴|k轴|LayoutA|LayoutB|Device ID # 0 is RowMajor, 1 is ColumnMajor ./103_dynamic_optimized_quant_matmul_per_token_basic 256 512 1024 0 1 0执行结果如下说明精度比对成功。Compare success.如果需要进行批量性能测试请注释掉精度比较代码由于精度比较使用CPU计算golden耗时较长。当前样例输出数据类型为fp16如需修改为bf16请进行以下代码修改后重新编译执行在examples/103_dynamic_optimized_quant_matmul_per_token_basic/include/do_tiling_b8.h中将所有DoTilingB8LayoutXX函数中使用的fp16_t替换为bfloat16。在examples/103_dynamic_optimized_quant_matmul_per_token_basic/dynamic_optimized_quant_matmul_per_token_basic.cpp中搜索fp16_t替换为bfloat16。在examples/103_dynamic_optimized_quant_matmul_per_token_basic/impl/scripts/per_token_matmul_template.py中将element_c由half替换为bfloat16_t。【免费下载链接】catlass本项目是CANN的算子模板库提供NPU上高性能矩阵乘及其相关融合类算子模板样例。项目地址: https://gitcode.com/cann/catlass创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考