将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矩阵,权重。
|
bias |
[1, n]/[n]/[batch, n] |
float16/bf16/float |
ND |
输入tensor。叠加的偏置矩阵。
|
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
output |
[m, n]/[batch, m, n] |
float16/bf16 |
ND |
输出tensor。维度数与x一致。数据类型与x的数据类型相同。 |
当参数“outDataType”值为ACL_DT_UNDEFINED,参数“enAccum”值为true时,触发该场景。
该场景不支持
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
x |
[m, k]/[batch, m, k] |
float16/bf16 |
ND |
输入tensor。矩阵乘的A矩阵。 |
weight |
[k, n]/[batch, k, n] |
float16/bf16 |
ND |
输入tensor。矩阵乘的B矩阵,权重。
|
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矩阵,权重。
|
bias |
[1, n]/[n]/[batch, n] |
int32 |
ND |
叠加的偏置矩阵。hasBias为true时输入。batch值与weight的batch值相同。 |
deqScale |
[1, n]/[n]/[batch, n] |
int64/uint64/float |
ND |
反量化的scale。
|
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
output |
[m, n]/[batch, m, n] |
float16/bf16 |
ND |
数据类型与参数outDataType值相同。维度数与x的维度数相同。 |