文件最后提交记录最后更新时间
2 个月前
4 个月前
2 个月前
1 个月前
1 个月前
2 个月前
8 个月前
2 个月前
README

QuantBatchMatmulV4

产品支持情况

产品 是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品
Atlas 200I/500 A2 推理产品 ×
Atlas 推理系列产品 x
Atlas 训练系列产品 x
Kirin X90 处理器系列产品
Kirin 9030 处理器系列产品

功能说明

  • 算子功能:完成量化的矩阵乘计算。

  • 计算公式:

    • Atlas A2 训练系列产品/Atlas A2 推理系列产品、Atlas A3 训练系列产品/Atlas A3 推理系列产品:

      • x1为INT8,x2为INT32,x1Scale为FLOAT32,x2Scale为UINT64,yOffset为FLOAT32,out为FLOAT16/BFLOAT16:

        out=((x1@(x2∗x2Scale))+yoffset)∗x1Scaleout = ((x1 @ (x2*x2Scale)) + yoffset) * x1Scale

      • 无x1Scale无bias:

        out=x1@x2∗x2Scale+x2Offsetout = x1@x2 * x2Scale + x2Offset

      • bias INT32:

        out=(x1@x2+bias)∗x2Scale+x2Offsetout = (x1@x2 + bias) * x2Scale + x2Offset

      • bias BFLOAT16/FLOAT32(此场景无offset):

        out=x1@x2∗x2Scale+biasout = x1@x2 * x2Scale + bias

      • x1Scale无bias:

        out=x1@x2∗x2Scale∗x1Scaleout = x1@x2 * x2Scale * x1Scale

      • x1Scale, bias INT32(此场景无offset):

        out=(x1@x2+bias)∗x2Scale∗x1Scaleout = (x1@x2 + bias) * x2Scale * x1Scale

      • x1Scale, bias BFLOAT16/FLOAT16/FLOAT32(此场景无offset):

        out=x1@x2∗scale∗x1Scale+biasout = x1@x2 * scale * x1Scale + bias

      • x1,x2为INT8,x1Scale, x2Scale为FLOAT32,bias为FLOAT32,out为FLOAT16/BFLOAT16 (pertoken-pergroup量化):

        out=(x1@x2)∗x1Scale∗x2Scale+biasout = (x1 @ x2) * x1Scale * x2Scale + bias

      • x1,x2为INT4,x1Scale, x2Scale为FLOAT32,x2Offset为FLOAT16, out为FLOAT16/BFLOAT16 (pertoken-pergroup非对称量化):

        out=x1Scale∗x2Scale@(x1@x2−x1@x2Offset)out = x1Scale * x2Scale @ (x1 @ x2 - x1 @ x2Offset)

    • Ascend 950PR/Ascend 950DT:

      • x1,x2为FLOAT8_E4M3FN/FLOAT8_E5M2/HIFLOAT8,无x1Scale,x2Scale为INT64/UINT64,无x2Offset,可选参数bias的dtype为FLOAT32,out为FLOAT16/BFLOAT16/FLOAT32:

        out=(x1@x2+bias)∗x2Scaleout = (x1@x2 + bias) * x2Scale

      • mx量化模式中, x1,x2为FLOAT4_E2M1/FLOAT8_E4M3FN/FLOAT8_E5M2,x1Scale为FLOAT8_E8M0,x2Scale为FLOAT8_E8M0,无x2Offset,可选参数bias的dtype为FLOAT32:

        out=(x1∗x1Scale)@(x2∗x2Scale)+biasout = (x1* x1Scale)@(x2* x2Scale) + bias

      • x1,x2为FLOAT8_E4M3FN/FLOAT8_E5M2/HIFLOAT8,x1Scale为FLOAT32,x2Scale为FLOAT32,无x2Offset,可选参数bias的dtype为FLOAT32:

        out=(x1@x2+bias)∗x2Scale∗x1Scaleout = (x1@x2 + bias) * x2Scale * x1Scale

      • 在G-B && B-B量化模式中, x1,x2为FLOAT8_E4M3FN/FLOAT8_E5M2/HIFLOAT8,x1Scale为FLOAT32,x2Scale为FLOAT32,无x2Offset,无bias,当x1为(a0, a1),x2为(b0, b1)时,x1Scale为(ceil(a0 / 128), ceil(a1 / 128))或(a0, ceil(a1 / 128)),x2Scale为(ceil(b0 / 128), ceil(b1 / 128)):

        outpq=∑0⌊kblockSize⌋(x1pr@x2rq∗(x1Scalepr∗x2Scalerq))out_{pq} = \sum_{0}^{\left \lfloor \frac{k}{blockSize} \right \rfloor} (x1_{pr}@x2_{rq}*(x1Scale_{pr}*x2Scale_{rq}))

      • x1为FLOAT8_E4M3FN,x2为FLOAT4_E2M1,x1Scale为FLOAT8_E8M0,x2Scale为FLOAT8_E8M0,无x1Offset,无x2Offset,可选参数bias的dtype为BFLOAT16/FLOAT16,out为BFLOAT16/FLOAT16:

        out=(x1∗x1Scale)@(x2∗x2Scale)+biasout = (x1 * x1Scale)@(x2 * x2Scale) + bias

      • x1为FLOAT8_E4M3FN,x2为FLOAT4_E2M1,无x1Scale,x2Scale为BFLOAT16/FLOAT16,无x1Offset,无x2Offset,无bias, yScale为UINT64,out为BFLOAT16/FLOAT16:

        out=(x1@(x2∗x2Scale))∗yScaleout = (x1@(x2 * x2Scale)) * yScale

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
x1 输入 矩阵乘运算中的左矩阵。 FLOAT8_E5M2, FLOAT8_E4M3FN, INT4, INT8 ND
x2 输入 矩阵乘运算中的右矩阵。 FLOAT4_E2M1, INT4, INT8 ND, FRACTAL_NZ
bias 输入 矩阵乘运算后累加的偏置,对应公式中的bias。 BFLOAT16, FLOAT16, FLOAT32 ND
x1_scale 输入 矩阵乘计算时,量化参数的缩放因子,对应公式的x1Scale。 BFLOAT16, FLOAT16, FLOAT32, FLOAT8_E8M0 ND
x2_scale 输入 矩阵乘计算时,量化参数的缩放因子,对应公式的x2Scale。 BFLOAT16, FLOAT16, FLOAT32, UINT64, FLOAT8_E8M0 ND
y_scale 输入 矩阵乘运算后,量化参数的缩放因子,对应公式的yScale。 UINT64 ND
x1_offset 输入 矩阵乘计算时,量化参数的偏置因子,对应公式的x1Offset。 BFLOAT16, FLOAT16 ND
x2_offset 输入 矩阵乘计算时,量化参数的偏置因子,对应公式的x2Offset。 BFLOAT16, FLOAT16 ND
y_offset 输入 矩阵乘运算后,量化参数的偏置因子,对应公式的yOffset。 BFLOAT16, FLOAT16, FLOAT32 ND
y 输出 矩阵乘运算的计算结果。 BFLOAT16, FLOAT16 ND

