矩阵乘输出的量化/反量化

功能介绍

对于特定输入输出数据类型,Matmul支持将计算结果从CO1搬出到Global Memory时,对输出C矩阵元素执行数据量化或反量化操作。

Matmul量化/反量化包含两种模式:同一系数的量化/反量化模式、向量的量化/反量化模式,开发者在算子Tiling侧调用SetDequantType接口设置量化或反量化模式,这两种模式的具体区别为:
  • 同一系数的量化/反量化模式(PER_TENSOR模式):整个C矩阵对应一个量化参数,量化参数的shape为[1]。开发者在算子Kernel侧调用接口SetQuantScalar设置量化参数。
  • 向量的量化/反量化模式(PER_CHANNEL模式):C矩阵的shape为[m, n],每个channel维度即C矩阵的每一列,对应一个量化参数,量化参数的shape为[n]。开发者在算子Kernel侧调用接口SetQuantVector设置量化参数。
表1 量化/反量化模式对应的接口配置

模式

Tiling侧接口

Kernel侧接口

同一系数的量化/反量化

SetDequantType(DequantType::SCALAR)

SetQuantScalar(gmScalar)

向量的量化/反量化

SetDequantType(DequantType::TENSOR)

SetQuantVector(gmTensor)

使用场景

需要对矩阵计算结果进行量化/反量化操作的场景,当前该场景下,Matmul输入输出矩阵支持的数据类型如下表所示。

表2 Matmul量化/反量化支持的数据类型

A矩阵

B矩阵

C矩阵

支持平台

half

half

int8_t

Atlas 350 加速卡

Atlas A3 训练系列产品 / Atlas A3 推理系列产品

Atlas A2 训练系列产品 / Atlas A2 推理系列产品

bfloat16_t

bfloat16_t

int8_t

Atlas 350 加速卡

Atlas A3 训练系列产品 / Atlas A3 推理系列产品

Atlas A2 训练系列产品 / Atlas A2 推理系列产品

int8_t

int8_t

half

Atlas 350 加速卡

Atlas A3 训练系列产品 / Atlas A3 推理系列产品

Atlas A2 训练系列产品 / Atlas A2 推理系列产品

int4b_t

int4b_t

half

Atlas A3 训练系列产品 / Atlas A3 推理系列产品

Atlas A2 训练系列产品 / Atlas A2 推理系列产品

int8_t

int8_t

int8_t

Atlas 350 加速卡

Atlas A3 训练系列产品 / Atlas A3 推理系列产品

Atlas A2 训练系列产品 / Atlas A2 推理系列产品

int8_t

int8_t

bfloat16_t

Atlas 350 加速卡

fp8_e4m3fn_t/fp8_e5m2_t

fp8_e4m3fn_t/fp8_e5m2_t

fp8_e4m3fn_t/half/bfloat16_t/float

Atlas 350 加速卡

hifloat8_t

hifloat8_t

hifloat8_t/half/bfloat16_t/float

Atlas 350 加速卡

注意:

输出为hifloat8_t时,采用Half to Away Round方式量化。

量化场景的输出为float类型时,该量化模式精度无法达到双万分之一,可以达到双千分之一。如果有双万分之一的精度要求,建议使用AscendDeQuant高阶API。

约束说明

调用示例

完整的算子样例请参考matmul_quant样例