为了使LayerNorm支持非连续Tensor,将x tensor通过(shape、strides、offset)表示。strides描述某个维度上相邻两个元素的间隔,offset表示这个Tensor的首元素相对addr的偏移。
硬件型号 |
支持情况 |
---|---|
支持 |
|
支持 |
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 |
归一化类型。
|
normParam |
norm参数,具体请参见表1 normParam成员。 |
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。 |
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
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的维度保持一致。 |