PagedAttentionOperation
功能
attention计算,支持k, v内存不连续存放。
约束
- 要求block_size * head_size ≤ 128 * 128,推荐block_size = 128。
- blockTables中元素的值须在[0, num_blocks)之间。
- Atlas 推理系列产品(配置Ascend 310P AI处理器)不支持该算子。
定义
struct PagedAttentionParam { int32_t headNum = 0; float qkScale = 1.0; // scale after qkbmm int32_t kvHeadNum = 0; };
成员
成员名称 |
描述 |
---|---|
headNum |
attention多头的个数,需要大于0。 |
qkScale |
qk相乘后的缩放系数,需根据实际模型参数需求传入。 |
kvHeadNum |
该值需要用户根据使用的模型实际情况传入。
|
输入
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
query |
[num_tokens, num_heads, head_size] |
float16 |
ND |
各batch的tensor以num_tokens轴合并。 |
keyCache |
[num_blocks, block_size, k_head_num, head_size] |
float16 |
ND |
已有的key, 待与当前key拼接。 |
valueCache |
[num_blocks, block_size, v_head_num, head_size] |
float16 |
ND |
已有的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数量。 |
输出
参数 |
维度 |
数据类型 |
格式 |
---|---|---|---|
output |
[num_tokens, num_heads, head_size] |
float16 |
ND |