昇腾社区首页
中文
注册

LayerNormWithStrideOperation(代码开放)

产品支持情况

硬件型号

是否支持

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

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

Atlas 训练系列产品

x

Atlas 推理系列产品

x

Atlas 200I/500 A2 推理产品

x

功能说明

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

定义

struct LayerNormWithStrideParam {
    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};
};

参数列表

成员名称

描述

layerType

归一化类型。

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

normParam

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

preNormParam

PRENORM参数,具体请参见表2

postNormParam

POSTNORM参数,具体请参见表3

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

表2 preNormParam成员

成员名称

类型

默认值

取值范围

是否必选

描述

quantType

QuantType

QUANT_UNQUANT

QUANT_UNQUANT

量化类型。当前仅支持QUANT_UNQUANT。

epsilon

float

1e-5

大于0

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

opMode

uint64_t

0

-

  • 0:高精度 。
  • 1:高性能(暂不支持)。

zoomScaleValue

float

1.0f

-

缩放因子。

rsv[20]

uint8_t

{0}

[0]

预留参数。

表3 postNormParam成员

成员名称

类型

默认值

取值范围

是否必选

描述

quantType

QuantType

QUANT_UNQUANT

QUANT_UNQUANT

QUANT_INT8

量化类型。当前支持以下类型。

  • QUANT_UNQUANT。
  • QUANT_INT8。

epsilon

float

1e-5

大于0

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

opMode

uint64_t

0

-

  • 0:高精度 。
  • 1:高性能(暂不支持)。

zoomScaleValue

float

1.0f

-

缩放因子。

rsv[20]

uint8_t

{0}

[0]

预留参数。

输入

参数

维度

数据类型

格式

描述

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的维度保持一致。

约束说明

暂不支持preNormParam和postNormParam成员。