参数列表
在使用时应带有命名空间atb::infer::SelfAttentionParam的参数,成员描述如下:
成员名称 |
类型 |
默认值 |
描述 |
是否必选 |
---|---|---|---|---|
quantType |
QuantType |
TYPE_QUANT_UNQUANT |
quant类型。 |
否 |
outDataType |
aclDataType |
ACL_DT_UNDEFINED |
output数据类型。默认值表示根据输入tensors自动推导输出tensors数据类型。 |
否 |
headNum |
int32_t |
0 |
query头大小,需大于0 |
是 |
kvHeadNum |
int32_t |
0 |
kv头数量,该值需要用户根据使用的模型实际情况传入。 |
是 |
qScale |
float |
1 |
query缩放系数。 |
否 |
qkScale |
float |
1 |
算子tor值,在Q*K^T后乘。 |
是 |
batchRunStatusEnable |
bool |
false |
是否开启动态batch。 |
否 |
isTriuMask |
uint32_t |
0 |
是否开启倒三角优化,只有mask为倒三角的时候才能开启优化。 |
否 |
calcType |
CalcType |
UNDEFINED |
计算类型。 |
是 |
kernelType |
KernelType |
KERNELTYPE_DEFAULT |
内核精度类型。
|
否 |
clampType |
ClampType |
CLAMP_TYPE_UNDEFINED |
clamp类型。 |
否 |
clampMin |
float |
0 |
clamp功能最小值。 |
否 |
clampMax |
float |
0 |
clamp功能最大值。 |
否 |
maskType |
MaskType |
MASK_TYPE_UNDEFINED |
mask类型。 |
否 |
kvcacheCfg |
KvCacheCfg |
K_CACHE_V_CACHE |
kvcache配置。 |
否 |
scaleType |
ScaleType |
SCALE_TYPE_TOR |
scale类型。 |
否 |
inputLayout |
InputLayout |
TYPE_BSND |
数据排布格式默认为BSND。 |
否 |
mlaVHeadSize |
uint32_t |
0 |
大于0时开启MLA合并kvcache功能,表示kv合并传入时v的head_size取值范围为[0,576]。 |
否 |
windowSize |
uint32_t |
0 |
SWA窗口大小。需合理设置窗口大小,若其大于q/k 的maxSeqlen会导致SWA退化成普通SelfAttention操作。 |
否 |
cacheType |
CacheType |
CACHE_TYPE_NORM |
cache内部排布类型,为CACHE_TYPE_SWA开启SWA KVCache优化,只储存后windowSize个token的KVCache,控制KVCache的长度不超过windowSize,以此减少显存占用。 |
否 |
rsv[64] |
uint8_t |
{0} |
预留参数。 |
否 |
上表中类型为自定义类型的,其描述如下:
- QuantType:表示quant类型的枚举量,其具体取值如下。
- TYPE_QUANT_UNDEFINED:默认值,不与量化融合,此时q、k、v为bf16/float16。
- TYPE_QUANT_UNQUANT:默认值,不与量化融合,此时q、k、v为bf16/float16。
- TYPE_DEQUANT_FUSION:与反量化融合, 预留类型,当前不能够取此值。
- TYPE_QUANT_QKV_OFFLINE:离线INT8量化,只支持
Atlas A2 训练系列产品 /Atlas 800I A2 推理产品 和Atlas A3 推理系列产品 /Atlas A3 训练系列产品 。 - TYPE_QUANT_QKV_ONLINE:在线INT8量化,只支持
Atlas A2 训练系列产品 /Atlas 800I A2 推理产品 和Atlas A3 推理系列产品 /Atlas A3 训练系列产品 。
- outDataType:output数据类型,其具体取值如下。
- 只支持PA_ENCODER,且“QuantType”不为TYPE_QUANT_UNQUANT(格式为aclDataType)。
- kvHeadNum:表示kv头数量, 该值需要用户根据使用的模型实际情况传入,其具体取值如下。
- kvHeadNum = 0时,keyCache的k_head_num,valueCache的v_head_num与query的num_heads一致,均为num_heads的数值。
- kvHeadNum != 0时,keyCache的k_head_num,valueCache的v_head_num与kvHeadNum值相同。
- CalcType:表示计算类型,其具体取值如下。
- UNDEFINED:同时使用flashAttention的decoder和encoder。
- ENCODER:使用FlashAttention的encoder。
- DECODER:使用FlashAttention的decoder。
- PA_ENCODER:使用PagedAttention的encoder。
- PREFIX_ENCODER:用于FA支持prefix cache场景。
- KernelType:表示内核精度类型,其具体取值如下。
- KERNELTYPE_DEFAULT :输入float16,batchmatmul使用float16,输出float16。
- KERNELTYPE_HIGH_PRECISION :输入float16,batch matmul使用float,输出float16。
- ClampType:表示clamp类型,其具体取值如下。
- CLAMP_TYPE_UNDEFINED:不进行缩放。
- CLAMP_TYPE_MIN_MAX:进行缩放,同时指定最大最小值。
- MaskType:表示mask类型,其具体取值如下。
- MASK_TYPE_UNDEFINED:默认值,全0mask。
- MASK_TYPE_NORM:倒三角mask。
- MASK_TYPE_ALIBI:Alibi Mask。
- MASK_TYPE_NORM_COMPRESS:倒三角压缩mask。
- MASK_TYPE_ALIBI_COMPRESS:alibi压缩mask。
- MASK_TYPE_ALIBI_COMPRESS_SQRT:alibi压缩开平方mask。
- MASK_TYPE_ALIBI_COMPRESS_LEFT_ALIGN:alibi压缩mask左对齐。当前仅支持
Atlas A2 训练系列产品 /Atlas 800I A2 推理产品 和Atlas A3 推理系列产品 /Atlas A3 训练系列产品 。 - MASK_TYPE_SLIDING_WINDOW_NORM: sliding window attention mask。
- MASK_TYPE_SLIDING_WINDOW_COMPRESS:sliding window attention压缩mask。
- MASK_TYPE_CAUSAL_MASK:mask内部生成。
- KvCacheCfg:表示kvcache配置,不支持“calcType”为PA_ENCODER,其具体取值如下。
- K_CACHE_V_CACHE :默认值,进行kvcache处理。
- K_BYPASS_V_BYPASS:直接传入kvcache。
- ScaleType:表示scale类型,其具体取值如下。
- SCALE_TYPE_TOR:默认值,不开启LogN缩放。
- SCALE_TYPE_LOGN:注意力使用LogN缩放,quantType只能是0。
- SCALE_TYPE_MAX:边界值,仅用于判断是否出界。
- InputLayout:输入数据排布格式,InputLayout类型枚举值,其具体取值如下。
- 默认为TYPE_BSND,此时枚举值为0。
- 输入数据排布格式为TYPE_BNSD时,枚举值为1。
- CacheType:cache内部排布类型,其具体取值如下。
- CACHE_TYPE_NORM:正常cache。
- CACHE_TYPE_SWA:固定长度cache。