参数列表
成员名称 |
类型 |
默认值 |
取值范围 |
是否必选 |
描述 |
---|---|---|---|---|---|
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格式输出。