昇腾社区首页
中文
注册

aclnnWeightQuantBatchMatmulV2

产品支持情况

  • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]
  • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]
  • [object Object]Atlas 推理系列产品[object Object]

功能说明

  • 算子功能:完成一个输入为伪量化场景的矩阵乘计算,并可以实现对于输出的量化计算。
  • 计算公式y=x@ANTIQUANT(weight)+biasy = x @ ANTIQUANT(weight) + bias 公式中的weightweight为伪量化场景的输入,其反量化公式ANTIQUANT(weight)ANTIQUANT(weight)ANTIQUANT(weight)=(weight+antiquantOffset)antiquantScaleANTIQUANT(weight) = (weight + antiquantOffset) * antiquantScale 当需要对输出进行量化处理时,其量化公式为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} 当不需要对输出再进行量化操作时,其计算公式为y=x@ANTIQUANT(weight)+biasy = x @ ANTIQUANT(weight) + bias

函数原型

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

  • aclnnStatus aclnnWeightQuantBatchMatmulV2GetWorkspaceSize(const aclTensor *x, const aclTensor *weight, const aclTensor *antiquantScale, const aclTensor *antiquantOffsetOptional, const aclTensor *quantScaleOptional, const aclTensor *quantOffsetOptional, const aclTensor *biasOptional, int antiquantGroupSize, const aclTensor *y, uint64_t *workspaceSize, aclOpExecutor **executor)
  • aclnnStatus aclnnWeightQuantBatchMatmulV2(void *workspace, uint64_t workspaceSize, aclOpExecutor *executor, aclrtStream stream)

