| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 2 个月前 | ||
| 14 天前 | ||
| 14 天前 | ||
| 14 天前 | ||
| 14 天前 | ||
| 14 天前 | ||
| 7 个月前 | ||
| 3 个月前 |
SwiGluQuant
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | × |
| Atlas 训练系列产品 | × |
| Kirin X90 处理器系列产品 | √ |
| Kirin 9030 处理器系列产品 | √ |
功能说明
-
算子功能:在SwiGlu激活函数后添加quant操作,实现输入x的SwiGluQuant计算,支持int8或int4量化输出。
-
算子功能差异点说明:相比于aclnnSwiGluQuant接口,aclnnSwiGluQuantV2新增支持groupIndexOptional传入cumsum模式和count模式,通过groupListType控制不同的模式;新增支持非MoE(groupIndexOptional传空)的场景;新增支持int8或int4量化输出yOut,通过dstType控制不同的量化输出数据类型。
-
算子支持范围:当前SwiGluQuant支持MoE场景(传入groupIndexOptional)和非MoE场景(groupIndexOptional传空),SwiGluQuant的输入x和group_index来自于GroupedMatMul算子和MoeInitRouting的输出,通过group_index入参实现MoE分组动态量化、静态per_tensor量化、静态per_channel量化功能。
-
MoE场景动态量化计算公式:
Act=SwiGLU(x)=Swish(A)∗BYtmp0=Act[0 :g[0], :]∗smooth_scales[0 :g[0], :],i=0Ytmpi=Act[g[i] :g[i+1], :]∗smooth_scales[g[i] :g[i+1], :],i∈(0,G)∩Zscale=row_max(abs(Ytmp))/dstTypeScale Act = SwiGLU(x) = Swish(A)*B \\ Y_{tmp}^0 = Act[0\colon g[0],\colon] * smooth\_scales[0\colon g[0],\colon], i=0 \\ Y_{tmp}^i = Act[g[i]\colon g[i+1], \colon] * smooth\_scales[g[i]\colon g[i+1], \colon], i \in (0, G) \cap \mathbb{Z}\\ scale=row\_max(abs(Y_{tmp}))/dstTypeScale
Y=Cast(Mul(Ytmp,Scale)) Y = Cast(Mul(Y_{tmp}, Scale))
其中,A表示输入x的前半部分,B表示输入x的后半部分,g表示group_index,G为group_index的分组数量。int8量化时,dstTypeScale=127dstTypeScale = 127(127是int8的最大值);int4量化时,dstTypeScale=7dstTypeScale = 7(7是int4的最大值)。
-
MoE场景静态量化计算公式:
Act=SwiGLU(x)=Swish(A)∗BYtmp0=Act(0 :g[0], :)∗smooth_scales[0 :g[0], :]+offsets[0 :g[0], :],i=0Ytmpi=Act[g[i] :g[i+1], :]∗smooth_scales[g[i] :g[i+1], :]+offsets[g[i] :g[i+1], :],i∈(0,G)∩Z Act = SwiGLU(x) = Swish(A)*B \\ Y_{tmp}^0 = Act(0\colon g[0],\colon) * smooth\_scales[0\colon g[0],\colon] + offsets[0\colon g[0],\colon], i=0 \\ Y_{tmp}^i = Act[g[i]\colon g[i+1], \colon] * smooth\_scales[g[i]\colon g[i+1], \colon] + offsets[g[i]\colon g[i+1], \colon], i \in (0, G) \cap \mathbb{Z}\\
Y=Cast(Ytmp) Y = Cast(Y_{tmp})
其中,A表示输入x的前半部分,B表示输入x的后半部分,g表示group_index,G为group_index的分组数量。
-
非MoE场景(groupIndexOptional传空)动态量化计算公式:
Act=SwiGLU(x)=Swish(A)∗BYtmp=Act∗smooth_scales(0, :)scale=row_max(abs(Ytmp))/dstTypeScale Act = SwiGLU(x) = Swish(A)*B \\ Y_{tmp} = Act* smooth\_scales(0,\colon)\\ scale=row\_max(abs(Y_{tmp}))/dstTypeScale
Y=Cast(Mul(Ytmp,Scale)) Y = Cast(Mul(Y_{tmp}, Scale))
其中,A表示输入x的前半部分,B表示输入x的后半部分。int8量化时,dstTypeScale=127dstTypeScale = 127(127是int8的最大值);int4量化时,dstTypeScale=7dstTypeScale = 7(7是int4的最大值)。
-
非MoE场景(groupIndexOptional传空)静态量化计算公式:
Act=SwiGLU(x)=Swish(A)∗BYtmp=Act∗smooth_scales(0, :)+offsets(0, :) Act = SwiGLU(x) = Swish(A)*B \\ Y_{tmp} = Act * smooth\_scales(0,\colon) + offsets(0,\colon) \\
Y=Cast(Ytmp) Y = Cast(Y_{tmp})
其中,A表示输入x的前半部分,B表示输入x的后半部分。
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x | 输入 | 公式中的输入x。 | FLOAT16、BFLOAT16、FLOAT | ND |
| smoothScalesOptional | 输入 | 公式中的smooth_scales变量。 | FLOAT | ND |
| offsetsOptional | 输入 | 公式中的输入offsets。 | FLOAT | ND |
| groupIndexOptional | 输入 | 公式中的group_index变量。 | INT32 | ND |
| activateLeft | 属性 |
|
BOOL | - |
| quantModeOptional | 属性 |
|
STRING | - |
| groupListType | 属性 |
|
INT64_T | - |
| dstType | 属性 |
|
INT64_T | - |
| yOut | 输出 | 公式中的y。 | INT8、INT4 | ND |
| scaleOut | 输出 | 公式中的scale。 | FLOAT | ND |
- Kirin X90/Kirin 9030 处理器系列产品:
x数据类型不支持BFLOAT16;y数据类型不支持INT4。
约束说明
无
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| aclnn调用 | test_aclnn_swi_glu_quant | 通过aclnnSwiGluQuant接口方式调用SwiGluQuant算子。 |
| aclnn调用 | test_aclnn_swi_glu_quant_v2 | 通过aclnnSwiGluQuantV2接口方式调用SwiGluQuant算子。 |
| 图模式调用 | - | 通过算子IR构图方式调用SwiGluQuant算子。 |