---
title: LayerNormWithStrideOperation
description: "| 硬件型号 | 是否支持 |"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/ascendtb/ascendtb_01_0155.html
sourcePath: /source/zh/canncommercial/900/API/ascendtb/ascendtb_01_0155.html
indexId: 098b0076e30aab63e32437712557fc7694e2f974c881789bcb6b111d079801bb64
---
# LayerNormWithStrideOperation

#### 产品支持情况

| 硬件型号 | 是否支持 |
| --- | --- |
| Atlas 350 加速卡 | x |
| Atlas A3 推理系列产品 / Atlas A3 训练系列产品 | √ |
| Atlas A2 训练系列产品 / Atlas 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成员。
