参数列表
成员名称 |
类型 |
默认值 |
取值范围 |
描述 |
---|---|---|---|---|
transposeA |
bool |
false |
false/true |
是否需要对A矩阵进行行列转置。取值为true时进行转置,否则不转置。 |
transposeB |
bool |
true |
false/true |
是否需要对B矩阵进行行列转置。取值为true时进行转置,否则不转置。 |
hasBias |
bool |
true |
false/true |
是否叠加偏置。取值为true时叠加偏置,否则不叠加。 |
outDataType |
aclDataType |
ACL_DT_UNDEFINED |
ACL_DT_UNDEFINED/ACL_FLOAT16/ACL_BF16 |
指定输出tensor的数据类型。默认值表示根据输入tensors自动推导输出tensors数据类型。 |
enAccum |
bool |
false |
false/true |
是否使能累加,即matmul+inplace add融合场景。 |
matmulType |
MatmulType |
MATMUL_UNDEFINED |
MATMUL_UNDEFINED/MATMUL_EIN_SUM |
矩阵乘功能类型。
|
quantMode |
QuantMode |
QUANT_UNDEFINED |
QUANT_UNDEFINED PER_CHANNEL PER_TOKEN |
Linear的量化类型。
|
rsv[21] |
uint8_t |
{0} |
[0] |
预留参数。 |
详细说明
transposeA和transposeB
- 根据transposeA和transposeB的配置,转置后的A矩阵和B矩阵shape需满足矩阵乘维度关系;
- transposeA和transposeB的取值在部分功能中存在约束;
- transposeA和transposeB可用于提升特殊场景下算子性能,收益根据shape动态变化。以常规矩阵乘为例,假设A矩阵和B矩阵的shape分别为[m, k]和[k, n]:
- 当m为256的整数倍且k不为256的整数倍时,配置transposeA为true,将A矩阵进行行列转置,可提升性能,此时A矩阵shape为[k, m];
- 当k为256的整数倍且n不为256的整数倍时,配置transposeB为true,将B矩阵进行行列转置,可提升性能,此时B矩阵shape为[n, k]。
- 后文进行功能描述时,默认为transposeA与transposeB取值均为false的情况,维度对应关系如下表:
A矩阵原维度
transposeA为true时A矩阵维度
[m, k]
[k, m]
[batch, m, k]
[batch, k, m]
B矩阵原维度
transposeB为true时B矩阵维度
[k, n]
[n, k]
[batch, k, n]
[batch, n, k]
[1, n / 16, k, 16]
[1, k / 16, n, 16]
[batch, n / 16, k, 16]
[batch, k / 16, n, 16]
[1, n / 32, k, 32]
[1, k / 32, n, 32]
[batch, n / 32, k, 32]
[batch, k / 32, n, 32]
hasBias
- 当enAccum配置为true时,hasBias仅支持配置为false。
- hasBias的取值在部分功能中存在约束。
outDataType
在反量化场景中,配置为输出tensor的数据类型,目前支持ACL_FLOAT16/ACL_BF16;否则,在其他场景中,配置为默认值ACL_DT_UNDEFINED。
enAccum
- 当hasBias配置为true时,enAccum仅支持配置为false。
- 该参数配置为true时,触发matmul + inplaceAdd融合功能,该功能具体设计与约束参考matmul与inplaceAdd融合。
matmulType
- 在爱因斯坦乘场景中,配置为MATMUL_EIN_SUM,在其他场景中配置为MATMUL_UNDEFINED。
- 当matmulType配置为MATMUL_EIN_SUM时
- transposeA仅支持配置为false。
- hasBias仅支持配置为false。
- enAccum仅支持配置为false。
- outDataType仅支持配置为默认值ACL_DT_UNDEFINED。
quantMode
- 当outDataType为ACL_DT_UNDEFINED时为非量化场景,仅支持输入值为QUANT_UNDEFINED。
- 当outDataType为ACL_FLOAT16或ACL_BF16时为量化场景:
- 输入值为QUANT_UNDEFINED和PER_CHANNEL时为per_channel量化场景,当hasBias为true时,为非对称量化,当hasBias为false时,为对称量化。
- 输入值为PER_TOKEN时为per_token量化场景,此时仅支持hasBias为false的对称量化场景。