接口功能:在Swish门控线性单元激活函数后添加DynamicMxQuant操作,实现x的SwigluMxQuant计算。
swigluMode为0时的计算公式:
其中,A[object Object]i[object Object]表示x[object Object]i[object Object]的前半部分,B[object Object]i[object Object]表示x[object Object]i[object Object]的后半部分。
swigluMode为1时的计算公式:
其中,x_glu表示x[object Object]i[object Object]的偶数索引部分,x_linear表示x[object Object]i[object Object]的奇数索引部分。
场景1,当scaleAlg为0时,DynamicMxQuant计算逻辑:
- 将输入x在axis维度上按k = blocksize = 32个数分组,一组k个数 动态量化为 , k = blocksize
量化后的 按对应的 的位置组成输出yOut,mxscale按对应的axis维度上的分组组成输出mxscaleOut。
emax: 对应数据类型的最大正则数的指数位。
[object Object]undefined
场景2,当scaleAlg为1时,只涉及FP8类型,DynamicMxQuant计算逻辑:
- 将长向量按块分,每块长度为k,对每块单独计算一个块缩放因子,再把块内所有元素用同一个映射到目标低精度类型FP8。如果最后一块不足k个元素,把缺失值视为0,按照完整块处理。
- 找到该块中数值的最大绝对值:
- 将FP32映射到目标数据类型FP8可表示的范围内,其中是目标精度能表示的最大值
- 将块缩放因子转换为FP8格式下可表示的缩放值
- 从块的浮点缩放因子中提取无偏指数和尾数
- 为保证量化时不溢出,对指数进行向上取整,且在FP8可表示的范围内:
- 计算块缩放因子:
- 计算块转换因子:
- 应用到量化的最终步骤,对于每个块内元素,,最终输出的量化结果是,其中代表块的缩放因子,这里指,代表块内量化后的数据
每个算子分为,必须先调用“aclnnSwigluMxQuantGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnSwigluMxQuant”接口执行计算。
确定性计算:
- aclnnSwigluMxQuant默认确定性实现。
输入x对应activateDim的维度需要是2的倍数,且x的维数必须大于1维。
当输出yOut的数据类型为FLOAT4_E2M1、FLOAT4_E1M2时,yOut的最后一维需要是2的倍数,x的最后一维需要是4的倍数。
groupIndexOptional所有元素之和不能大于输入x除尾轴之外的剩余轴的乘积,groupIndexOptional的每个元素需要大于0。
输出yOut和mxscaleOut超出groupIndexOptional所有元素之和的部分未进行清理,该部分内存为垃圾数据。