约束说明

  • 不支持空tensor。

  • 支持连续tensor,非连续tensor只支持转置场景。

  • 输入和输出支持以下数据类型组合:

    • Atlas A2 训练系列产品/Atlas A2 推理系列产品、Atlas A3 训练系列产品/Atlas A3 推理系列产品:

      x1 x2 x1_scale x2_scale x2_offset y_scale bias y_offset y
      INT8 INT32 FLOAT32 UINT64 nullptr nullptr nullptr FLOAT32 FLOAT16/BFLOAT16
      INT8 INT8 nullptr UINT64/INT64 nullptr nullptr nullptr/INT32 nullptr FLOAT16
      INT8 INT8 nullptr UINT64/INT64 nullptr/FLOAT32 nullptr nullptr/INT32 nullptr INT8
      INT8 INT8 nullptr/FLOAT32 BFLOAT16 nullptr nullptr nullptr/INT32/BFLOAT16/FLOAT32 nullptr BFLOAT16
      INT8 INT8 FLOAT32 FLOAT32 nullptr nullptr nullptr/INT32/FLOAT16/FLOAT32 nullptr FLOAT16
      INT4/INT32 INT4/INT32 nullptr UINT64/INT64 nullptr nullptr nullptr/INT32 nullptr INT32
      INT8 INT8 nullptr FLOAT32/BFLOAT16 nullptr nullptr nullptr/INT32 nullptr FLOAT16
      INT8 INT8 FLOAT32 FLOAT32 nullptr nullptr FLOAT32 nullptr BFLOAT16
      INT4/INT32 INT4/INT32 FLOAT32 FLOAT32/BFLOAT16 nullptr nullptr nullptr/INT32/BFLOAT16/FLOAT32 nullptr BFLOAT16
      INT4/INT32 INT4/INT32 FLOAT32 FLOAT32 nullptr nullptr nullptr/INT32/FLOAT16/FLOAT32 nullptr FLOAT16
      INT4 INT4 FLOAT32 FLOAT32 FLOAT16 nullptr nullptr nullptr BFLOAT16
    • Ascend 950PR/Ascend 950DT:

      x1 x2 x1_scale x2_scale x2_offset y_scale bias y
      INT8 INT8 nullptr UINT64/INT64 nullptr nullptr nullptr/INT32 FLOAT16/BFLOAT16
      INT8 INT8 nullptr UINT64/INT64 nullptr/FLOAT32 nullptr nullptr/INT32 INT8
      INT8 INT8 nullptr/FLOAT32 FLOAT32/BFLOAT16 nullptr nullptr nullptr/INT32/FLOAT32/BFLOAT16 BFLOAT16
      INT8 INT8 FLOAT32 FLOAT32 nullptr nullptr nullptr/INT32/FLOAT32/FLOAT16 FLOAT16
      FLOAT8_E4M3FN/FLOAT8_E5M2 FLOAT8_E4M3FN/FLOAT8_E5M2 nullptr UINT64/INT64 nullptr nullptr nullptr/FLOAT32 FLOAT16/BFLOAT16/FLOAT32
      HIFLOAT8 HIFLOAT8 nullptr UINT64/INT64 nullptr nullptr nullptr/FLOAT32 FLOAT16/BFLOAT16/FLOAT32
      FLOAT8_E4M3FN/FLOAT8_E5M2 FLOAT8_E4M3FN/FLOAT8_E5M2 FLOAT32 FLOAT32 nullptr nullptr nullptr/FLOAT32 FLOAT16/BFLOAT16/FLOAT32
      HIFLOAT8 HIFLOAT8 FLOAT32 FLOAT32 nullptr nullptr nullptr/FLOAT32 FLOAT16/BFLOAT16/FLOAT32
      FLOAT4_E2M1 FLOAT4_E2M1 FLOAT8_E8M0 FLOAT8_E8M0 nullptr nullptr nullptr/FLOAT32 FLOAT16/BFLOAT16/FLOAT32
      FLOAT8_E4M3FN/FLOAT8_E5M2 FLOAT8_E4M3FN/FLOAT8_E5M2 FLOAT8_E8M0 FLOAT8_E8M0 nullptr nullptr nullptr/FLOAT32 FLOAT16/BFLOAT16/FLOAT32
      FLOAT8_E4M3FN FLOAT4_E2M1 FLOAT8_E8M0 FLOAT8_E8M0 nullptr nullptr nullptr/BFLOAT16/FLOAT16 BFLOAT16/FLOAT16
      FLOAT8_E4M3FN FLOAT4_E2M1 nullptr BFLOAT16/FLOAT16 nullptr INT64/UINT64 nullptr BFLOAT16/FLOAT16

调用说明