W4A8_Matmul Example Readme

代码组织

├── 32_w4a8_matmul
│   ├── CMakeLists.txt # CMake编译文件
│   ├── gen_data.py
│   ├── w4a8.cpp 
│   └── README.md

功能介绍

  • 提供了W4A8量化模式下的matmul实现
  • A矩阵int8类型,B矩阵int4类型,对B矩阵cast成int8后,矩阵乘法结果int32,通过per tensor量化为half类型输出

使用示例

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

  • 接下来,先执行gen_data.py,生成测试样例,测试用例需要从命令行输入, 执行该命令后会在当前路径下生成data目录,包含算子的输入数据和用于精度验证的golden数据。

  • 然后执行算子,这里要注意的是执行算子的输入shape和上面第一步生成数据的shape一致。

以下是一个完整的shell脚本示例(在样例目录./examples/32_w4a8_matmul下执行)

m=860
k=5712
n=4535
device=0

function build() {
    rm -rf ../../build
    rm -rf ../../output
    bash ../../scripts/build.sh 32_w4a8_matmul
}

function gen_data() {
    python3 gen_data.py $m $n $k
    echo "Data gen finished"
}

function run_kernel {
    echo 'Case: m=' $m ' k=' $k ' n=' $n
    cd ../../output/bin/
    ./32_w4a8_matmul $m $n $k $device
}

build
gen_data
run_kernel

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

Compare success.