接口功能:根据传入的分组索引的起始值,对传入的数据进行分组的float8的动态量化。
计算公式:
场景1,当scaleAlg为0时:
- 将输入x在第0维上先按照groupIndex进行分组,每个group内按k = blocksize个数分组,一组k个数 {{x[object Object]i[object Object]}[object Object]i=1[object Object][object Object]k[object Object]} 计算出这组数对应的量化尺度mxscale_pre, {mxscale_pre, {P[object Object]i[object Object]}[object Object]i=1[object Object][object Object]k[object Object]},计算公式为下面公式(1)(2)。
- 这组数每个数都除以mxscale,根据round_mode转换到对应的dst_type,得到量化结果y,计算公式为下面公式(3)。
量化后的 按对应的 的位置组成输出y,mxscale_pre按对应的groupIndex分组,分组内第一个维度pad为偶数,组成输出mxscale。
emax:对应数据类型的最大正则数的指数位。
[object Object]undefined
场景2,当scaleAlg为1时:
将长向量按块分,每块长度为k,对每块单独计算一个块缩放因子,再把块内所有元素用同一个映射到目标低精度类型FP8。如果最后一块不足k个元素,把缺失值视为0,按照完整块处理。
找到该块中数值的最大绝对值:
将FP32映射到目标数据类型FP8可表示的范围内,其中是目标精度能表示的最大值。
将块缩放因子转换为FP8格式下可表示的缩放值
从块的浮点缩放因子中提取无偏指数和尾数
为保证量化时不溢出,对指数进行向上取整,且在FP8可表示的范围内:
计算块缩放因子:
计算块转换因子:
应用到量化的最终步骤,对于每个块内元素,,最终输出的量化结果是,其中代表块的缩放因子,这里指,代表块内量化后的数据。
每个算子分为,必须先调用“aclnnGroupedDynamicMxQuantV2GetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnGroupedDynamicMxQuantV2”接口执行计算。
[object Object]
[object Object]
- 确定性计算:
- aclnnGroupedDynamicMxQuantV2默认确定性实现。
[object Object]