开发者
资源
[object Object]

[object Object][object Object]undefined
[object Object]
  • 接口功能:目的数据类型为FLOAT4类的MX量化。只对尾轴进行量化,前面所有的轴都合轴处理,通过给定的level0BlockSize将输入划分成多个数据块,对每个数据块进行一级量化,输出量化尺度level0ScaleOut;然后将一级量化的结果作为新的输入,并通过给定的level1BlockSize将其划分成多个数据块,对每个数据块进行二级量化,输出量化尺度level1ScaleOut,根据round_mode进行数据类型的转换,得到量化结果yOut,具体参见

  • 计算公式:

    • 将输入x在尾轴上按k0k_0 = level0BlockSize个数分组,一组k0k_0个数 {{xi}i=1k0}\{\{x_i\}_{i=1}^{k_0}\} 动态量化为 {level0Scale,{tempi}i=1k0}\{level0Scale, \{temp_i\}_{i=1}^{k_0}\}, k0k_0 = level0BlockSize,然后将temp在尾轴上按k1k_1 = level1BlockSize个数分组,一组k1k_1个数 {{tempi}i=1k1}\{\{temp_i\}_{i=1}^{k_1}\} 动态量化为 {level1Scale,{yi}i=1k1}\{level1Scale, \{y_i\}_{i=1}^{k_1}\}, k1k_1 = level1BlockSize
    input_maxi=maxi(abs(xi))input\_max_i = max_i(abs(x_i)) level0Scale=input_maxi/(FP4_E2M1_MAX)level0Scale = input\_max_i / (FP4\_E2M1\_MAX) tempi=cast_to_x_type(xi/level0Scale), i from 1 to level0BlockSizetemp_i = cast\_to\_x\_type(x_i / level0Scale), \space i\space from\space 1\space to\space level0BlockSize shared_exp=floor(log2(maxi(tempi)))emaxshared\_exp = floor(log_2(max_i(|temp_i|))) - emax level1Scale=2shared_explevel1Scale = 2^{shared\_exp} yi=cast_to_FP4_E2M1(tempi/level1Scale,round_mode), i from 1 to level1BlockSizey_i = cast\_to\_FP4\_E2M1(temp_i/level1Scale, round\_mode), \space i\space from\space 1\space to\space level1BlockSize
    • ​量化后的 yiy_{i} 按对应的 xix_{i} 的位置组成输出yOut,level0Scale按尾轴对应的分组组成输出level0ScaleOut,level1Scale按尾轴对应的分组组成输出level1ScaleOut。

    • max_i代表求第i个分组中的最大值

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

      [object Object]undefined
[object Object]

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

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

    [object Object]
  • 返回值:

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

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

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

    [object Object]
  • 返回值:

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

[object Object]
  • 关于x、level0ScaleOut、level1ScaleOut的shape约束说明如下:
    • rank(level1ScaleOut) = rank(x) + 1。
    • level0ScaleOut.shape[-1] = ceil(x.shape[-1] / level0Blocksize)。
    • level1ScaleOut.shape[-2] = (ceil(x.shape[-1] / level1Blocksize) + 2 - 1) / 2。
    • level1ScaleOut.shape[-1] = 2。
    • 其他维度与输入x一致。
  • 确定性说明:aclnnDynamicDualLevelMxQuant默认确定性实现。
[object Object]

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

[object Object]