| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 7 天前 | ||
| 25 天前 | ||
| 25 天前 | ||
| 17 天前 | ||
| 25 天前 | ||
| 13 天前 | ||
| 7 个月前 | ||
| 8 天前 |
ClippedSwiglu
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | × |
| Atlas 训练系列产品 | × |
功能说明
-
接口功能:带截断的Swish门控线性单元激活函数,实现x的SwiGlu计算。本算子相较于SwiGlu算子,新增了部分输入参数:groupIndex、alpha、limit、bias、interleaved,用于支持GPT-OSS模型使用的变体SwiGlu以及MoE模型使用的分组场景。
-
计算流程:
对给定的输入张量x,其维度为[a,b,c,d,e,f,g…],算子ClippedSwiglu对其进行以下计算:
-
将x基于输入参数dim进行合轴,合轴后维度为[pre,cut,after]。其中cut轴为合轴之后需要切分为两个张量的轴,切分方式分为前后切分或者奇偶切分;pre,after可以等于1。例如当dim为3,合轴后x的维度为[abc,d,efg*…]。此外,由于after轴的元素为连续存放,且计算操作为逐元素的,因此将cut轴与after轴合并,得到x的维度为[pre,cut]。
-
根据输入参数group_index,对x的pre轴进行过滤处理,公式如下:
sum=Sum(group_index)sum = \text{Sum}(group\_index)
x=x[:sum,:]x = x[ : sum, : ]
其中sum表示group_index的所有元素之和。当不输入group_index时,跳过该步骤。
-
根据输入参数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 : ]
-
根据输入参数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=A∗sigmoid(alpha∗A)y\_glu = A * sigmoid(alpha * A)
y=y_glu∗(B+bias)y = y\_glu * (B + bias)
-
重塑输出张量y的维度数量与合轴前的x的维度数量一致,dim轴上的大小为x的一半,其他维度与x相同。
-
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x | 输入 | 不支持空Tensor。公式中的输入x。维度必须大于0且必须在入参dim对应维度上是偶数。输入不支持包含±inf或nan。 | FLOAT、FLOAT16、BFLOAT16 | ND |
| group_index | 可选输入 | 不支持空Tensor。公式中的输入group_index。维度必须是1维,且元素个数必须小于等于8192。输入不支持包含±inf或nan。 | INT64 | - |
| dim | 可选属性 | 公式中的输入dim,表示对x进行合轴以及切分的维度序号。取值范围为[-x.dim(), x.dim()-1]。默认为-1。 | INT64 | - |
| alpha | 可选属性 | 公式中的输入alpha,表示变体SwiGlu使用的参数。默认为1.702。 | FLOAT | - |
| limit | 可选属性 | 公式中的输入limit,表示变体SwiGlu使用的门限值。必须大于0。默认为7.0。 | FLOAT | - |
| bias | 可选属性 | 公式中的输入bias,表示变体SwiGlu使用的偏差参数。默认为1.0。 | FLOAT | - |
| interleaved | 可选属性 | 公式中的输入interleaved,设置为true表示对x进行奇偶切分,设置为false表示对x进行前后切分。默认为true。 | BOOL | - |
| y | 输出 | 不支持空Tensor。公式中的输出y。维度数需与输入x一致,在入参dim对应维度上为x的一半,其他维度上与x一致。 | FLOAT、FLOAT16、BFLOAT16 | ND |
约束说明
无。
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| aclnn调用 | test_aclnn_clipped_swiglu | 通过aclnnClippedSwiglu接口方式调用ClippedSwiglu算子。 |