参数列表
成员名称  | 
类型  | 
默认值  | 
取值范围  | 
是否必选  | 
描述  | 
|---|---|---|---|---|---|
headNum  | 
int32_t  | 
0  | 
{8,16,32,64,128}  | 
是  | 
query头数量。  | 
qkScale  | 
float  | 
1.0  | 
(0,1]  | 
是  | 
Q*K^T后乘以的缩放系数。  | 
kvHeadNum  | 
int32_t  | 
0  | 
  | 
是  | 
kv头数量。  | 
maskType  | 
MaskType  | 
UNDEFINED  | 
[0,2]  | 
否  | 
mask类型。  | 
calcType  | 
CalcType  | 
CALC_TYPE_UNDEFINED  | 
[0,4]  | 
否  | 
计算类型。  | 
cacheMode  | 
CacheMode  | 
KVCACHE  | 
[0,3]  | 
是  | 
输入query和kcache的类型。  | 
rsv[43]  | 
uint8_t  | 
0  | 
[0]  | 
否  | 
预留字段。  | 
上表中类型为自定义类型的,其描述如下:
- maskType:表示mask类型,其具体取值如下。
- UNDEFINED:无mask。
 - MASK_TYPE_SPEC:并行解码mask,与calcType=CALC_TYPE_SPEC或CALC_TYPE_SPEC_AND_RING一起使用。
 - MASK_TYPE_MASK_FREE:传入固定shape的mask,与calcType = CALC_TYPE_SPEC、calcType = CALC_TYPE_PREFILL或CALC_TYPE_SPEC_AND_RING一起使用。计算时根据尾部长度从传入mask中获取真实的mask。mask为倒三角形式,第一行全部为-inf,最后一行全部为0。具体形状如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
def generate_mask_free(q_len): :param q_len: q_len :return: constructed mask, e.g. when q_len=2, returned as [[-inf -inf -inf ... -inf], [0 -inf -inf ... -inf], [0 0 -inf ... -inf], ... [0 0 0 ... -inf], [0 0 0 ... 0]] """ mask_free = np.full((125 + 2 * q_len, 128), -10000.0) mask_free = np.triu(mask_free, 2 - q_len) return mask_free
 - MASK_TYPE_CAUSAL_MASK:mask内部生成。
 
 - calcType:表示计算类型,其具体取值如下。
- CALC_TYPE_UNDEFINED:默认的decoder场景。
 - CALC_TYPE_SPEC:支持qseqlen大于1,并行解码功能,MTP使用该场景。
 - CALC_TYPE_RING:ringAttention,额外输出Ise。
 - CALC_TYPE_SPEC_AND_RING:支持传入大于1的qseqlen ringAttention。
 - CALC_TYPE_PREFILL:prefill 全量。
 
 - cacheMode:表示输入query和kcache的类型,其具体取值如下。
与MLAPO大融合预处理算子对应使用。
- KVCACHE:输入只有一个q和一个合并kvCache,为原PagedAttention下的MLA场景,目前暂未接入。
 - KROPE_CTKV:输入的q拆分为qNope和qRope,输入的kcache拆分为ctKV和kRope,对应之前的默认场景。
 - INT8_NZCACHE:高性能cache,在KROPE_CTKV的基础上:krope和ctkv转为NZ格式输出,ctkv和qnope经过per_head静态对称量化为int8类型。
 - NZCACHE:在KROPE_CTKV的基础上krope和ctkv转为NZ格式输出。