ActivationOperation

功能

激活函数,可以引入非线性因素。

图1 ActivationOperation

定义

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
struct ActivationParam {
    enum GeLUMode : int{
        TANH_MODE = 0,
        NONE_MODE,
    };
    ActivationType activationType=ACTIVATION_UNDEFINED;
    float scale = 1.0f; // for Swish
    int32_t dim = -1;   // for Swiglu
    GeLUMode geluMode = TANH_MODE;
    uint8_t rsv[8] = {0};
};

参数列表

成员名称

类型

默认值

描述

activationType

ActivationType

ACTIVATION_UNDEFINED

激活类型。

  • ACTIVATION_UNDEFINED:未定义。
  • ACTIVATION_RELU:RELU激活类型。
  • ACTIVATION_GELU:GELU激活类型。
  • ACTIVATION_FAST_GELU:快速运算的Gelu激活类型。
  • ACTIVATION_SWISH:SWISH激活类型。
  • ACTIVATION_LOG:LOG激活类型。
  • ACTIVATION_SWIGLU_FORWARD:Swiglu正向激活函数。
  • ACTIVATION_SWIGLU_BACKWARD:Swiglu_forward反向激活函数,求梯度时使用。
  • ACTIVATION_SIGMOID:Sigmoid激活类型。
  • ACTIVATION_FASTER_GELU_FORWARD:FASTER_GELU_FORWARD激活类型。
  • ACTIVATION_MAX:枚举最大值, 非激活类型。

scale

float

1.0f

Swish激活函数中的缩放系数。

dim

int32_t

-1

Swiglu正反向激活函数使用, 延最后一维切分。

geluMode

GeLUMode

TANH_MODE

Gelu模型选择。

  • TANH_MODE: Tanh近似计算。
  • NONE_MODE: 非近似计算。

rsv[8]

uint8_t

{0}

预留参数。

RELU激活类型输入输出描述

参数

维度

数据类型

格式

描述

x

[dim_0,dim_1,... ,dim_n]

float

ND

输入

output

[dim_0,dim_1,... ,dim_n]

float

ND

输出

和输入维度/类型/格式相同。

FAST_GELU激活类型输入输出描述

参数

维度

数据类型

格式

描述

x

[dim_0,dim_1,... ,dim_n]

float16

ND

输入

output

[dim_0,dim_1,... ,dim_n]

float16

ND

输出

和输入维度/类型/格式相同。

LOG激活类型输入输出描述

参数

维度

数据类型

格式

描述

x

[dim_0,dim_1,... ,dim_n]

float16/float

ND

输入

output

[dim_0,dim_1,... ,dim_n]

float16/float

ND

输出

和输入维度/类型/格式相同。

SIGMOID激活类型输入输出描述

参数

维度

数据类型

格式

描述

x

[dim_0,dim_1,... ,dim_n]

float16/bf16

ND

输入

output

[dim_0,dim_1,... ,dim_n]

float16/bf16

ND

输出

和输入维度/类型/格式相同。

SWISH激活类型输入输出描述

参数

维度

数据类型

格式

描述

x

[dim_0,dim_1,... ,dim_n]

float16/bf16

ND

输入

output

[dim_0,dim_1,... ,dim_n]

float16/bf16

ND

输出

和输入维度/类型/格式相同。

GELU激活类型输入输出描述

参数

维度

数据类型

格式

描述

x

[dim_0,dim_1,... ,dim_n]

float16/float/bf16

ND/NZ

输入

output

[dim_0,dim_1,... ,dim_n]

float16/float/bf16

ND/NZ

输出

和输入维度/类型/格式相同。

SWIGLU_FORWARD激活类型输入输出描述

参数

维度

数据类型

格式

描述

x

[dim_0,dim_1,... ,dim_n]

float16/float/bf16

ND/NZ

输入

“activationType”为ACTIVATION_SWIGLU_FORWARD时:对于 Atlas 推理系列产品 ,最后一维需为32的倍数。

output

[dim_0,dim_1,... ,dim_n]

float16/float/bf16

ND/NZ

输出

和输入维度/类型/格式相同,其dim维所对应的大小是输入的一半。

SWIGLU_BACKWARD激活类型输入输出描述

参数

维度

数据类型

格式

描述

x1

[dim_0,dim_1,... ,dim_n]

float16/float/bf16

ND

“activationType”为ACTIVATION_SWIGLU_BACKWARD时,不支持 Atlas 推理系列产品

x2

[dim_0,dim_1,... ,dim_n]

float16/float/bf16

ND

输入

和x1的维度/类型/格式相同,其dim维所对应的大小是输入x1的2倍。

output

[dim_0,dim_1,... ,dim_n]

float16/float/bf16

ND

输出

和x1的维度/类型/格式相同,其dim维所对应的大小是输入x1的2倍。

FASTER_GELU_FORWARD激活类型输入输出

参数

维度

数据类型

格式

描述

input

[dim_0,dim_1,... ,dim_n]

float/float16/bf16

ND / NZ

输入tensor。

output

[dim_0,dim_1,... ,dim_n]

float/float16/bf16

ND / NZ

输出tensor。维度、数据类型、数据格式与输入tensor一致。

规格约束

激活函数类型请参考ActivationType

RELU激活类型功能

GELU激活类型功能

FAST_GELU激活类型功能

SWISH激活类型功能

LOG激活类型功能

SWIGLU_FORWARD激活类型功能

对于 Atlas 推理系列产品 ,仅支持32位对齐的数据。

SWIGLU_BACKWARD激活类型功能

当前仅支持 Atlas 800I A2 推理产品 / Atlas A2 训练系列产品

SIDMOD激活类型功能

FASTER_GELU_FORWARD激活类型功能