开发者
资源
[object Object][object Object][object Object]undefined
[object Object]
  • 接口功能:完成量化的矩阵乘计算。相似接口有aclnnMm(仅支持2维Tensor作为输入的矩阵乘)和aclnnBatchMatMul(仅支持三维的矩阵乘,其中第一维是Batch维度)。支持T-C、T-T、K-C、K-T、mx

  • 计算公式:

    [object Object]
    • 无x1Scale无bias:
    out=x1@x2x2Scale+x2Offsetout = x1@x2 * x2Scale + x2Offset
    • bias INT32:
    out=(x1@x2+bias)x2Scale+x2Offsetout = (x1@x2 + bias) * x2Scale + x2Offset [object Object][object Object]
    • bias BFLOAT16/FLOAT32(此场景无x2Offset):
    out=x1@x2x2Scale+biasout = x1@x2 * x2Scale + bias
    • x1Scale无bias:
    out=x1@x2x2Scalex1Scaleout = x1@x2 * x2Scale * x1Scale
    • x1Scale, bias INT32(此场景无x2Offset):
    out=(x1@x2+bias)x2Scalex1Scaleout = (x1@x2 + bias) * x2Scale * x1Scale
    • x1Scale, bias BFLOAT16/FLOAT16/FLOAT32(此场景无x2Offset):
    out=x1@x2x2Scalex1Scale+biasout = x1@x2 * x2Scale * x1Scale + bias
    • x1为INT8,x2为INT32,x1Scale为FLOAT32,x2Scale为UINT64,yOffset为FLOAT32:
    out=((x1@(x2x2Scale))+yOffset)x1Scaleout = ((x1 @ (x2*x2Scale)) + yOffset) * x1Scale [object Object][object Object]
    • mx量化模式:out[m,n]=j=0kLoops1((k=0gsK1(x1Slicex2Slice))(x1Scale[m/gsM,j]x2Scale[j,n/gsN]))+bias[n]out[m,n] = \sum_{j=0}^{kLoops-1} ((\sum_{k=0}^{gsK-1} (x1Slice * x2Slice))* (x1Scale[m/gsM, j] * x2Scale[j, n/gsN]))+bias[n] 其中,gsM,gsN和gsK分别代表groupSizeM,groupSizeN和groupSizeK;x1Slice代表x1第m行长度为groupSizeK的向量,x2Slice代表x2第n列长度为groupSizeK的向量;K轴均从j*groupSizeK起始切片,j的取值范围[0, kLoops], kLoops = ceil(K / groupSizeK),K为K轴长度,支持最后的切片长度不足groupSizeK。
    [object Object]
[object Object]

每个算子分为,必须先调用“aclnnQuantMatmulWeightNzGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnQuantMatmulWeightNz”接口执行计算。

[object Object]
[object Object]
[object Object]
  • 参数说明:

    [object Object]
    • 公式一:

      groupSize=groupSizeKgroupSizeN<<16groupSizeM<<32groupSize = groupSizeK | groupSizeN << 16 | groupSizeM << 32 [object Object][object Object]
      • 上表数据类型列中的角标“1”代表该系列不支持的数据类型。
      • x2不支持
      • 不支持x1Scale。
      • 不支持yScale
      • 不支持groupSize,groupSize传0。[object Object]
      [object Object][object Object]
      • 上表数据类型列中的角标“2”代表该系列不支持的数据类型。
      • x2不支持
      • 不支持yScale。
      • 不支持groupSize,groupSize传0。[object Object]
      [object Object][object Object]
      • 上表数据类型列中的角标“3”代表该系列不支持的数据类型。
      • x2支持最后两根轴转置情况下的,其他场景的不支持。
      • 支持groupSize传非0。[object Object]
  • 返回值:

    aclnnStatus:返回状态码,具体参见

    第一段接口完成入参校验,出现以下场景时报错:

    [object Object]
[object Object]
  • 参数说明:

    [object Object]
  • 返回值:

    aclnnStatus:返回状态码,具体参见

