文件最后提交记录最后更新时间
切换最低兼容版本为CANN 8.5.0;使用AscendC CMake构建系统编译 Co-authored-by: yuantao<taoyuan18@huawei.com> # message auto-generated for no-merge-commit merge: !461 merge asc into master 切换最低兼容版本为CANN 8.5.0;使用AscendC CMake构建系统编译 Created-by: yuantao_ Commit-by: yuantao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 1. 适配asc+CMake编译系统。 2. 对于适配的调试特性(DumpTensor),在新编译系统引入后不再需要,去除相关代码,相关编译选项添加Warning。 3. 更新对应相关文档。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue --> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!4611 个月前
文档新增中英文目录、低错整改,及代码实践类文档更新 Co-authored-by: sunhao_hw<sunhao203@huawei.com> # message auto-generated for no-merge-commit merge: !555 merge docs into master 文档新增中英文目录、低错整改,及代码实践类文档更新 Created-by: sunhao_hw Commit-by: sunhao_hw Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> - docs下新增zh和en目录,原始文档迁移到zh下 - 仓内文档的批量低错整改 - docs/zh/01_Practice下补充完善部分文档 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!5551 个月前
算子命名更新 38_w4a4_matmul_per_token_per_channel_dequant Co-authored-by: init__zhb__<zhanghaobo6@huawei.com> # message auto-generated for no-merge-commit merge: !419 merge br_w4a4_opname_refresh into master 算子命名更新 38_w4a4_matmul_per_token_per_channel_dequant Created-by: init__zhb__ Commit-by: init__zhb__ Merged-by: cann-robot Description: ## 描述 更新算子命名 ## 关联的Issue ## 原因 ## 测试 ## 文档更新 examples/38_w4a4_matmul_per_token_per_channel_dequant/README.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!4194 个月前
代码风格清理 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

W4A4MatmulPerTokenPerChannelDequant Example Readme

功能说明

  • 算子功能:完成Int4(AscendC::int4b_t)类型的矩阵乘计算,包含per-token和per-channel级别的反量化系数

  • 计算公式

out=perTokenScale×x@weight×perChannelScale out = perTokenScale \times x @ weight \times perChannelScale

其中x是矩阵乘的左矩阵(形如(m, k)),weight是右矩阵(形如(k,n)),perChannelScale是一个形如(n)的一维向量,perTokenScale是一个形如(m)的一维向量。

参数说明

以下是本样例的运行参数:

参数名 描述 约束
m 矩阵乘中左矩阵A的行(int4格式) -
n 矩阵乘中右矩阵B的列 (int4格式) 须为偶数
k 矩阵乘中左矩阵A的列
(也即右矩阵的行数)
须为偶数
deviceId 使用的NPU卡ID(默认0) 在设备NPU有效范围内
  • AscendC::int4b_t底层处理方式是,在1Byte内表示两个AscendC::int4b_t类型数据,如以1Byte为基本类型视图,则左矩阵形为(m, k/2),右矩阵形为(k, n/2)
  • 更多约束详见约束说明

样例涉及的关键模板参数如下:

模板参数 说明 有效范围
ElementA 左矩阵的数据类型 AscendC::int4b_t
ElementB 右矩阵的数据类型 AscendC::int4b_t
ElementD 结果矩阵的数据类型 bfloat16_t
LayoutA 左矩阵的排布方式 layout::RowMajor
LayoutB 右矩阵的排布方式 layout::zN| layout::nZ
LayoutD 结果矩阵的排布方式 layout::RowMajor

约束说明

  • n, k必须为偶数
  • LayoutBlayout::zN时:
    • n需要能够整除64
    • k需要能够整除16
  • LayoutBlayout::nZ时:
    • n需要能够整除16
    • k需要能够整除64

代码组织

├── 38_w4a4_matmul_per_token_per_channel_dequant
│   ├── CMakeLists.txt # CMake编译文件
│   ├── gen_data.py
│   ├── w4a4_matmul_per_token_per_channel_dequant.cpp
│   └── README.md

功能介绍

  • 提供了W4A4量化模式下矩阵乘实现,使用per channel和per token量化

使用示例

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

  • 执行gen_data.py,生成测试样例

  • 执行算子

以下是一个完整的shell脚本示例

# 编译算子
bash scripts/build.sh 38_w4a4_matmul_per_token_per_channel_dequant

# 生成测试数据
cd examples/38_w4a4_matmul_per_token_per_channel_dequant/
# python gen_data.py <M> <N> <K>
python gen_data.py 256 512 1024
cd ../..

# 进行测试
cd output/bin/
./38_w4a4_matmul_per_token_per_channel_dequant 256 512 1024 0

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

Compare success.

当前样例右矩阵采用NZ排布(即LayoutBlayout::zN,详见layout.hpp),如需修改为layout::nZ格式,请对example/38_w4a4_matmul/w4a4_matmul.cpp做调整:

- using LayoutB = layout::zN;
+ using LayoutB = layout::nZ;

并在生成测试例时补充transB参数置1(默认为0),完整测试过程如下:

# 算子编译
bash scripts/build.sh 38_w4a4_matmul_per_token_per_channel_dequant --clean 

# 生成测试数据
cd examples/38_w4a4_matmul_per_token_per_channel_dequant/
# python gen_data.py <M> <N> <K> <transB>
python gen_data.py 256 512 1024 1

cd ../..

# 进行测试
cd output/bin/
./38_w4a4_matmul_per_token_per_channel_dequant 256 512 1024 0