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

aclnnSwiGluQuant

产品支持情况

[object Object]undefined

功能说明

  • 接口功能:在SwiGlu激活函数后添加quant操作,实现输入x的SwiGluQuant计算

  • 算子支持范围:当前SwiGluQuant仅支持MoE场景,SwiGluQuant的输入x和group_index来自于GroupedMatMul算子和MoeInitRouting的输出,通过group_index入参实现MoE分组动态量化、静态per_tensor量化、静态per_channel量化功能。

  • 动态量化计算公式:

    Act=SwiGLU(x)=Swish(A)BYtmp[0 ⁣:g[0], ⁣:]=Act[0 ⁣:g[0], ⁣:]smooth_scales[0, ⁣:],i=0Ytmp[g[i] ⁣:g[i+1], ⁣:]=Act[g[i] ⁣:g[i+1], ⁣:]smooth_scales[i+1, ⁣:],i(0,G)Zscale=row_max(abs(Ytmp))/127Act = SwiGLU(x) = Swish(A)*B \\ Y_{tmp}[0\colon g[0],\colon] = Act[0\colon g[0],\colon] * smooth\_scales[0,\colon], i=0 \\ Y_{tmp}[g[i]\colon g[i+1], \colon] = Act[g[i]\colon g[i+1], \colon] * smooth\_scales[i+1, \colon], i \in (0, G) \cap \mathbb{Z}\\ scale=row\_max(abs(Y_{tmp}))/127 Y=Cast(Mul(Ytmp,Scale))Y = Cast(Mul(Y_{tmp}, Scale))

    其中,A表示输入x的前半部分,B表示输入x的后半部分,g表示group_index,G为group_index的分组数量。

  • 静态量化计算公式:

    Act=SwiGLU(x)=Swish(A)BYtmp[0 ⁣:g[0], ⁣:]=Act[0 ⁣:g[0], ⁣:]smooth_scales[0, ⁣:]+offsets[0, ⁣:],i=0Ytmp[g[i] ⁣:g[i+1], ⁣:]=Act[g[i] ⁣:g[i+1], ⁣:]smooth_scales[i+1, ⁣:]+offsets[i+1, ⁣:],i(0,G)ZAct = SwiGLU(x) = Swish(A)*B \\ Y_{tmp}[0\colon g[0],\colon] = Act[0\colon g[0],\colon] * smooth\_scales[0,\colon] + offsets[0,\colon], i=0 \\ Y_{tmp}[g[i]\colon g[i+1], \colon] = Act[g[i]\colon g[i+1], \colon] * smooth\_scales[i+1, \colon] + offsets[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的分组数量。

函数原型

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

[object Object]
[object Object]

aclnnSwiGluQuantGetWorkspaceSize

  • 参数说明:

    [object Object]
  • 返回值:

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

    [object Object]

aclnnSwiGluQuant

  • 参数说明:

    [object Object]
  • 返回值: aclnnStatus:返回状态码,具体参见

约束说明

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

调用示例

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

[object Object]