常规matmul与叠加偏置
产品支持情况
| 
          硬件型号  | 
        
          是否支持  | 
        
          特殊说明  | 
       
|---|---|---|
| 
          | 
        
          √  | 
        
          -  | 
       
| 
          | 
        
          √  | 
        
          -  | 
       
| 
          | 
        
          x  | 
        
          -  | 
       
| 
          | 
        
          √  | 
        
          -  | 
       
| 
          | 
        
          √  | 
        
          不支持输入输出tensor数据类型为bf16的场景。  | 
       
功能说明
常规矩阵乘matmul的功能,且可通过hasBias参数控制是否叠加偏置。
计算公式
矩阵乘输入两个张量A(x)和B(weight),输出张量为C:

叠加偏置,偏置矩阵为bias:

参数配置
| 
          成员名称  | 
        
          取值范围  | 
        
          特殊说明  | 
       
|---|---|---|
| 
          transposeA  | 
        
          false/true  | 
        
          取值为true时,不支持部分场景,详见规格说明。float只支持false。  | 
       
| 
          transposeB  | 
        
          false/true  | 
        
          float只支持true。  | 
       
| 
          hasBias  | 
        
          false/true  | 
        
          float只支持false。  | 
       
| 
          outDataType  | 
        
          ACL_DT_UNDEFINED  | 
        
          -  | 
       
| 
          enAccum  | 
        
          false  | 
        
          -  | 
       
| 
          matmulType  | 
        
          MATMUL_UNDEFINED  | 
        
          -  | 
       
| 
          quantMode  | 
        
          QUANT_UNDEFINED  | 
        
          -  | 
       
输入
| 
          参数  | 
        
          维度  | 
        
          数据类型  | 
        
          格式  | 
        
          描述  | 
       
|---|---|---|---|---|
| 
          x  | 
        
          [m, k]/[batch, m, k]  | 
        
          float16/bf16/float  | 
        
          ND  | 
        
          矩阵乘的A矩阵。float只支持维度为[m, k]。  | 
       
| 
          weight  | 
        
          [k, n]/[batch, k, n]/[1, n / 16, k, 16]/[batch, n / 16, k, 16]  | 
        
          float16/bf16/float  | 
        
          ND/NZ  | 
        
          矩阵乘的B矩阵,权重。float只支持维度[k, n],ND格式。  | 
       
| 
          bias  | 
        
          [1, n]/[n]/[batch, n]  | 
        
          float16/bf16/float  | 
        
          ND  | 
        
          叠加的偏置矩阵。当hasBias取值为true时输入。  | 
       
输出
| 
          参数  | 
        
          维度  | 
        
          数据类型  | 
        
          格式  | 
        
          描述  | 
       
|---|---|---|---|---|
| 
          output  | 
        
          [m, n]/[batch, m, n]  | 
        
          float16/bf16/float  | 
        
          ND  | 
        
          矩阵乘计算结果。float只支持维度为[m, n]。  | 
       
规格说明
由于输入输出的排列组合约束较复杂,下图列举了所有输入输出属性的组合,图中没有的组合即不支持:
    Atlas 推理系列产品 不支持组合7-13。- “transposeA”取值为true时,不支持组合2、5、8、11。
 - 所有输入输出tensor的数据类型均相同。
 - 当weight维度为4维时,k和n的值均为16的整数倍。
 - 组合13仅保证如下shape的性能:m=1~256,k=7168, n=256,其他shape功能支持,性能可能会有下降。
 
OP使用与典型场景
OP使用时,可参考算子使用指导(C++ API)中的使用流程部分,其中,单算子构造Operation参数的构造方法参考下列各场景的参数构造部分。
- 场景一
      
// 参数构造 atb::infer::LinearParam param; param.transposeA = false; param.transposeB = false; param.hasBias = false; param.outDataType = ACL_DT_UNDEFINED; param.enAccum = false; param.matmulType = MATMUL_UNDEFINED; param.quantMode = QUANT_UNDEFINED;
# 计算示例 >>> x tensor([[1, 2], [3, 4]]) >>> weight tensor([[1, 2, 3], [4, 5, 6]]) >>> output tensor([[9, 12, 15], [19, 26, 33]]) # 9 = 1 * 1 + 2 * 4 # 12 = 1 * 2 + 2 * 5 # 15 = 1 * 3 + 2 * 6 # 19 = 3 * 1 + 4 * 4 # 26 = 3 * 2 + 4 * 5 # 33 = 3 * 3 + 4 * 6 - 场景二
      
// 参数构造 atb::infer::LinearParam param; param.transposeA = true; param.transposeB = true; param.hasBias = false; param.outDataType = ACL_DT_UNDEFINED; param.enAccum = false; param.matmulType = MATMUL_UNDEFINED; param.quantMode = QUANT_UNDEFINED;
# 根据行列转置情况,该示例和前一示例计算相同。 >>> x tensor([[1, 3], [2, 4]]) >>> weight tensor([[1, 4], [2, 5], [3, 6]]) >>> output tensor([[9, 12, 15], [19, 26, 33]]) - 场景三
      
// 参数构造 atb::infer::LinearParam param; param.transposeA = false; param.transposeB = false; param.hasBias = true; param.outDataType = ACL_DT_UNDEFINED; param.enAccum = false; param.matmulType = MATMUL_UNDEFINED; param.quantMode = QUANT_UNDEFINED;
# 计算示例 >>> x tensor([[1, 2], [3, 4]]) >>> weight tensor([[1, 2, 3], [4, 5, 6]]) >>> bias tensor([1, 2, 3]) >>> output tensor([[10, 14, 18], [20, 28, 36]]) # 10 = 1 * 1 + 2 * 4 + 1 # 14 = 1 * 2 + 2 * 5 + 2 # 18 = 1 * 3 + 2 * 6 + 3 # 20 = 3 * 1 + 4 * 4 + 1 # 28 = 3 * 2 + 4 * 5 + 2 # 36 = 3 * 3 + 4 * 6 + 3 
功能约束
- “transposeA”为true时不支持部分场景。
 - “outDataType”为ACL_DT_UNDEFINED。
 - “enAccum”为false。