开发者
资源
[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

[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
[object Object]

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

[object Object]