开发者
下载
[object Object]

[object Object][object Object]undefined
[object Object]
  • 接口功能:完成张量x1与张量x2量化的矩阵乘计算,支持K-C、MX。仅支持三维的Tensor传入。Tensor支持转置,转置序列根据传入的数列进行变更。permX1代表张量x1的转置序列,permX2代表张量x2的转置序列,序列值为0的是batch维度,其余两个维度做矩阵乘法。

  • 示例: 假设x1的shape是(M, B, K),x2的shape是(B, K, N),x1Scale和x2Scale不为None,batchSplitFactor等于1时,计算输出out的shape是(M, B, N)。

[object Object]

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

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

    [object Object]
  • 返回值:

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

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

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

    [object Object]
  • 返回值:

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

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

  • Atlas 350 加速卡:

    • K-C量化场景,K仅支持512,N仅支持128。x1Scale和x2Scale仅支持1维,并且x1Scale要求shape为(M,), x2Scale要求shape为(N,),group_size仅支持配置为0,其他取值不生效。
    • MX量化场景,K仅支持64的倍数。 x1Scale和x2Scale仅支持4维,并且x1Scale要求shape为(M, B, K/64, 2),当permX2为[0, 1, 2]时,x2Scale要求shape为(B, K/64, N, 2);当permX2为[0, 2, 1]时,x2Scale要求shape为(B, N, K/64, 2)。group_size的groupSizeM和groupSizeN仅支持0或1,groupSizeK仅支持32。
    • groupSize相关约束:
      • 仅在MX量化场景中生效。
      • 传入的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
[object Object]

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

[object Object]