matmul与inplaceAdd融合

功能概述

矩阵乘matmul与inplaceAdd融合,将矩阵乘结果累加到累加矩阵上,相较于算子拼接的方案,性能较优。

计算公式

矩阵乘输入两个张量A(x)和B(weight),累加张量为C(accum),同时也是输出张量:

硬件支持情况

硬件型号

支持情况

特殊说明

Atlas 200I/500 A2 推理产品

不支持

-

Atlas 推理系列产品

不支持

-

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

支持

-

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

支持

-

参数配置

成员名称

取值范围

特殊说明

transposeA

false/true

取值为true时,不支持部分场景,详见规格说明

当输入数据类型为float16时,不支持transposeA为true。

transposeB

false/true

-

hasBias

false

-

outDataType

ACL_DT_UNDEFINED

-

enAccum

true

-

matmulType

MATMUL_UNDEFINED

-

输入

参数

维度

数据类型

格式

描述

x

[m, k]/[batch, m, k]

float16/bf16

ND

矩阵乘的A矩阵。

weight

[k, n]/[batch, k, n]

float16/bf16

ND

矩阵乘的B矩阵,权重。

bias

[m, n]/[batch, m, n]

float

ND

累加矩阵。

输出

参数

维度

数据类型

格式

描述

output

[m, n]/[batch, m, n]

float

ND

累加矩阵,与accum为同一个Tensor,即计算结果原地写。

规格说明

由于输入输出的排列组合约束较复杂,下表列举了所有输入输出属性的组合,表格中没有的组合即不支持:

图1 输入输出属性排列组合

“transposeA”取值为true时,不支持组合2、5、8、11。

OP使用与典型场景

OP使用时,可参考算子使用指导中的使用流程部分,其中,单算子(OpsOperation)构造Operation参数的构造方法参考以下参数构造部分。

// 参数构造
atb::infer::LinearParam param;
param.transposeA = false;
param.transposeB = false;
param.hasBias = false;
param.outDataType = ACL_DT_UNDEFINED;
param.enAccum = true;
param.matmulType = MATMUL_UNDEFINED;
# 计算示例
>>> x
tensor([[1, 2],
        [3, 4]])
>>> weight
tensor([[1, 2, 3],
        [4, 5, 6]])
>>> accum
tensor([[1, 2, 3],
        [4, 5, 6])
>>> output
tensor([[10, 14, 18],
        [23, 31, 39]])
# 10 = 1 * 1 + 2 * 4 + 1
# 14 = 1 * 2 + 2 * 5 + 2
# 18 = 1 * 3 + 2 * 6 + 3
# 23 = 3 * 1 + 4 * 4 + 4
# 31 = 3 * 2 + 4 * 5 + 5
# 39 = 3 * 3 + 4 * 6 + 6

功能约束