attention计算,支持k, v内存不连续存放。
struct PagedAttentionParam { int32_t headNum = 0; float qkScale = 1.0; // scale after qkbmm int32_t kvHeadNum = 0; enum MaskType : int { UNDEFINED = 0, MASK_TYPE_NORM, MASK_TYPE_ALIBI }; MaskType maskType = UNDEFINED; bool batchRunStatusEnable = false; enum QuantType : int { TYPE_QUANT_UNDEFINED = 0, TYPE_DEQUANT_FUSION }; QuantType quantType = TYPE_QUANT_UNDEFINED; bool hasQuantOffset = false; };
成员名称 |
描述 |
---|---|
headNum |
attention多头的个数,需要大于0。 |
qkScale |
qk相乘后的缩放系数,需根据实际模型参数需求传入。 |
kvHeadNum |
该值需要用户根据使用的模型实际情况传入。
|
maskType |
遮蔽类型。Atlas 推理系列产品(配置Ascend 310P AI处理器)不支持alibi mask压缩。 |
batchRunStatusEnable |
是否开启动态batch。Atlas 推理系列产品(配置Ascend 310P AI处理器)不支持动态batch功能。 |
quantType |
量化类型。Atlas 推理系列产品(配置Ascend 310P AI处理器)不支持反量化融合。 |
hasQuantOffset |
在量化情况下,是否需要输入偏移tensor |
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
query |
[num_tokens, num_heads, head_size] |
float16/bf16 |
ND |
各batch的tensor以num_tokens轴合并。 |
keyCache |
Atlas 800I A2推理产品:[num_blocks, block_size, k_head_num, head_size] Atlas 推理系列产品(配置Ascend 310P AI处理器):[num_blocks, num_tokens *num_heads / 16 ,block_size, 16] |
float16/bf16 |
Atlas 800I A2推理产品:ND Atlas 推理系列产品(配置Ascend 310P AI处理器):NZ |
已有的key, 待与当前key拼接。 |
valueCache |
Atlas 800I A2推理产品:[num_blocks, block_size, v_head_num, head_size] Atlas 推理系列产品(配置Ascend 310P AI处理器):[num_blocks, num_tokens *num_heads / 16 ,block_size, 16] |
float16/bf16 |
Atlas 800I A2推理产品:ND Atlas 推理系列产品(配置Ascend 310P AI处理器):NZ |
已有的value, 待与当前value拼接。 |
blockTables |
[num_tokens, max_num_blocks_per_query] |
int32 |
ND |
每个query的kvcache的block table,第一维是token索引,第二维表示block索引。 |
contextLens |
[num_tokens] |
int32 |
ND |
每个query对应的key/value的token数量。 |
maskTensor |
Atlas 800I A2推理产品:[batch, num_heads, 1, max_seqlen] Atlas 推理系列产品(配置Ascend 310P AI处理器):[batch, num_heads, max_seqlen/16, 16, 16] |
float16/bf16 |
Atlas 800I A2推理产品:ND Atlas 推理系列产品(配置Ascend 310P AI处理器):NZ |
Atlas 800I A2推理产品:当maskType不为UNDEFINED时输入。 |
kDeScale |
[num_heads * head_size] |
int64 |
ND |
当量化类型为反量化时,步长tensor |
kOffset |
[num_heads * head_size] |
int32 |
ND |
当量化类型为反量化,且hasQuantOffset为true时,输入k的偏移量 |
vDeScale |
[num_heads * head_size] |
int64 |
ND |
当量化类型为反量化时,步长tensor |
vOffset |
[num_heads * head_size] |
int32 |
ND |
当量化类型为反量化,且hasQuantOffset为true时,输入v的偏移量 |
参数 |
维度 |
数据类型 |
格式 |
---|---|---|---|
output |
[num_tokens, num_heads, head_size] |
float16 |
ND |