KVCache + KVCache + Muls + FlashAttention。
struct SelfAttentionParam { enum CalcType : int { UNDEFINED = 0, ENCODER, // encoder for flashAttention DECODER, // decoder for flashAttention PA_ENCODER // encoder for pagedAttention }; enum KernelType : int { KERNELTYPE_DEFAULT = 0, // i:fp16, bmm:fp16, o:fp16 KERNELTYPE_HIGH_PRECISION // i:fp16, bmm:fp32, o:fp16 }; enum ClampType : int { CLAMP_TYPE_UNDEFINED = 0, CLAMP_TYPE_MIN_MAX }; enum MaskType : int { MASK_TYPE_UNDEFINED = 0, MASK_TYPE_NORM, MASK_TYPE_ALIBI, MASK_TYPE_NORM_COMPRESS, MASK_TYPE_ALIBI_COMPRESS, MASK_TYPE_ALIBI_COMPRESS_SQRT }; int32_t headNum = 0; int32_t kvHeadNum = 0; float qScale = 1; // qtensor scale before qkbmm float qkScale = 1; // scale after qkbmm bool batchRunStatusEnable = false; uint32_t isTriuMask = 0; CalcType calcType = UNDEFINED; KernelType kernelType = KERNELTYPE_DEFAULT; ClampType clampType = CLAMP_TYPE_UNDEFINED; float clampMin = 0; float clampMax = 0; MaskType maskType = MASK_TYPE_UNDEFINED; };
成员名称 |
描述 |
---|---|
CalcType |
计算类型。
|
KernelType |
算子内部计算类型。
|
ClampType |
缩放类型。
|
MaskType |
AttentionMask类型
|
headNum |
多头数量。 headNum需大于或等于0。 |
kvHeadNum |
该值需要用户根据使用的模型实际情况传入。
|
qScale |
q缩放系数。 |
qkScale |
qk缩放系数。 |
batchRunStatusEnable |
是否动态batch。 |
isTriuMask |
TriuMask性能优化。只有maskType为倒三角模式时支持该优化。
|
calcType |
计算类型。CalcType类型枚举值。 |
kernelType |
算子内部计算类型。KernelType类型枚举值。 |
clampType |
缩放类型。ClampType类型枚举值。Atlas 推理系列产品(配置Ascend 310P AI处理器)FlashAttention不支持clamp。 |
clampMin |
缩放最小值。 |
clampMax |
缩放最大值。 |
maskType |
AttentionMask类型,MaskType类型枚举值。 |
当在Atlas 推理系列产品(Ascend 310P AI处理器)上运行时,cacheK,cacheV的格式为NZ格式,相应的维度为[layer, batch, hiddenSize/16, maxSeqLen, 16],且maxSeqLen应与16对齐。
当在Atlas 推理系列产品(Ascend 310P AI处理器)上运行时,mask的格式可以为NZ格式,相应的维度为[batch, kvMaxSeqLen / 16, qMaxSeqLen, 16], [1, kvMaxSeqLen / 16, qMaxSeqLen, 16], [batch * head, kvMaxSeqLen / 16, qMaxSeqLen, 16], [head, kvMaxSeqLen / 16, qMaxSeqLen, 16],且kvMaxSeqLen,qMaxSeqLen应与16对齐。
以上维度说明中,涉及除法的均为ceil div。
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
q |
[nTokens, qHiddenSize] |
float16/bf16 |
ND |
query矩阵。qHiddenSize = headNum * head_size |
k |
[nTokens, hiddenSize] |
float16/bf16 |
ND |
key矩阵。 hiddenSize = kvHeadNum * head_size |
v |
[nTokens, hiddenSize] |
float16/bf16 |
ND |
value矩阵。 |
cacheK |
[layer, batch, maxSeqLen, hiddenSize] |
float16 |
ND/NZ |
之前所有的key, 待与当前key拼接。 |
cacheV |
[layer, batch, maxSeqLen, hiddenSize] |
float16/int32 |
ND/NZ |
之前所有value, 待与当前value拼接。 |
attentionMask |
[maxSeqLen, maxSeqLen] [batch, maxSeqLen, maxSeqLen] [batch, 1, maxSeqLen] [batch, headNum, maxSeqLen, maxSeqLen] |
float16/bf16 |
ND/NZ |
支持场景:
|
tokenOffset |
[batch] |
uint32/int32 |
ND |
计算完成后的token偏移。 |
seqLen |
[batch] |
uint32/int32 |
ND |
|
layerId |
[1] |
uint32/int32 |
ND |
当前处于第几个layer。 |
batchStatus |
[batch] |
uint32/int32 |
ND |
batchRunStatusEnable = true,即开启动态batch时,控制具体需要运算的batch。 |
output |
[ntokens, qHiddenSize] |
float16 |
ND |
输出。 |
参数 |
维度 |
数据类型 |
格式 |
设备 |
描述 |
---|---|---|---|---|---|
query |
[nTokens, head_num, head_size] |
float16/bfloat16 |
ND |
npu |
query矩阵。 |
key |
[nTokens, head_num, head_size] |
float16/bfloat16 |
ND |
npu |
key矩阵。 |
value |
[nTokens, head_num, head_size] |
float16/bfloat16 |
ND |
npu |
value矩阵。 |
mask |
与FlashAttention相同。 |
float16/bfloat16 |
ND/NZ |
npu |
与FlashAttention相同,当maskType为undefined时不传此tensor。 |
seqLen |
[batch] |
int32 |
ND |
cpu |
|
slopes |
[head_num] |
Atlas 800I A2推理产品:float16 Atlas 推理系列产品(Ascend 310P AI处理器):float |
ND |
npu |
当maskType为alibi压缩,且mask为[256,256]时需传入此tensor,为alibi mask每个head的系数。 |
output |
[nTokens, head_num, head_size] |
float16/bfloat16 |
ND |
npu |
输出。 |