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成员。