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

aclnnClippedSwiglu

产品支持情况

[object Object]undefined

功能说明

  • 算子功能:带截断的Swish门控线性单元激活函数,实现x的SwiGlu计算。本接口相较于aclnnSwiGlu,新增了部分输入参数:groupIndex、alpha、limit、bias、interleaved,用于支持GPT-OSS模型使用的变体SwiGlu以及MoE模型使用的分组场景。

  • 计算公式:

    对给定的输入张量 x ,其维度为[a,b,c,d,e,f,g…],aclnnClippedSwiglu对其进行以下计算:

    1. 将 x 基于输入参数 dim 进行合轴,合轴后维度为[pre,cut,after]。其中 cut 轴为合轴之后需要切分为两个张量的轴,切分方式分为前后切分或者奇偶切分;pre,after 可以等于1。例如当 dim 为3,合轴后 x 的维度为[a * b * c, d, e * f * g * …]。此外,由于after轴的元素为连续存放,且计算操作为逐元素的,因此将cut轴与after轴合并,得到x的维度为[pre,cut]。

    2. 根据输入参数 group_index, 对 x 的pre轴进行过滤处理,公式如下:

      sum=Sum(group_index)sum = \text{Sum}(group\_index) x=x[:sum,:]x = x[ : sum, : ]

      其中sum表示group_index的所有元素之和。当不输入 group_index 时,跳过该步骤。

    3. 根据输入参数 interleaved,对 x 进行切分,公式如下:

      当 interleaved 为 true 时,表示奇偶切分:

      A=x[:,::2]A = x[ : , : : 2] B=x[:,1::2]B = x[ : , 1 : : 2]

      当 interleaved 为 false 时,表示前后切分:

      h=x.shape[1]//2h = x.shape[1] // 2 A=x[:,:h]A = x[ : , : h] B=x[:,h:]B = x[ : , h : ]
    4. 根据输入参数 alpha、limit、bias 进行变体SwiGlu计算,公式如下:

      A=A.clamp(min=None,max=limit)A = A.clamp(min=None, max=limit) B=B.clamp(min=limit,max=limit)B = B.clamp(min=-limit, max=limit) y_glu=Asigmoid(alphaA)y\_glu = A * sigmoid(alpha * A) y=y_glu(B+bias)y = y\_glu * (B + bias)
    5. 重塑输出张量y的维度数量与合轴前的x的维度数量一致,dim轴上的大小为x的一半,其他维度与x相同。

函数原型

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

[object Object]
[object Object]

aclnnClippedSwigluGetWorkspaceSize

  • 参数说明

    [object Object]
  • 返回值

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

    第一段接口会完成入参校验,出现以下场景时报错:

    [object Object]

aclnnClippedSwiglu

  • 参数说明:

    [object Object]
  • 返回值

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

约束说明

  • 确定性计算:
    • aclnnClippedSwiglu默认为确定性实现,暂不支持非确定性实现,即便通过确定性计算配置也不会生效。

调用示例

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

[object Object]