[object Object]
  • 确定性说明:
    • aclnnQuantMatmulWeightNz默认确定性实现。
[object Object]
  • 支持调用本接口前,通过对format为ND的x2处理得到AI处理器亲和数据排布格式。

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

    [object Object]undefined
  • x1的约束:当数据类型为INT8时,且x2的数据类型为INT32时,transposeX1为false。维度为:(m,k),要求k为偶数。

  • yOffset的约束:shape支持1维(n)。为计算过程中离线计算的辅助结果,值要求为8 * x2 * x2Scale,并在第1维累加。

[object Object][object Object]
  • 支持调用本接口前,通过对format为ND的x2处理得到AI处理器亲和数据排布格式。

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

    [object Object]undefined
[object Object][object Object]
  • 支持调用本接口前,通过对format为ND的x2处理得到NZ格式,在使用时必须使用0来填充以防引入脏数据。

  • 当原始ND的后两维中存在某一维度为1时,无法使用weightNz特性,本接口不支持此种场景。

  • T-C量化 && T-T量化场景约束:

[object Object][object Object] - 输入和输出支持以下数据类型组合: [object Object][object Object] | x1 | x2 | x1Scale | x2Scale | x2Offset | yScale | bias | out | | --------------- | ----------- | ----------- | --------------- | ------------ | -------| -------------------------- | ----------------------| | INT8 | INT8 | null | UINT64/ INT64 | null | null | null/INT32 | FLOAT16/ BFLOAT16 | | INT8 | INT8 | null | UINT64/ INT64 | null/FLOAT32 | null | null/INT32 | INT8 | | INT8 | INT8 | null | FLOAT32/BFLOAT16 | null | null | null/INT32/FLOAT32/BFLOAT16| BFLOAT16 | | INT8 | INT8 | null | FLOAT32/BFLOAT16 | null | null | null/INT32 | INT32 |

[object Object]
  • K-C量化 && K-T量化场景约束:

[object Object][object Object] - 输入和输出支持以下数据类型组合: [object Object][object Object] | x1 | x2 | x1Scale | x2Scale | x2Offset | yScale | bias | out | | -------------------- | -------------------- | ------- | --------------- | -------- | -------| ------------------------- | --------------- | | INT8 | INT8 | FLOAT32 | FLOAT32/BFLOAT16| null | null | null/INT32/FLOAT32/BFLOAT16 | BFLOAT16 | | INT8 | INT8 | FLOAT32 | FLOAT32 | null | null | null/INT32/FLOAT32/FLOAT16 | FLOAT16 |

[object Object]
  • mx量化场景约束:

[object Object][object Object] - 输入和输出支持以下数据类型组合: [object Object][object Object] | x1 | x2 | x1Scale | x2Scale | x2Offset | yScale | bias | out | |---------------| ------------- | ----------- | ----------- | -------- | ------ | -------------| --------------------------- | | FLOAT8_E4M3FN | FLOAT8_E4M3FN | FLOAT8_E8M0 | FLOAT8_E8M0 | null | null | null/FLOAT32 | FLOAT16/BFLOAT16/FLOAT32 |

[object Object]
  • 伪量化场景下dtype和shape要求如下:

    [object Object]undefined
    • 约束说明:
      • k, n大小要求64对齐。
      • x1是FLOAT8_E4M3FN,x2是FLOAT32时, x2表示一个FLOAT32存储8个FLOAT4_E2M1的紧密排布的数据格式。
[object Object][object Object]

示例代码如下,仅供参考,具体编译和执行过程请参考

  • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:

    x2为NZ格式场景下的示例代码如下(transposeX2=false)。

    [object Object]
  • [object Object]Atlas 推理系列产品[object Object]: x2为NZ格式场景下的示例代码如下(transposeX2=true)。

    [object Object]
  • Atlas 350 加速卡: x2为NZ格式场景下的示例代码如下(transposeX2=true)。

    [object Object]