开发者
资源
[object Object][object Object][object Object]undefined
[object Object]
  • 算子功能:完成一个输入为伪量化场景的矩阵乘计算,并可以实现对于输出的量化计算。相较于aclnnWeightQuantBatchMatmulV2接口,此接口变化点为:

    新增innerPrecise参数,用于支持高精度或者高性能计算模式选择。A16W4 per_group场景在batchSize<=16的场景下可设置为1, 提升性能。

  • 计算公式

    y=x@ANTIQUANT(weight)+biasy = x @ ANTIQUANT(weight) + bias

    公式中的weightweight为伪量化场景的输入,其反量化公式ANTIQUANT(weight)ANTIQUANT(weight)

    ANTIQUANT(weight)=(weight+antiquantOffset)antiquantScaleANTIQUANT(weight) = (weight + antiquantOffset) * antiquantScale

    当用户配置quantScaleOptional输入时,会对输出进行量化处理, 其量化公式为

    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}

    当用户配置quantScaleOptional输入为nullptr, 则直接输出:

    y=x@ANTIQUANT(weight)+biasy = x @ ANTIQUANT(weight) + bias
[object Object]

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

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

    [object Object]
    • Atlas 350 加速卡:

      • 上表数据类型列中的角标“1”代表该系列不支持的数据类型。
    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:

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

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

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

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

    [object Object]
  • 返回值:

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

[object Object]

[object Object][object Object]

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

  • 公共约束

    • 当weight数据格式为FRACTAL_NZ且数据类型为INT4/INT32时,或者当weight数据格式为ND且数据类型为INT32时,仅在INT4Pack场景支持,需要配合aclnnConvertWeightToINT4Pack接口完成从INT32到INT4Pack的转换,以及从ND到FRACTAL_NZ的转换,[object Object]详情可参考[object Object],若数据类型为INT4,则weight的内轴应为偶数。
    • 对于不同伪量化算法模式,weight的数据格式为FRACTAL_NZ仅在如下场景下支持:
      • per_channel模式: weight的数据类型为INT8,y的数据类型为非INT8。 weight的数据类型为INT4/INT32,weight转置,y的数据类型为非INT8。
      • per_group模式:weight的数据类型为INT4/INT32,weight非转置,x非转置,antiquantGroupSize为64或128,k为antiquantGroupSize对齐,n为64对齐,y的数据类型为非INT8。
  • 性能优化建议

    • per_channel模式:为提高性能,推荐使用transpose后的weight输入。m范围为[65, 96]时,推荐使用数据类型为UINT64/INT64的antiquantScale。
    • per_group模式:在A16W4,batchSize<=16的场景下可设置innerPrecise参数为1,并且weight数据格式设为FRACTAL_NZ,来提升性能,但会存在一定的精度下降。[object Object]

[object Object][object Object]

[object Object]
  • 确定性说明:默认确定性实现。

  • 公共约束

    • [object Object][object Object]矩阵m、k、n大小在[1, 2^31-1]范围内。[object Object]的Reduce维度k需要与[object Object]的Reduce维度k大小相等。
    • 支持的量化模式:pertensor、perchannel、pergroup和mx
    • [object Object]不支持转置,因此不支持,weight仅转置场景支持非连续的Tensor;antiquantScale、antiquantOffsetOptional非连续Tensor仅支持转置场景并且连续性要求和weight保持一致。
    • [object Object]不同量化模式支持的shape:
      • pertensor:(1,)或(1,1)。
      • perchannel:输入shape为(1, n)或(n,)。
      • pergroup:输入shape为(⌈k/group_size⌉, n),其中group_size表示k要分组的每组的大小。
      • mx:输入shape为(⌈k/group_size⌉, n),其中group_size表示k要分组的每组的大小,仅支持32。
    • [object Object][object Object]为预留参数,暂未使用,固定传入空指针。

    [object Object][object Object]

    [object Object]
    • 输入和输出数据类型组合要求
    [object Object]undefined
    [object Object]

    [object Object][object Object]

    [object Object]
    • 输入和输出数据类型组合要求
    [object Object]undefined
    • 约束说明

      外,A16W4场景其余约束如下:

      • [object Object]数据类型为INT4或FLOAT4_E2M1,则weight的最后一维应为2对齐;若[object Object]数据类型为INT32或FLOAT,则weight的最后一维应为8对齐。
      • [object Object]数据类型为INT32/FLOAT时,必须配合[object Object]接口完成从INT32/FLOAT到紧密排布的INT4/FLOAT4_E2M1的转换,

[object Object][object Object]

  • 性能优化建议

    • pertensor:当为ND时,推荐使用转置后的[object Object]输入;
    • perchannel:当为ND时,推荐使用转置后的[object Object]输入;
    • pergroup和mx:推荐使用非转置的[object Object]输入。
    [object Object]
[object Object][object Object]

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

  • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]、Atlas 350 加速卡: A16W8调用示例。

    [object Object]
  • Atlas 350 加速卡: A16MxFp4调用示例。

    [object Object]