开发者
资源
[object Object]

[object Object][object Object]undefined
[object Object]
  • 接口功能:在-1轴和-2轴上同时进行目的数据类型为FLOAT4类、FLOAT8类的MX量化。在给定的-1轴和-2轴上,每32个数,计算出这两组数对应的量化尺度mxscale1、mxscale2作为输出mxscale1Out、mxscale2Out的对应部分,然后分别对两组数所有元素除以对应的mxscale1或mxscale2,根据round_mode转换到对应的dstType,得到量化结果y1和y2分别作为输出y1Out和y2Out的对应部分。

  • 计算公式:

    • 当前只支持scaleAlg=0,即OCP实现:

    • 将输入x在-1轴上按照32个数进行分组,一组32个数 {{Vi}i=132}\{\{V_i\}_{i=1}^{32}\} 量化为 {mxscale1,{Pi}i=132}\{mxscale1, \{P_i\}_{i=1}^{32}\}

      shared_exp=floor(log2(maxi(Vi)))emaxshared\_exp = floor(log_2(max_i(|V_i|))) - emax mxscale1=2shared_expmxscale1 = 2^{shared\_exp} Pi=cast_to_dst_type(Vi/mxscale1,round_mode), i from 1 to 32P_i = cast\_to\_dst\_type(V_i/mxscale1, round\_mode), \space i\space from\space 1\space to\space 32
    • 同时,将输入x在-2轴上按照32个数进行分组,一组32个数 {{Vj}j=132}\{\{V_j\}_{j=1}^{32}\} 量化为 {mxscale2,{Pj}j=132}\{mxscale2, \{P_j\}_{j=1}^{32}\}

      shared_exp=floor(log2(maxj(Vj)))emaxshared\_exp = floor(log_2(max_j(|V_j|))) - emax mxscale2=2shared_expmxscale2 = 2^{shared\_exp} Pj=cast_to_dst_type(Vj/mxscale2,round_mode), j from 1 to 32P_j = cast\_to\_dst\_type(V_j/mxscale2, round\_mode), \space j\space from\space 1\space to\space 32
    • -1轴​量化后的 PiP_{i} 按对应的 ViV_{i} 的位置组成输出y1Out,mxscale1按对应的-1轴维度上的分组组成输出mxscale1Out。-2轴​量化后的 PjP_{j} 按对应的 VjV_{j} 的位置组成输出y2Out,mxscale2按对应的-2轴维度上的分组组成输出mxscale2Out。

    • emax: 对应数据类型的最大正则数的指数位。

      [object Object]undefined
[object Object]

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

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

    [object Object]undefined
  • 返回值:

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

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

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

    [object Object]
  • 返回值:

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

[object Object]
  • 关于x、mxscale1Out、mxscale2Out的shape约束说明如下:
    • rank(mxscale1Out) = rank(x) + 1。
    • rank(mxscale2Out) = rank(x) + 1。
    • mxscale1Out.shape[-2] = (ceil(x.shape[-1] / 32) + 2 - 1) / 2。
    • mxscale2Out.shape[-3] = (ceil(x.shape[-2] / 32) + 2 - 1) / 2。
    • mxscale1Out.shape[-1] = 2。
    • mxscale2Out.shape[-1] = 2。
    • 其他维度与输入x一致。
    • 举例:输入x的shape为[B, M, N],目的数据类型为FP8类时,对应的y1和y2的shape为[B, M, N],mxscale1的shape为[B, M, (ceil(N/32)+2-1)/2, 2],mxscale2的shape为[B, (ceil(M/32)+2-1)/2, N, 2]。
  • 确定性说明:aclnnDynamicMxQuantWithDualAxis默认确定性实现。
[object Object]

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

[object Object]