LayerNormOperation
Applicable Products
|
Hardware Model |
Supported |
|---|---|
|
Atlas 350 accelerator cards |
√ |
|
|
√ |
|
|
√ |
|
|
x |
|
|
x |
|
|
x |
Description
Normalizes the input data at the network layer to the [0, 1] range. Currently, three normalization modes are supported: NORM, PRENORM, and POSTNORM.
Formula
- Norm
Standard LayerNorm:
Figure 1 LayerNorm calculating formula
- PostNorm
Fuses the add and layernorm operators to add x and residual and then perform layernorm normalization.
Figure 2 Add+LayerNorm calculating formula
- PreNorm
Fuses add and layernorm operators to add x and residual and then perform layernorm normalization. The formula is the same as that of PostNorm. The difference is that this mode outputs the adding result of x and residual.
Definition
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
struct LayerNormParam { enum LayerNormType : int { LAYER_NORM_UNDEFINED = 0, LAYER_NORM_NORM, LAYER_NORM_PRENORM, LAYER_NORM_POSTNORM, LAYER_NORM_MAX, }; struct NormParam { QuantType quantType = QUANT_UNQUANT; float epsilon = 1e-5; int32_t beginNormAxis = 0; int32_t beginParamsAxis = 0; DynamicQuantType dynamicQuantType = DYNAMIC_QUANT_UNDEFINED; uint8_t rsv[20] = {0}; }; struct PreNormParam { QuantType quantType = QUANT_UNQUANT; float epsilon = 1e-5; uint64_t opMode = 0; float zoomScaleValue = 1.0f; uint8_t rsv[20] = {0}; }; struct PostNormParam { QuantType quantType = QUANT_UNQUANT; float epsilon = 1e-5; uint64_t opMode = 0; float zoomScaleValue = 1.0f; uint8_t rsv[20] = {0}; }; LayerNormType layerType = LAYER_NORM_UNDEFINED; NormParam normParam; PreNormParam preNormParam; PostNormParam postNormParam; uint8_t rsv[8] = {0}; }; |
Parameters
|
Member |
Description |
|---|---|
|
layerType |
Normalization type.
|
|
normParam |
NORM parameters. For details, see Table 1. |
|
preNormParam |
PRENORM parameters. For details, see Table 2. |
|
postNormParam |
POSTNORM parameters. For details, see Table 3. |
|
rsv[8] |
Reserved |
|
Parameter |
Type |
Default Value |
Description |
|---|---|---|---|
|
quantType |
QuantType |
QUANT_UNQUANT |
Quantization type. Currently, the following types are supported:
|
|
epsilon |
float |
1e-5 |
Epsilon, which is added to the denominator during normalization to prevent division by 0. |
|
beginNormAxis |
int32_t |
0 |
Normalization dimension, indicating the dimension from which the normalization starts. The default value is 0. It also determines the input gamma and beta dimensions. |
|
beginParamsAxis |
int32_t |
0 |
Normalization dimension, indicating the dimension from which subsequent dimensions are combined by axis. The default value is 0. |
|
dynamicQuantType |
DynamicQuantType |
DYNAMIC_QUANT_UNDEFINED |
Dynamic quantization type. The default value is DYNAMIC_QUANT_UNDEFINED. The current version does not support asymmetric dynamic quantization. |
|
rsv[20] |
uint8_t |
{0} |
Reserved |
In 8.0.RC2 and later versions, normParam does not support the quantInputScale, quantInputOffset and quantInputAlpha parameters.
|
Parameter |
Type |
Default Value |
Description |
|---|---|---|---|
|
quantType |
QuantType |
QUANT_UNQUANT |
Quantization type. Currently, only QUANT_UNQUANT is supported. |
|
epsilon |
float |
1e-5 |
Epsilon, which is added to the denominator during normalization to prevent division by 0. |
|
opMode |
uint64_t |
0 |
|
|
zoomScaleValue |
float |
1.0f |
Scaling factor |
|
rsv[20] |
uint8_t |
{0} |
Reserved |
|
Parameter |
Type |
Default Value |
Description |
|---|---|---|---|
|
quantType |
QuantType |
QUANT_UNQUANT |
Quantization type. Currently, the following types are supported:
|
|
epsilon |
float |
1e-5 |
Epsilon, which is added to the denominator during normalization to prevent division by 0. |
|
opMode |
uint64_t |
0 |
|
|
zoomScaleValue |
float |
1.0f |
Scaling factor |
|
rsv[20] |
uint8_t |
{0} |
Reserved |
In 8.0.RC2 and later versions, postNormParam does not support the quantInputScale, quantInputOffset and quantInputAlpha parameters.
Constraints
- beginNormAxis must be less than the dimension size of tensor x. If the value is a negative number, the sum of the value and the tensor x dimension size must be greater than 0.
- Norm's dynamic quantization supports only DYNAMIC_QUANT_SYMMETRIC. The last dimension must be less than or equal to 12288.
- Except the scale and offset tensors in the quantization scenario, the last dimensions of other tensors are the same.
- Atlas 350 accelerator cards: Only LAYER_NORM_NORM is supported, and only non-quantization use cases are supported.
Functions
- Non-quantization
- Basic layernorm
- add+layernorm fusion (prenorm, postnorm)
- Quantization
- layernorm quantization
- layernorm symmetric dynamic quantization
- add+layernorm quantization (postnorm)