matmul反量化与叠加偏置
产品支持情况
硬件型号 |
是否支持 |
特殊说明 |
---|---|---|
|
√ |
- |
|
√ |
- |
|
√ |
|
|
√ |
|
|
√ |
不支持输入输出tensor数据类型为bf16的场景。 |
功能说明
矩阵乘matmul加反量化处理,通过hasBias参数控制是否叠加偏置。
计算公式
矩阵乘输入两个张量A(x)和B(weight),反量化步长为deqScale,输出张量为C,dequant为反量化处理函数:
叠加偏置的场景下,偏置矩阵为bias:
参数配置
成员名称 |
取值范围 |
特殊说明 |
---|---|---|
transposeA |
false/true |
取值为true时,不支持部分场景,详见规格说明。 |
transposeB |
false/true |
受硬件约束。 |
hasBias |
false/true |
受硬件约束。 |
outDataType |
ACL_FLOAT16/ACL_BF16 |
受硬件约束。该参数对应输出tensor的数据类型。 |
enAccum |
false |
- |
matmulType |
MATMUL_UNDEFINED |
- |
quantMode |
QUANT_UNDEFINED/PER_CHANNEL |
- |
输入
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
x |
[m, k]/[batch, m, k] |
int8 |
ND |
矩阵乘的A矩阵。 |
weight |
[k, n]/[batch, k, n]/[1, n / 16, k, 16]/[batch, n / 16, k, 16] |
int8 |
ND/NZ |
矩阵乘的B矩阵,权重。 |
bias |
[1, n]/[n]/[batch, n] |
int32 |
ND |
叠加的偏置矩阵。当hasBias取值为true时输入。 |
deqScale |
[1, n]/[n]/[batch, n] |
int64/uint64/float |
ND |
反量化步长。 |
输出
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
output |
[m, n]/[batch, m, n] |
float16/bf16 |
ND |
矩阵乘反量化计算结果。 |
规格说明
由于输入输出的排列组合约束较复杂,下表列举了所有输入输出属性的组合,表格中没有的组合即不支持:

Atlas 推理系列产品 不支持组合7-15。Atlas A2 训练系列产品 /Atlas 800I A2 推理产品 和Atlas A3 推理系列产品 /Atlas A3 训练系列产品 不支持组合10-15。- transposeA取值为true时,不支持组合2、5、8、11、14。
- 当weight维度为4维时,若“transposeB”为false,n为32的整数倍,k为16的整数倍;若“transposeB”为true,k为32的整数倍,n为16的整数倍。
Atlas 训练系列产品 不支持组合1-9。
OP使用与典型场景
OP使用时,可参考算子使用指导中的使用流程部分,其中,单算子构造Operation参数的构造方法参考以下参数构造部分。
// 参数构造 atb::infer::LinearParam param; param.transposeA = false; param.transposeB = false; param.hasBias = true; param.outDataType = ACL_FLOAT16; param.enAccum = false; param.matmulType = MATMUL_UNDEFINED; param.quantMode = PER_CHANNEL;
# 计算示例 >>> x tensor([[1, 2], [3, 4]]) >>> weight tensor([[1, 2, 3], [4, 5, 6]]) >>> bias tensor([1, 2, 3]) >>> deqScale tensor([1, 2, 3]) >>> output tensor([[10, 28, 54], [20, 56, 108]]) # 10 = (1 * 1 + 2 * 4 + 1) * 1 # 28 = (1 * 2 + 2 * 5 + 2) * 2 # 54 = (1 * 3 + 2 * 6 + 3) * 3 # 20 = (3 * 1 + 4 * 4 + 1) * 1 # 56 = (3 * 2 + 4 * 5 + 2) * 2 # 108 = (3 * 3 + 4 * 6 + 3) * 3