昇腾社区首页
中文
注册
开发者
下载

aclnnQuantMatmulV5

产品支持情况

[object Object]undefined

功能说明

  • 接口功能:完成量化的矩阵乘计算。兼容aclnnQuantMatmulV3、aclnnQuantMatmulV4接口功能。完成量化的矩阵乘计算,最小支持输入维度为1维,最大支持输入维度为2维。相似接口有aclnnMm(仅支持2维Tensor作为输入的矩阵乘)。
  • 计算公式:
    • x1为INT8,x2为INT32,x1Scale为FLOAT32,x2Scale为UINT64,yOffset为FLOAT32:

      out=((x1@(x2x2Scale))+yOffset)x1Scaleout = ((x1 @ (x2*x2Scale)) + yOffset) * x1Scale
    • 无x1Scale无bias:

      out=x1@x2x2Scale+x2Offsetout = x1@x2 * x2Scale + x2Offset
    • bias INT32:

      out=(x1@x2+bias)x2Scale+x2Offsetout = (x1@x2 + bias) * x2Scale + x2Offset
    • bias BFLOAT16/FLOAT32(此场景无offset):

      out=x1@x2x2Scale+biasout = x1@x2 * x2Scale + bias
    • x1Scale无bias:

      out=x1@x2x2Scalex1Scaleout = x1@x2 * x2Scale * x1Scale
    • x1Scale, bias INT32(此场景无offset):

      out=(x1@x2+bias)x2Scalex1Scaleout = (x1@x2 + bias) * x2Scale * x1Scale
    • x1Scale, bias BFLOAT16/FLOAT16/FLOAT32(此场景无offset):

      out=x1@x2x2Scalex1Scale+biasout = x1@x2 * x2Scale * x1Scale + bias
    • x1,x2为INT8,x1Scale, x2Scale为FLOAT32,bias为FLOAT32,out为FLOAT16/BFLOAT16 (pergroup-perblock量化):

      out=(x1@x2)x1Scalex2Scale+biasout = (x1 @ x2) * x1Scale * x2Scale + bias
    • x1,x2为INT4,x1Scale, x2Scale为FLOAT32,x2Offset为FLOAT16, out为FLOAT16/BFLOAT16 (pertoken-pergroup非对称量化):

      out=x1Scalex2Scale@(x1@x2x1@x2Offset)out = x1Scale * x2Scale @ (x1 @ x2 - x1 @ x2Offset)

函数原型

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

[object Object]
[object Object]

aclnnQuantMatmulV5GetWorkspaceSize

  • 参数说明:

    [object Object]
    • 公式一:

      groupSize=groupSizeKgroupSizeN<<16groupSizeM<<32groupSize = groupSizeK | groupSizeN << 16 | groupSizeM << 32
    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:

      x1与x2的最后一维大小不能超过65535,x1的最后一维指transposeX1为true时的m或transposeX1为false时的k,x2的最后一维指transposeX2为true时的k或transposeX2为false时的n。

  • 返回值:

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

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

    [object Object]

aclnnQuantMatmulV5

  • 参数说明:

    [object Object]
  • 返回值:

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

