- [object Object]Ascend 950PR/Ascend 950DT[object Object]:支持
- [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:不支持
- [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:不支持
- [object Object]Atlas 200I/500 A2 推理产品[object Object]:不支持
- [object Object]Atlas 推理系列产品[object Object]:不支持
- [object Object]Atlas 训练系列产品[object Object]:不支持
SwigluGroupQuant算子实现SwiGLU激活函数与分组量化融合计算。支持四种量化模式:
- quant_mode=0:Block Quant(FP8块量化,固定128元素分组)
- quant_mode=1:MX Quant(FP8 MX量化,固定32元素分组)
- quant_mode=2:HiFp8 Static Quant(HiFp8静态量化)
- quant_mode=3:HiFp8 Dynamic Quant(HiFp8动态量化)
当提供[object Object]时,用于动态计算实际处理的token数量:
其中:
- 为MoE专家分组数
- 为输入张量的第一维(预设batch size)
- 后续所有步骤仅处理前行数据
MoE场景说明:在MoE推理中,不同专家可能处理不同数量的token,group_index允许动态调整处理范围,避免处理空数据。
输入张量沿最后一维切分为两部分:
当[object Object]时,对输入进行限制:
其中为[object Object]。
Clamp的作用:
- (门控分支)限制为正值范围,防止sigmoid梯度消失
- (线性分支)限制为对称范围,防止数值溢出
SwiGLU激活函数定义(逐元素计算):
其中Swish函数:
完整计算步骤分解:
当提供[object Object]时,对SwiGLU输出进行加权:
其中为第个token的weight值。
MoE场景:weight来自专家路由器的softmax输出,表示该token对当前专家的权重。
分组划分:将输出沿最后一维按128元素为一组划分:
每个组。
非有限值屏蔽与绝对值计算:
屏蔽原理:NaN的特性是[object Object];同时[object Object]也会得到NaN,因此该步骤在计算amax时屏蔽NaN和Inf。
Scale计算:
对于第个组(包含128个连续元素):
其中取值:
- FP8 E4M3FN:
- FP8 E5M2:
Scale输出与InvScale计算:
当[object Object]时:
当[object Object]时,将scale向上取整到2的幂:
其中写入FLOAT32类型的scale输出。
量化计算:
若 为NaN或Inf,实现会使用原始 作为FP8 cast输入:
其中[object Object]为FP32到FP8的类型转换,采用**RINT(就近舍入)**模式。
MX量化原理:采用E8M0 Scale + FP8 Data的组合。
分组方式:每32元素为一组:
Amax计算:
原始Scale计算:
其中取值:
- FP8 E4M3FN:
- FP8 E5M2:
quant_mode=1仅支持[object Object],将原始scale向上取整到2的幂:
等价于基于FP32位模式计算:
E8M0 Scale编码:
其中写入FLOAT8_E8M0类型的scale输出,表示的实际scale值为。
InvScale计算:
量化计算:
静态量化说明:使用预先提供的[object Object]对加权后的SwiGLU输出进行缩放量化。
情况1:无GroupIndex(groupIndex为空):
其中[object Object]为HiFloat8类型转换函数。
情况2:有GroupIndex(groupIndex非空):
设为MoE专家分组数,表示第个专家处理的token数量。
计算每个group的起止索引:
对于第个group,使用对应的缩放因子进行量化:
MoE场景说明:在MoE推理中,不同专家处理不同数量的token,groupIndex用于标识每个专家处理的token范围,invScale为每个专家预先计算的静态缩放因子。
动态量化说明:根据加权后的SwiGLU输出动态计算缩放因子进行量化。
情况1:无GroupIndex(groupIndex为空):
计算全局绝对值最大值:
其中为数值稳定性常数。
计算缩放因子:
其中为[object Object],表示HiFloat8类型的最大有限值。
量化计算:
其中[object Object]为HiFloat8类型转换函数。
情况2:有GroupIndex(groupIndex非空):
设为MoE专家分组数,表示第个专家处理的token数量。
计算每个group的起止索引:
对于第个group,提取对应的数据:
计算该group的绝对值最大值:
计算该group的缩放因子:
对该group进行量化:
MoE场景说明:在MoE推理中,不同专家处理不同数量的token,groupIndex用于标识每个专家处理的token范围,每个group独立计算缩放因子以适应不同数据分布。
每个算子分为,必须先调用“aclnnSwigluGroupQuantGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnSwigluGroupQuant”接口执行计算。
确定性计算:aclnnSwigluGroupQuant默认确定性实现。
quantMode为0时,仅支持FP8输出,blockSize支持0或128。
quantMode为1时,支持FP8/FP4输出,blockSize支持0或32,roundScale必须为true。
quantMode为2或3时,支持HIFP8量化输出,dstType, blockSize和roundScale不生效。输入x的维度为[T, D]或[B, S, D],需满足以下规格约束:
[object Object]undefined
dstType为FLOAT4_E2M1或FLOAT4_E1M2时,必须使用quantMode=1。
yScale的数据类型必须与quantMode匹配:quantMode=0或3时数据类型为FLOAT32,quantMode=1时数据类型为FLOAT8_E8M0。