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

aclnnWeightQuantBatchMatmulV2

产品支持情况

[object Object]undefined

功能说明

  • 接口功能:完成一个输入为伪量化场景的矩阵乘计算,并可以实现对于输出的量化计算。
  • 计算公式y=x@ANTIQUANT(weight)+biasy = x @ ANTIQUANT(weight) + bias 公式中的weightweight为伪量化场景的输入,其反量化公式ANTIQUANT(weight)ANTIQUANT(weight)ANTIQUANT(weight)=(weight+antiquantOffset)antiquantScaleANTIQUANT(weight) = (weight + antiquantOffset) * antiquantScale
    • 当不需要对输出进行量化操作时,其计算公式为
    y=x@ANTIQUANT(weight)+biasy = x @ ANTIQUANT(weight) + bias
    • 当需要对输出再进行量化处理时,其量化公式为
    y=QUANT(x@ANTIQUANT(weight)+bias)=(x@ANTIQUANT(weight)+bias)quantScale+quantOffset\begin{aligned} y &= QUANT(x @ ANTIQUANT(weight) + bias) \\ &= (x @ ANTIQUANT(weight) + bias) * quantScale + quantOffset \\ \end{aligned}

函数原型

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

[object Object]
[object Object]

aclnnWeightQuantBatchMatmulV2GetWorkspaceSize

  • 参数说明

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

      • 上表数据类型列中的角标“2”代表该系列不支持的数据类型。
    • [object Object]Atlas 推理系列产品[object Object]:

      • 上表数据类型列中的角标“3”代表该系列不支持的数据类型。
  • 返回值:

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

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

    [object Object]

aclnnWeightQuantBatchMatmulV2

  • 参数说明

    [object Object]
  • 返回值:

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

约束说明

  • 确定性说明:aclnnWeightQuantBatchMatmulV2默认非确定性实现,支持通过aclrtCtxSetSysParamOpt开启确定性。

[object Object][object Object]

[object Object]
  • [object Object](aclTensor *, 计算输入):矩阵为非转置时,m大小在[1, 2^31-1]范围内;转置时,m大小在[1, 65535]范围内。

  • [object Object](aclTensor *, 计算输入):维度支持2维,Reduce维度k需要与[object Object]的Reduce维度k大小相等。数据类型支持INT8、INT4、INT32,当[object Object]为FRACTAL_NZ且数据类型为INT4或INT32时,或者当[object Object]为ND且数据类型为INT32时,仅在INT4Pack场景支持,需配合[object Object]接口完成从INT32到INT4Pack的转换,以及从ND到FRACTAL_NZ的转换,,若数据类型为INT4,则[object Object]的内轴应为偶数。仅支持转置场景。shape支持(k, n),其中k表示矩阵第1维的大小,n表示矩阵第2维的大小。 对于不同伪量化算法模式,[object Object]为FRACTAL_NZ仅在如下场景下支持:

    • perchannel
      • [object Object]的数据类型为INT8,y的数据类型为非INT8。
      • [object Object]的数据类型为INT4/INT32,[object Object]转置,y的数据类型为非INT8。
    • pergroup[object Object]的数据类型为INT4/INT32,[object Object]非转置,[object Object]非转置,antiquantGroupSize为64或128,k为antiquantGroupSize对齐,n为64对齐,y的数据类型为非INT8。
  • [object Object](aclTensor *, 计算输入):数据类型支持FLOAT16、BFLOAT16、UINT64、INT64(当FLOAT16、BFLOAT16时,数据类型要求和输入[object Object]保持一致;当为UINT64、INT64时,[object Object]仅支持FLOAT16,不转置,[object Object]仅支持INT8,ND转置,模式仅支持perchannel,quantScaleOptional和quantOffsetOptional必须传入空指针,m仅支持[1, 96],k和n要求64对齐,需要首先配合aclnnCast接口完成FLOAT16到FLOAT32的转换,详情请参考,再配合aclnnTransQuantParamV2接口完成FLOAT32到UINT64的转换,详情请参考)。仅支持转置场景。 对于不同伪量化算法模式,[object Object]支持的shape如下:

    • pertensor:输入shape为(1,)或(1, 1)。
    • perchannel:输入shape为(1, n)或(n,)。
    • pergroup:输入shape为(⌈k/group_size⌉, n),其中group_size表示k要分组的每组的大小。
  • [object Object](aclTensor *, 计算输入):数据类型支持FLOAT16、BFLOAT16、INT32,数据类型为FLOAT16、BFLOAT16时,数据类型要求和输入[object Object]的数据类型保持一致;数据类型为INT32类型时,数据范围限制为[-128, 127],x仅支持FLOAT16,weight仅支持INT8,[object Object]仅支持UINT64/INT64。仅支持转置场景。

  • [object Object](aclTensor *, 计算输入):数据类型支持UINT64,支持ND。不支持。可选输入,当不需要时为空指针;对于不同的伪量化算法模式,支持的shape如下:

    • pertensor:输入shape为(1,)或(1, 1)。
    • perchannel:输入shape为(1, n)或(n,)。
  • [object Object](aclTensor *, 计算输入):数据类型支持FLOAT,支持ND。可选输入, 当不需要时为空指针;存在时shape要求与[object Object]一致。不支持

  • [object Object](aclTensor *, 计算输入):维度支持1维或2维,shape支持(n,)或(1, n)。数据类型支持FLOAT16、FLOAT。当[object Object]的数据类型为BFLOAT16时,本参数要求为FLOAT;当[object Object]的数据类型为FLOAT16时,本参数要求为FLOAT16。

  • [object Object](int, 计算输入):表示在伪量化pergroup和mx下,对输入[object Object]进行反量化计算的groupSize输入,描述一组反量化参数对应的待反量化数据量在Reduce方向的大小。当伪量化算法不为pergroup和mx时传入0;当伪量化算法为pergroup时传入值的范围为[32, k-1]且值要求是32的倍数;在mx,仅支持32。

  • [object Object](aclTensor *, 计算输出):维度支持2维,shape支持(m, n)。数据类型支持FLOAT16、BFLOAT16、INT8。当[object Object]存在时,数据类型为INT8;当[object Object]不存在时,数据类型支持FLOAT16、BFLOAT16,且与输入[object Object]的数据类型一致。

  • 性能优化建议:

    • pertensor:当为ND时,推荐使用转置后的[object Object]输入;当为FRACTAL_NZ时,推荐使用非转置的[object Object]输入。
    • pergroup:推荐使用非转置的weight输入。
    • perchannel:当为ND时,推荐使用转置后的[object Object]输入;当为FRACTAL_NZ时,推荐使用非转置的[object Object]输入。m范围为[65, 96]时,推荐使用数据类型为UINT64或INT64的antiquantScale。