约束说明

  • 确定性说明:aclnnQuantMatmulV5默认确定性实现。

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

    [object Object]undefined
  • 不同的量化模式支持的x1、 x2、x1Scale和x2Scale的输入dtype组合以及支持的平台为:

    x1、x2、x1Scale、x2Scale、yOffset和groupSize在不同量化场景下dtype、shape的取值等方面相互影响,关系如下:

    [object Object]undefined
  • 表格中未列举的输入组合属于aclnnQuantMatmulV3、aclnnQuantMatmulV4接口的输入组合,这两个接口不支持输入groupsize,groupsize默认为0。

    • x1参数约束如下:

      • 数据类型支持INT8、INT32、INT4。
      • 当数据类型为INT32、INT4时,为INT4量化场景、transposeX1为false情况。
      • 当数据类型为INT4时,维度为:(batch,m,k),要求k为偶数。
      • 当数据类型为INT32时,每个INT32数据存放8个INT4数据,对应维度表示:(batch,m,k // 8),要求k为8的倍数。
      • 启用A8W8 perblock对称量化时,数据类型支持INT8,目前n需与256对齐, k与128对齐且为4 * 128的倍数,transposeX1为false,形状为(m, k)。
      • 启用A4W4 pergroup非对称量化时,数据类型支持INT4,目前k需与1024对齐,transposeX1为false,形状为(m, k)。
      • 在transposeX1为false情况下,形状为(batch, m, k)。
      • 在transposeX1为true情况下,形状为(batch, k, m),其中batch代表前0~4维,0维表示bacth不存在。
      • AI处理器亲和数据排布格式下,shape支持4~8维。
      • transposeX2为true时维度为:(batch,k1,n1,n0,k0),batch可不存在,其中k0 = 32, n0 = 16, x1 shape中的k和x2 shape中的k1需要满足以下关系:ceil(k / 32) = k1。
      • transposeX2为false时维度为:(batch,n1,k1,k0,n0),batch可不存在,其中k0 = 16,n0 = 32,x1 shape中的k和x2 shape中的k1需要满足以下关系:ceil(k / 16) = k1。
      • 可使用aclnnCalculateMatmulWeightSizeV2接口以及aclnnTransMatmulWeight接口完成输入Format从ND到AI处理器亲和数据排布格式的转换。
    • x2参数约束如下:

      • 数据类型支持INT8、INT32、INT4。
      • 当数据类型为INT32、INT4时,为INT4量化场景,当前仅支持2维ND格式。ND格式下,shape支持2~6维,
        • transposeX2为false情况下各个维度表示:(batch,k,n)。
        • transposeX2为true情况下各个维度表示:(batch,n,k)。
        • batch可不存在,其中k与x1的shape中的k一致。
      • 数据类型为INT4时:
        • transposeX2为true时维度为:(n,k),要求k为偶数。
        • transposeX2为false时维度为:(k,n),要求n为偶数。
      • 数据类型为INT32时,每个INT32数据存放8个INT4数据,
        • transposeX2为true时维度为:(n,k // 8),要求k为8的倍数。
        • transposeX2为false时维度为:(k,n // 8),要求n为8的倍数。
      • 可使用aclnnConvertWeightToINT4Pack接口完成x2从INT32(1个int32在0~3bit位存储1个int4)到INT32(1个int32存储8个int4)或INT4(1个int4表示1个int4)的数据格式转换,具体参见
      • 启用A8W8 perblock对称量化时,数据类型支持INT8,transposeX2为true,形状为(n, k),目前n需与256对齐,k与128对齐且为4 * 128的倍数。
      • 启用A4W4 pergroup非对称量化时,数据类型支持INT4,transposeX2为true,形状为(n, k),目前k需与1024对称,目前n需与256对齐。
    • x1Scale约束如下:

      • shape支持2维,形状为(m,1)。数据类型支持FLOAT32。
      • 启用A8W8 perblock对称量化时,数据类型为float32, 形状为(m, ceil(k / 128))。
      • 启用A4W4 pergroup非对称量化时,数据类型为float32, 形状为(m, 1)。
    • x2Scale的约束如下:

      • shape支持2维,形状为(k / groupSize,n)其中n与x2的n一致。
      • 数据类型支持UINT64、INT64、FLOAT32、BFLOAT16。
      • 当原始输入类型不满足中类型组合时,由于TransQuantParamV2只支持1维,需要将x2_scale view成一维(k / groupSize * n),再调用TransQuantParamV2算子的aclnn接口来将x2Scale转成UINT64数据类型,再将输出view成二维(k / groupSize, n)。
      • 启用A8W8 perblock对称量化时,数据类型为float32, 当x2的transpose为true时,形状为(ceil(n / 128), ceil(k / 128)),当x2的transpose为false时,形状为(ceil(k / 128), ceil(n / 128))。
      • 启用A4W4 pergroup非对称量化时,数据类型为float32,当x2的transpose为false时,形状为(ceil(k / 256), n)。
    • 当前版本不支持yScale,需要传入nullptr。

    • x2Offset的约束如下:

      • 可选量化参数,数据类型支持FLOAT32。
      • 当out数据类型为INT8时,offset可以存在,其他输入类型需要传入nullptr。
      • A4W4 pergroup非对称量化时: 支持输入类型为FLOAT16,形状为(ceil(k, 256),n)。
    • bias的约束如下:

      • A8W8 perblock对称量化时,数据类型支持float32,shape支持一维(n, )。
      • A4W4 pergroup当前不支持,需要传入nullptr。
    • transposeX1:x1和x2为INT32、INT4时,transposeX1仅支持false,各个维度表示:(m, k)。

    • transposeX2的约束如下:

      • ND格式下,为false时维度为:(batch,k,n),为true时维度为:(batch,n,k),batch可不存在,其中k与x1的shape中的k一致。
      • AI处理器亲和数据排布格式下:
        • 为true时维度为:(batch,k1,n1,n0,k0),batch可不存在,其中k0 = 32,n0 = 16,x1 shape中的k和x2 shape中的k1需要满足以下关系:ceil(k / 32) = k1。
        • 为false时维度为:(batch,n1,k1,k0,n0),batch可不存在,其中k0 = 16,n0 = 32,x1 shape中的k和x2 shape中的k1需要满足以下关系:ceil(k / 16) = k1。
    • groupSize的约束如下:

      • 常规情况下以及A4W4 pergroup非对称量化模式时,[groupSizeM,groupSizeN,groupSizeK]取值组合仅支持仅支持[0, 0, 256],即groupSizeK仅支持256。
      • 在A8W8 perblock对称量化模式时,[groupSizeM,groupSizeN,groupSizeK]取值组合仅支持[1, 128, 128]。
    • out的约束如下:

      • shape支持2维,(m,n)。数据类型支持FLOAT16、INT8、BFLOAT16、INT32。
      • A8W8 perblock对称量化模式时,目前输出支持bfloat16。
      • A4W4 pergroup非对称量化模式时,目前输出支持bfloat16。

调用示例

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

x1,x2为FLOAT8_E4M3FN,x1Scale为FLOAT32,x2Scale为FLOAT32,无x2Offset,bias为FLOAT32。

[object Object]
  • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]: x1为INT8,x2为INT32,x1Scale为FLOAT32,x2Scale为UINT64。

    [object Object]