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的整数倍。
 
 
- 场景说明
        






