Developers
Download
[object Object]

[object Object][object Object]undefined
[object Object]
  • 接口功能:在micro-batch训练场景,需要做micro-batch的梯度累计,会存在大量QuantBatchMatmul后接InplaceAdd的融合场景。QuantBatchMatmulInplaceAdd算子将上述算子融合起来,提高网络性能。实现量化矩阵乘计算和加法计算,基本功能为矩阵乘和加法的组合。

  • 计算公式:

    • mx量化:

      y[m,n]=j=0kLoops1((k=0gsK1(x1Slicex2Slice))(scale1[m,j]scale2[j,n]))+y[m,n]y[m,n] = \sum_{j=0}^{kLoops-1} ((\sum_{k=0}^{gsK-1} (x1Slice * x2Slice)) * (scale1[m, j] * scale2[j, n])) + y[m,n]

      其中,gsKgsK 代表K轴的量化的block size即32,x1Slicex1Slice代表x1x1第m行长度为 gsKgsK 的向量,x2Slicex2Slice代表x2x2第n列长度为 gsKgsK 的向量,K轴均从jgsKj*gsK起始切片,j的取值范围[0, kLoops), kLoops=ceil(KiK_i / gsKgsK),支持最后的切片长度不足 gsKgsK

    • HIFLOAT8 T-T量化:

      y[m,n]=(k=0Ki1(x1[m,k]x2[k,n]))(scale1scale2)+y[m,n]y[m,n] = (\sum_{k=0}^{K_i-1} (x1[m,k] * x2[k,n])) * (scale1 * scale2) + y[m,n]

      其中,scale1scale1scale2scale2分别对应x1Scalex1Scalex2Scalex2Scale,均为标量(shape为 (1)(1));当设置transposeX1/transposeX2时,公式中的x1x1x2x2按转置后的视图参与计算。

[object Object]

每个算子分为,必须先调用“aclnnQuantBatchMatmulInplaceAddGetWorkspaceSize”接口获取入参并根据计算流程计算所需workspace大小,再调用“aclnnQuantBatchMatmulInplaceAdd”接口执行计算。

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

    [object Object]
    • 计算公式:[object Object][object Object]groupSize=groupSizeKgroupSizeN<<16groupSizeM<<32groupSize = groupSizeK | groupSizeN << 16 | groupSizeM << 32
  • 返回值:

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

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

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

    [object Object]
  • 返回值:

    返回aclnnStatus状态码,具体参见

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

  • 当前仅支持transposeX1=true且transposeX2=false。

  • groupSize相关约束:

    • 传入的groupSize内部会按如下公式分解得到groupSizeM、groupSizeN、groupSizeK,当其中有1个或多个为0,会根据x1/x2/x1Scale/x2Scale输入shape重新设置groupSizeM、groupSizeN、groupSizeK用于计算。原理:假设groupSizeM=0,表示m方向量化分组值由接口推断,推断公式为groupSizeM = m / scaleM(需保证m能被scaleM整除),其中m与x1 shape中的m一致,scaleM与x1Scale shape中的m一致。groupSize=groupSizeKgroupSizeN<<16groupSizeM<<32groupSize = groupSizeK | groupSizeN << 16 | groupSizeM << 32
  • 动态量化(mx量化)场景约束:

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

      [object Object]undefined
    • x1数据类型、x2数据类型、x1、x2、x1Scale、x2Scale和groupSize的取值关系:

      [object Object]undefined
  • HIFLOAT8 T-T场景约束:

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

      [object Object]undefined
    • x1数据类型、x2数据类型、x1、x2、x1Scale、x2Scale和groupSize的取值关系:

      [object Object]undefined
[object Object]
  • Atlas 350 加速卡:mxFP8 量化场景示例代码如下,其中[object Object]为mxFP8、[object Object]为FLOAT8_E8M0,[object Object]。具体编译和执行过程请参考

    [object Object]
  • Atlas 350 加速卡:HIFLOAT8 TT场景示例代码如下,当前支持组合[object Object][object Object],且[object Object]为HIFLOAT8、[object Object]为FLOAT32、[object Object]。具体编译和执行过程请参考

    [object Object]