aclnnWeightQuantBatchMatmulV2GetWorkspaceSize

  • 参数说明

    • x(aclTensor *, 计算输入):矩阵乘的左输入矩阵,公式中的输入x,device侧的aclTensor,undefined支持ND。undefined仅支持转置场景。

      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:维度支持两维,shape支持(m, k),m表示矩阵第1维的大小,k表示矩阵的第2维的大小,其中Reduce维度k需要与weight的Reduce维度k大小相等,数据类型支持FLOAT16、BFLOAT16。x矩阵为非转置时,m大小在[1, 2^31-1]范围内;转置时,m大小在[1, 65535]范围内。
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT16。shape支持26维,输入shape需要为(batch, m, k),其中batch表示矩阵的批次大小,支持04维,m表示单个batch矩阵第1维的大小,k表示单个batch矩阵的第2维的大小,batch维度需要与weight的batch维度满足undefined。当伪量化算法模式为pertensorundefined时,m*k不能超过512000000。
    • weight(aclTensor *, 计算输入):矩阵乘的右输入矩阵,公式中的输入weight,device侧的aclTensor,undefined支持ND、FRACTAL_NZ。

      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:维度支持2维,Reduce维度k需要与x的Reduce维度k大小相等。数据类型支持INT8、INT4、INT32,当weightundefined为FRACTAL_NZ且数据类型为INT4或INT32时,或者当weightundefined为ND且数据类型为INT32时,仅在INT4Pack场景支持,需配合aclnnConvertWeightToINT4Pack接口完成从INT32到INT4Pack的转换,以及从ND到FRACTAL_NZ的转换,undefined,若数据类型为INT4,则weight的内轴应为偶数。undefined仅支持转置场景。shape支持(k, n),其中k表示矩阵第1维的大小,n表示矩阵第2维的大小。 对于不同伪量化算法模式,weightundefined为FRACTAL_NZ仅在如下场景下支持:
        • perchannelundefined
          • weight的数据类型为INT8,y的数据类型为非INT8。
          • weight的数据类型为INT4/INT32,weight转置,y的数据类型为非INT8。
        • pergroupundefinedweight的数据类型为INT4/INT32,weight非转置,x非转置,antiquantGroupSize为64或128,k为antiquantGroupSize对齐,n为64对齐,y的数据类型为非INT8。
      • [object Object]Atlas 推理系列产品[object Object]:维度支持2~6维,batch维度需要与x的batch维度满足undefined,数据类型支持INT8。具体如下:
        • undefined为ND时,输入shape需要为(batch, k, n),其中batch表示矩阵的批次大小,支持0~4维,k表示单个batch矩阵第1维的大小,n表示单个batch矩阵的第2维的大小。
        • undefined为FRACTAL_NZ时:
          • 输入shape需要为(batch, n, k),其中batch表示矩阵的批次大小,支持0~4维,k表示单个batch矩阵第1维的大小,n表示单个batch矩阵的第2维的大小。
          • 配合aclnnCalculateMatmulWeightSizeV2以及aclnnTransMatmulWeight完成输入Format从ND到FRACTAL_NZ的转换,undefined
    • antiquantScale(aclTensor *, 计算输入):实现输入反量化计算的反量化scale参数,反量化公式中的输入antiquantScale,device侧的aclTensor。undefined支持ND。

      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT16、BFLOAT16、UINT64、INT64(当FLOAT16、BFLOAT16时,数据类型要求和输入x保持一致;当为UINT64、INT64时,x仅支持FLOAT16,不转置,weight仅支持int8,ND转置,模式仅支持perchannelundefined,quantScaleOptional和quantOffsetOptional必须传入空指针,m仅支持[1, 96],k和n要求64对齐,需要首先配合aclnnCast接口完成FLOAT16到FLOAT32的转换,详情请参考undefined,再配合aclnnTransQuantParamV2接口完成FLOAT32到UINT64的转换,详情请参考undefined)。undefined仅支持转置场景。 对于不同伪量化算法模式,antiquantScale支持的shape如下:
        • pertensorundefined:输入shape为(1,)或(1, 1)。
        • perchannelundefined:输入shape为(1, n)或(n,)。
        • pergroupundefined:输入shape为(⌈k/group_size⌉, n),其中group_size表示k要分组的每组的大小。
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT16,数据类型要求和输入x保持一致。 对于不同伪量化算法模式,antiquantScale支持的shape如下:
        • pertensorundefined:输入shape为(1,)或(1, 1)。
        • perchannelundefined:输入shape为(n, 1)或(n,),不支持undefined
        • pergroupundefined:输入shape与weight的数据格式相关,如下:
          • weight的数据格式为ND时,输入shape为(⌈k/group_size⌉, n),其中group_size表示k要分组的每组的大小。
          • weight的数据格式为FRACTAL_NZ时,输入shape为(n, ⌈k/group_size⌉),其中group_size表示k要分组的每组的大小。
    • antiquantOffsetOptional(aclTensor *, 计算输入):实现输入反量化计算的反量化offset参数,反量化公式中的antiquantOffset,device侧的aclTensor。可选输入, 当不需要时为空指针;存在时shape要求与antiquantScale一致。undefined支持ND。

      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT16、BFLOAT16、INT32,数据类型为FLOAT16、BFLOAT16时,数据类型要求和输入x的数据类型保持一致;数据类型为INT32类型时,数据范围限制为[-128, 127],x仅支持FLOAT16,weight仅支持int8,antiquantScale仅支持UINT64/INT64。undefined仅支持转置场景。
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT16,数据类型要求和输入x保持一致。
    • quantScaleOptional(aclTensor *, 计算输入):实现输出量化计算的量化参数,device侧的aclTensor,由量化公式中的quantScalequantOffset的数据通过aclnnTransQuantParam接口转化得到。

      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持UINT64,undefined支持ND。不支持undefined。可选输入,当不需要时为空指针;对于不同的伪量化算法模式,支持的shape如下:
        • pertensorundefined:输入shape为(1,)或(1, 1)。
        • perchannelundefined:输入shape为(1, n)或(n,)。
      • [object Object]Atlas 推理系列产品[object Object]:预留参数,暂未使用,固定传入空指针。
    • quantOffsetOptional(aclTensor *, 计算输入):实现输出量化计算的量化offset参数,量化公式中的quantOffset,device侧的aclTensor。

      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT,undefined支持ND。可选输入, 当不需要时为空指针;存在时shape要求与quantScaleOptional一致。不支持undefined
      • [object Object]Atlas 推理系列产品[object Object]:预留参数,暂未使用,固定传入空指针。
    • biasOptional(aclTensor *, 计算输入):偏置输入,公式中的bias,device侧的aclTensor。可选输入, 当不需要时为空指针。undefined支持ND。不支持undefined

      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:维度支持1维或2维,shape支持(n,)或(1, n)。数据类型支持FLOAT16、FLOAT。当x的数据类型为BFLOAT16时,本参数要求为FLOAT;当x的数据类型为FLOAT16时,本参数要求为FLOAT16。
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT16。维度支持1~6维,带batch时,输入shape需要为(batch,1,n),batch要与x和weight的batch维度broadcast后的batch保持一致,不带batch时,输入shape需要为(n,)或(1, n)。
    • antiquantGroupSize(int, 计算输入):表示在伪量化pergroup和mxundefined下,对输入weight进行反量化计算的groupSize输入,描述一组反量化参数对应的待反量化数据量在Reduce方向的大小。当伪量化算法不为pergroup和mxundefined时传入0;当伪量化算法为pergroupundefined时传入值的范围为[32, k-1]且值要求是32的倍数;在mxundefined,仅支持32。

    • y(aclTensor *, 计算输出):计算输出,公式中的y,device侧的aclTensor。undefined支持ND。不支持undefined

      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:维度支持2维,shape支持(m, n)。数据类型支持FLOAT16、BFLOAT16、INT8。当quantScaleOptional存在时,数据类型为INT8;当quantScaleOptional不存在时,数据类型支持FLOAT16、BFLOAT16,且与输入x的数据类型一致。
      • [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT16。维度支持2~6维,shape支持(batch, m, n),batch可不存在,支持x与weight的batch维度broadcast,输出batch与broadcast之后的batch一致,m与x的m一致,n与weight的n一致。
    • workspaceSize(uint64_t *, 出参):返回需要在Device侧申请的workspace大小。

    • executor(aclOpExecutor **, 出参):返回op执行器,包含了算子计算流程。

  • 返回值:

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

[object Object]

aclnnWeightQuantBatchMatmulV2

  • 参数说明

    • workspace(void *, 入参):在Device侧申请的workspace内存地址。
    • workspaceSize(uint64_t, 入参):在Device侧申请的workspace大小,由第一段接口aclnnWeightQuantBatchMatmulV2GetWorkspaceSize获取。
    • executor(aclOpExecutor *, 入参):op执行器,包含了算子计算流程。
    • stream(aclrtStream, 入参):指定执行任务的Stream。
  • 返回值:

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

约束说明

性能优化建议:

  • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:
    • pertensorundefined:当undefined为ND时,推荐使用转置后的weight输入;当undefined为FRACTAL_NZ时,推荐使用非转置的weight输入。
    • pergroupundefined:推荐使用非转置的weight输入。
    • perchannelundefined:当undefined为ND时,推荐使用转置后的weight输入;当undefined为FRACTAL_NZ时,推荐使用非转置的weight输入。m范围为[65, 96]时,推荐使用数据类型为UINT64或INT64的antiquantScale。

调用示例

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

[object Object]