[object Object]

[object Object][object Object]

[object Object]
  • [object Object](aclTensor *, 计算输入): 数据类型支持FLOAT16。shape支持2~6维,输入shape需要为(batch, m, k),其中batch表示矩阵的批次大小,支持0~4维,m表示单个batch矩阵第1维的大小,k表示单个batch矩阵的第2维的大小,batch维度需要与[object Object]的batch维度满足。当伪量化算法模式为pertensor时,[object Object]不能超过512000000。
  • [object Object](aclTensor *, 计算输入):维度支持2~6维,batch维度需要与[object Object]的batch维度满足,数据类型支持INT8。具体如下:
    • 为ND时,输入shape需要为(batch, k, n),其中batch表示矩阵的批次大小,支持0~4维,k表示单个batch矩阵第1维的大小,n表示单个batch矩阵的第2维的大小。
    • 为FRACTAL_NZ时:
      • 输入shape需要为(batch, n, k),其中batch表示矩阵的批次大小,支持0~4维,k表示单个batch矩阵第1维的大小,n表示单个batch矩阵的第2维的大小。
      • 配合aclnnCalculateMatmulWeightSizeV2以及aclnnTransMatmulWeight完成输入Format从ND到FRACTAL_NZ的转换,
  • [object Object](aclTensor *, 计算输入):数据类型支持FLOAT16,数据类型要求和输入[object Object]保持一致。 对于不同伪量化算法模式,[object Object]支持的shape如下:
    • pertensor:输入shape为(1,)或(1, 1)。
    • perchannel:输入shape为(n, 1)或(n,),不支持
    • pergroup:输入shape与[object Object]的数据格式相关,如下:
      • [object Object]的数据格式为ND时,输入shape为(⌈k/group_size⌉, n),其中group_size表示k要分组的每组的大小。
      • [object Object]的数据格式为FRACTAL_NZ时,输入shape为(n, ⌈k/group_size⌉),其中group_size表示k要分组的每组的大小。
  • [object Object](aclTensor *, 计算输入):数据类型支持FLOAT16,数据类型要求和输入[object Object]保持一致。
  • [object Object](aclTensor *, 计算输入):预留参数,暂未使用,固定传入空指针。
  • [object Object](aclTensor *, 计算输入):预留参数,暂未使用,固定传入空指针。
  • [object Object](aclTensor *, 计算输入):数据类型支持FLOAT16。维度支持1~6维,带batch时,输入shape需要为(batch,1,n),batch要与x和weight的batch维度broadcast后的batch保持一致,不带batch时,输入shape需要为(n,)或(1, n)。
  • [object Object](int, 计算输入):数据类型支持FLOAT16。维度支持2~6维,shape支持(batch, m, n),batch可不存在,支持x与weight的batch维度broadcast,输出batch与broadcast之后的batch一致,m与x的m一致,n与weight的n一致。
  • [object Object](aclTensor *, 计算输出):
[object Object]

调用示例

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

[object Object]