昇腾社区首页
中文
注册

LayerNormOperation

功能

归一化处理。

当前支持两种:NORM、POSTNORM。

图1 NORM
图2 POSTNORM

约束

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

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

定义

struct LayerNormParam {
    enum LayerNormType {
        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;
        float quantInputScale = 1.0f;
        int quantInputOffset = 0;
        float quantInputAlpha = 1.0f;
    };
    struct PostNormParam {
        QuantType quantType = QUANT_UNDEINFED;
         float epsilon = 1e-5;
         size_t opMode = 0;
         float zoomScaleValue = 1.0f;
         float quantInputScale = 1.0f;
         int quantInputOffset = 0;
         float quantInputAlpha = 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,决定从第几维开始把后面的维度按轴合并。

quantInputScale

量化参数,非对称量化尺度变化(调整fp的输出),推荐值由量化工具(如ModelSlim)计算得出。

quantInputOffset

量化参数,非对称量化偏移(输出后加上偏移),推荐值由量化工具(如ModelSlim)计算得出。

quantInputAlpha

量化参数,输出系数缩放因子。

表2 postNormParam成员

参数

描述

quantType

量化类型。

epsilon

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

opMode

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

zoomScale

缩放因子。

quantInputScale

量化参数,非对称量化尺度变化(调整fp的输出),推荐值由量化工具(如ModelSlim)计算得出。

quantInputOffset

量化参数,非对称量化偏移(输出后加上偏移),推荐值由量化工具(如ModelSlim)计算得出。

quantInputAlpha

量化参数,输出系数缩放因子。

输入

表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维。

表4 POSTNORM输入

参数

维度

数据类型

格式

描述

x

[-1,…,n]

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

float16

ND

-

residual

[-1,…,n]

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

float16

ND

-

gamma

[1,n]

float16

ND

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

beta

[1,n]

float16

ND

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

输出

表5 NORM输出

参数

维度

数据类型

格式

描述

output

[-1,…,-1]

float16/float

ND

-

outputQuant

[-1,…,-1]

int8

ND

quantType = QUANT_INT8时才输出。

表6 POSTNORM输出

参数

维度

数据类型

格式

描述

output

[-1,…,n]

float16

ND

-

outputQuant

[-1,…,n]

int8

ND

quantType = QUANT_INT8时才输出。