LayerNormWithStrideOperation

功能

为了使LayerNorm支持非连续Tensor,将x tensor通过(shape、strides、offset)表示。strides描述某个维度上相邻两个元素的间隔,offset表示这个Tensor的首元素相对addr的偏移。

硬件支持情况

硬件型号

支持情况

Atlas 800I A2 推理产品/Atlas A2 训练系列产品

支持

Atlas A3 推理系列产品/Atlas A3 训练系列产品

支持

定义

struct LayerNormWithStrideParam {
    enum LayerNormType : int {
        LAYER_NORM_UNDEFINED = 0, 
        LAYER_NORM_NORM
    };
    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};
    };
    LayerNormType layerType = LAYER_NORM_UNDEFINED;
    NormParam normParam;
    uint8_t rsv[8] = {0};
};

参数列表

成员名称

描述

layerType

归一化类型。

  • LAYER_NORM_UNDEFINED:默认值,未定义。
  • LAYER_NORM_NORM:norm类型。

normParam

norm参数,具体请参见表1 normParam成员

rsv[8]

预留参数。

表1 normParam成员

成员名称

类型

默认值

取值范围

是否必选

描述

quantType

QuantType

QUANT_UNDEFINED

QUANT_UNDEFINED

量化类型QuantType。当前仅支持QUANT_UNDEFINED

epsilon

float

1e-5

大于0

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

beginNormAxis

int32_t

0

beginNormAxis 需要小于 tensor x的维度大小。为负数时,与tensor x维度大小之和需要大于0

归一化的维度,从第几维开始norm,同时决定gamma和beta的维度。不启用,只支持0。

beginParamAxis

int32_t

0

beginParamAxis 需要大于等于0小于 tensor x的维度大小。

归一化的维度,决定从第几维开始把后面的维度按轴合并。不启用,只支持0。

dynamicQuantType

DynamicQuantType

DYNAMIC_QUANT_UNDEFINED

DYNAMIC_QUANT_UNDEFINED

只支持DYNAMIC_QUANT_UNDEFINED

输入

参数

维度

数据类型

格式

描述

x

[dim_0, dim_1, ..., dim_n]

float16/bf16

ND

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

gamma

[1, dim_n]

float16/bf16

ND

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

beta

[1, dim_n]

float16/bf16

ND

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

xStrides

[n+1]

int32

ND

x的stride步长,最后一维的值为1,x_shape表示x的维度数,传入方式为host tensor,大于0,最后一个数需为1。

xOffset

[1]

int32

ND

x的offset,需大于0,默认值为0,传入方式为host tensor。

输出

参数

维度

数据类型

格式

描述

output

[dim_0, dim_1, ..., dim_n]

float16/bf16

ND

输出tensor,与x的维度保持一致。