昇腾社区首页
中文
注册
开发者
下载

aclnnSwiGluQuantV2

产品支持情况

[object Object]undefined

功能说明

  • 接口功能:在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))/dstTypeScaleAct = 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)ZAct = 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=Actsmooth_scales(0, ⁣:)scale=row_max(abs(Ytmp))/dstTypeScaleAct = 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=Actsmooth_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的后半部分。

函数原型

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

[object Object]
[object Object]

aclnnSwiGluQuantV2GetWorkspaceSize

  • 参数说明:

    [object Object]
  • 返回值:

    aclnnStatus:返回状态码,具体参见。 第一段接口会完成入参校验,出现以下场景时报错:

    [object Object]

aclnnSwiGluQuantV2

  • 参数说明:

    [object Object]
  • 返回值:

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

约束说明

  • 确定性计算:
    • aclnnSwiGluQuantV2默认确定性实现。

调用示例

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

[object Object]