LinearOperation

功能

将A、B两个矩阵进行矩阵乘运算,同时可以选择对矩阵乘的运算结果添加偏置、InplaceAdd融合或反量化操作。

算子本质上是接收x和weight两个输入tensor作为A矩阵和B矩阵进行矩阵乘运算,可通过参数“transposeA”“transposeB”控制做矩阵乘前是否需要对A矩阵和B矩阵进行行列转置,根据参数转置后的A矩阵和B矩阵需满足矩阵乘维度关系,例如,当“transposeA”为false,“transposeB”为true时,x和weight的shape可以分别为[m, k]和[n, k]。

该算子支持浮点和量化场景,当参数“outDataType”值为ACL_DT_UNDEFINED时为浮点场景,否则为量化场景。

图1 LinearOperation

计算公式

定义

struct LinearParam {
    bool transposeA = false;                   
    bool transposeB = true;                   
    bool hasBias = true;                       
    aclDataType outDataType = ACL_DT_UNDEFINED; 
    bool enAccum = false;                      
};

参数列表

成员名称

类型

默认值

描述

transposeA

bool

false

是否转置A矩阵, 默认值为false,不转置。

在量化场景下,非 Atlas 800I A2 推理产品 / Atlas A2 训练系列产品 仅支持配置为false。

transposeB

bool

true

是否转置B矩阵, 默认值为true,转置。

在量化场景下,非 Atlas 800I A2 推理产品 / Atlas A2 训练系列产品 仅支持配置为true。

hasBias

bool

true

是否叠加偏置,默认值为true,叠加偏置。

在量化场景下,非 Atlas 800I A2 推理产品 / Atlas A2 训练系列产品 仅支持配置为true。

“enAccum”为true时,仅支持配置为false。

outDataType

aclDataType

ACL_DT_UNDEFINED

输出数据类型,默认值为ACL_DT_UNDEFINED。

  • 浮点场景下:支持配置为ACL_DT_UNDEFINED。
  • 量化场景下: Atlas 800I A2 推理产品 / Atlas A2 训练系列产品 支持配置为ACL_FLOAT16/ACL_BF16,否则,仅支持配置为ACL_FLOAT16。

enAccum

bool

false

是否使能累加,默认值为false,不使能累加。

仅在 Atlas 800I A2 推理产品 / Atlas A2 训练系列产品 支持配置为true。

“hasBias”为true时,仅支持配置为false。

量化场景下,仅支持配置为false。

输入输出