LayerNormWithStrideOperation(代码开放)
产品支持情况
硬件型号  | 
是否支持  | 
|---|---|
√  | 
|
√  | 
|
x  | 
|
x  | 
|
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  | 
归一化类型。 
  | 
normParam  | 
norm参数,具体请参见表1 normParam成员。  | 
preNormParam  | 
PRENORM参数,具体请参见表2。  | 
postNormParam  | 
POSTNORM参数,具体请参见表3。  | 
rsv[8]  | 
预留参数。  | 
成员名称  | 
类型  | 
默认值  | 
取值范围  | 
是否必选  | 
描述  | 
|---|---|---|---|---|---|
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。  | 
成员名称  | 
类型  | 
默认值  | 
取值范围  | 
是否必选  | 
描述  | 
|---|---|---|---|---|---|
quantType  | 
QuantType  | 
QUANT_UNQUANT  | 
QUANT_UNQUANT  | 
否  | 
量化类型。当前仅支持QUANT_UNQUANT。  | 
epsilon  | 
float  | 
1e-5  | 
大于0  | 
否  | 
Epsilon,归一化时加在分母上防止除0。  | 
opMode  | 
uint64_t  | 
0  | 
-  | 
否  | 
  | 
zoomScaleValue  | 
float  | 
1.0f  | 
-  | 
否  | 
缩放因子。  | 
rsv[20]  | 
uint8_t  | 
{0}  | 
[0]  | 
否  | 
预留参数。  | 
成员名称  | 
类型  | 
默认值  | 
取值范围  | 
是否必选  | 
描述  | 
|---|---|---|---|---|---|
quantType  | 
QuantType  | 
QUANT_UNQUANT  | 
QUANT_UNQUANT QUANT_INT8  | 
否  | 
量化类型。当前支持以下类型。 
  | 
epsilon  | 
float  | 
1e-5  | 
大于0  | 
否  | 
Epsilon,归一化时加在分母上防止除0。  | 
opMode  | 
uint64_t  | 
0  | 
-  | 
否  | 
  | 
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成员。