文件最后提交记录最后更新时间
泛化工程版 quant_mm w8a8 pertoken + perchannel Co-authored-by: c00943476<chenlyucheng@huawei.com> # message auto-generated for no-merge-commit merge: !462 merge master into master 泛化工程版 quant_mm w8a8 pertoken + perchannel Created-by: oscillated Commit-by: c00943476 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 实现泛化工程版 quant_mm w8a8 pertoken + perchannel int8输入/fp16输出 108例的transA、transB全量精度测试(共432例)通过 ![108例精度测试_新.png](https://raw.gitcode.com/user-images/assets/7631999/f6950563-4c4d-490f-b58c-5730b64e9885/ScreenShot_20260305141928.PNG 'ScreenShot_20260305141928.PNG') ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!4622 个月前
代码清理 Co-authored-by: yuantao<taoyuan18@huawei.com> # message auto-generated for no-merge-commit merge: !520 merge common into master 代码清理 Created-by: yuantao_ Commit-by: yuantao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 函数增加static 位移运算符采用无符号参数 解决自包含问题 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码更新 See merge request: cann/catlass!5202 个月前
泛化工程版 quant_mm w8a8 pertoken + perchannel Co-authored-by: c00943476<chenlyucheng@huawei.com> # message auto-generated for no-merge-commit merge: !462 merge master into master 泛化工程版 quant_mm w8a8 pertoken + perchannel Created-by: oscillated Commit-by: c00943476 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 实现泛化工程版 quant_mm w8a8 pertoken + perchannel int8输入/fp16输出 108例的transA、transB全量精度测试(共432例)通过 ![108例精度测试_新.png](https://raw.gitcode.com/user-images/assets/7631999/f6950563-4c4d-490f-b58c-5730b64e9885/ScreenShot_20260305141928.PNG 'ScreenShot_20260305141928.PNG') ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!4622 个月前
[bugfix]文档低错整改以及images目录更新为figures Co-authored-by: sunhao_hw<sunhao203@huawei.com> # message auto-generated for no-merge-commit merge: !517 merge docs into master [bugfix]文档低错整改以及images目录更新为figures Created-by: sunhao_hw Commit-by: sunhao_hw Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 按照开源规范,将docs/images目录更名为docs/figures目录。并进行低错整改 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!5172 个月前
代码风格清理 Co-authored-by: yuantao<taoyuan18@huawei.com> # message auto-generated for no-merge-commit merge: !515 merge common into master 代码风格清理 Created-by: yuantao_ Commit-by: yuantao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> - 函数入口都用static - 头文件保证直接引用 - 条件语句的条件保证为bool - 补充extern "C" 标志 - 删除没有用到的函数 - 删除没有用到的注释 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!5152 个月前
README.md

DynamicOptimizedQuantMatmulPerTokenBasic Example Readme

1 背景

基于泛化性要求,本样例在样例102之外,新增了处理量化Matmul的泛化工程实现,本样例目前支持PerToken-PerChannel量化Matmul基础模板。

量化被广泛应用于现代高性能计算的深度学习模型中,特别是在推理过程中。通过量化,模型可以在硬件上更高效地运行,减少计算资源的消耗和加速推理过程,同时降低模型的存储需求。

根据对算子的不同输入Tensor采用不同的量化计算级别,可将目前的量化分为不同的量化模式。目前支持的量化计算模式包括: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, )。

一般左矩阵代表激活activation(A)、右矩阵代表权重weight(W),本样例目前支持左右矩阵输入数据类型为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_PATH

2.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.h

2.2 模板文档

模板名称 说明
PerTokenBasicMatmul PerToken 基础模板(文档待补充...)

2.3 约束说明

  • A、B矩阵的数据类型支持int8。
  • C矩阵的数据类型支持fp16。
  • A、B、C矩阵的数据格式支持ND(RowMajor和ColumnMajor)。

使用示例

  • 获取代码之后编译相应的算子可执行文件,可参考quickstart
  • 执行算子

编译指定用例

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_chalf替换为bfloat16_t