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时为浮点场景,否则为量化场景。

计算公式
定义
struct LinearParam { bool transposeA = false; bool transposeB = true; bool hasBias = true; aclDataType outDataType = ACL_DT_UNDEFINED; bool enAccum = false; };
参数列表
成员名称 |
类型 |
默认值 |
描述 |
---|---|---|---|
transposeA |
bool |
false |
是否转置A矩阵, 默认值为false,不转置。 在量化场景下,非 |
transposeB |
bool |
true |
是否转置B矩阵, 默认值为true,转置。 在量化场景下,非 |
hasBias |
bool |
true |
是否叠加偏置,默认值为true,叠加偏置。 在量化场景下,非 “enAccum”为true时,仅支持配置为false。 |
outDataType |
aclDataType |
ACL_DT_UNDEFINED |
输出数据类型,默认值为ACL_DT_UNDEFINED。
|
enAccum |
bool |
false |
是否使能累加,默认值为false,不使能累加。 仅在 “hasBias”为true时,仅支持配置为false。 量化场景下,仅支持配置为false。 |
输入输出
- 浮点场景
- 场景说明
当参数outDataType值为ACL_DT_UNDEFINED,参数enAccum值为false时,触发该场景,该场景下输入输出均为浮点类型。
- 输入
参数
维度
数据类型
格式
描述
x
[m, k]/[batch, m, k]
float16/bf16
ND
输入tensor。矩阵乘的A矩阵。
weight
[k, n]/[batch, k, n]
float16/bf16
ND/NZ
输入tensor。矩阵乘的B矩阵,权重。
- 数据类型与x的数据类型相同。
- 数据格式为NZ时,可扩展支持4维shape,对应支持的shape为[batch, n / 16, k, 16],这种情况下,n和k的值均为16的整数倍。
- shape为3维时,x的shape必须为3维。
- 当transposeA为true时,batch值与x的batch值相同。
bias
[1, n]/[n]/[batch, n]
float16/bf16/float
ND
输入tensor。叠加的偏置矩阵。
- hasBias为true时输入。
- 当数据类型为float16/bf16时,数据类型与x的数据类型相同;当数据类型为float时,触发matmul+add融合场景,仅
Atlas 800I A2 推理产品 /Atlas A2 训练系列产品 支持该场景,weight数据格式必须为ND。 - batch值与weight的batch值相同。
- 输出
参数
维度
数据类型
格式
描述
output
[m, n]/[batch, m, n]
float16/bf16
ND
输出tensor。维度数与x一致。数据类型与x的数据类型相同。
- 规格约束
- x/weight为2维时,对应的batch值为1;bias为1维时,对应的batch为1。
- 当参数transposeB为true时,weight支持对应的4维shape[batch, k / 16, n, 16]。
- 场景说明
- matmul+inplaceAdd融合算子场景
- 场景说明
当参数“outDataType”值为ACL_DT_UNDEFINED,参数“enAccum”值为true时,触发该场景。
该场景不支持
Atlas 推理系列产品 推理产品。 - 输入
参数
维度
数据类型
格式
描述
x
[m, k]/[batch, m, k]
float16/bf16
ND
输入tensor。矩阵乘的A矩阵。
weight
[k, n]/[batch, k, n]
float16/bf16
ND
输入tensor。矩阵乘的B矩阵,权重。
- 数据类型与x的数据类型相同。
- shape为3维时,x的shape必须为3维。
- 当transposeA为true时,batch值与x的batch值相同。
accum
[m, n]/[batch, m, n]
float
ND
输入tensor。累加矩阵,与matmul的结果做原地加。维度数与x的维度数相同。batch值与x的batch值相同。
- 输出
参数
维度
数据类型
格式
描述
output
[m, n]/[batch, m, n]
float
ND
输出tensor。与accum为同一个Tensor,即二者数据类型、数据格式和地址等所有属性均相同。
- 规格约束
x/weight/accum为2维时,对应的batch值为1。
- 场景说明
- 反量化场景
- 场景说明
当参数“outDataType”值不为ACL_DT_UNDEFINED时,触发该场景。
- 输入
参数
维度
数据类型
格式
描述
x
[m, k]/[batch, m, k]
int8
ND
矩阵乘的A矩阵。
weight
[k, n]/[batch, k, n]
int8
ND/NZ
矩阵乘的B矩阵,权重。
Atlas 800I A2 推理产品 /Atlas A2 训练系列产品 仅支持数据格式为ND。- 数据格式为NZ时,可扩展支持4维shape,对应的shape为[batch, n / 32, k, 32],这种情况下,k为16的整数倍,n为32的整数倍。
- shape为3维时,x的shape为3维。
- 当transposeA为true时,batch值与x的batch值相同。
bias
[1, n]/[n]/[batch, n]
int32
ND
叠加的偏置矩阵。hasBias为true时输入。batch值与weight的batch值相同。
deqScale
[1, n]/[n]/[batch, n]
int64/uint64/float
ND
反量化的scale。
- batch值与weight的batch值相同。
- 当output数据类型为float16时,数据类型为int64/uint64;当output数据类型为bf16时,数据类型为float。
- 输出
参数
维度
数据类型
格式
描述
output
[m, n]/[batch, m, n]
float16/bf16
ND
数据类型与参数outDataType值相同。维度数与x的维度数相同。
- 规格约束
- x/weight为2维时,对应的batch值为1;bias/deqScale为1维时,对应的batch为1。
- 当参数transposeB为true时,weight支持对应的4维shape[batch, k / 32, n, 32],这种情况下,k为32的整数倍,n为16的整数倍。
- 场景说明