LayerNormOperation

功能

归一化处理。

当前支持两种:NORM、POSTNORM。

图1 NORM
图2 POSTNORM

约束

beginNormAxis维度小于等于输入x的维度。

当layerType为LAYER_NORM_POSTNORM时,所有输入输出Tensor的最后一维大小相等并且小于或等于6656。

定义

struct LayerNormParam {
    enum LayerNormType : int {
        LAYER_NORM_UNDEFINED = 0,
        LAYER_NORM_NORM,
        LAYER_NORM_PRENORM,
        LAYER_NORM_POSTNORM,
    };
    struct NormParam {
        QuantType quantType = QUANT_UNDEINFED;
        float epsilon = 1e-5;
        int32_t beginNormAxis = 0;
        int32_t beginParamsAxis = 0;
    };
    struct PostNormParam {
        QuantType quantType = QUANT_UNDEINFED;
        float epsilon = 1e-5;
        size_t opMode = 0; // 0: high precision  1: high performance, also for quant
        float zoomScaleValue = 1.0f;
    };
    LayerNormType layerType = LAYER_NORM_UNDEFINED;
    NormParam normParam;
    PostNormParam postNormParam;
};

成员

成员名称

描述

layerType

归一化类型:NORM、PRENORM(当前不支持)、POSTNORM。

normParam

NORM参数。

postNormParam

POSTNORM参数。

表1 normParam成员

参数

描述

quantType

量化类型。

epsilon

Epsilon,归一化时加在分母上防止除零。

beginNormAxis

归一化的维度,默认值为0,从第几维开始norm,同时决定输入gamma和beta维度。

beginParamsAxis

归一化的维度,默认值为0,决定从第几维开始把后面的维度按轴合并。

表2 postNormParam成员

参数

描述

quantType

量化类型。

epsilon

Epsilon,归一化时加在分母上防止除零。

opMode

  • 0:高精度。
  • 1:高性能。

zoomScale

缩放因子。

输入

表3 NORM输入

参数

维度

数据类型

格式

描述

x

[-1,…,-1]

-1表示当前维度的大小没有约束。

float16/float

ND

只有NORM支持float。

gamma

[beginNormAxis:]

Or

[1,-1]

-1表示当前维度的大小没有约束。

float16/float

ND

NORM float16/float,根据beginNormAxis确定维度其余均2维。

beta

[beginNormAxis:]

Or

[1,-1]

-1表示当前维度的大小没有约束。

float16/float

ND

NORM float16/float,根据beginNormAxis确定维度其余均2维。

scale

[1]

float16

ND

quantType = QUANT_INT8时才输入。

offset

[1]

int8

ND

quantType = QUANT_INT8时才输入。

表4 POSTNORM输入

参数

维度

数据类型

格式

描述

x

[-1,…,n]

-1表示当前维度的大小没有约束。

float16

ND

最后一维的大小要32字节对齐。

residual

[-1,…,n]

-1表示当前维度的大小没有约束。

float16

ND

最后一维的大小要32字节对齐。

gamma

[1,n]

float16

ND

最后一维的大小要32字节对齐。

beta

[1,n]

float16

ND

最后一维的大小要32字节对齐。

scale

[1]

float16

ND

quantType = QUANT_INT8时才输入。

offset

[1]

int8

ND

quantType = QUANT_INT8时才输入。

输出

表5 NORM输出

参数

维度

数据类型

格式

描述

output

[-1,…,-1]

float16, float, int8

ND

quantType = QUANT_INT8时数据类型为int8,quantType = QUANT_UNDEFINED时数据类型为float16或float

表6 POSTNORM输出

参数

维度

数据类型

格式

描述

output

[-1,…,n]

float16

ND

-

outputQuant

[-1,…,n]

int8

ND

quantType = QUANT_INT8时才输出。