MultiLatentAttentionOperation

功能

MLA场景下的paged attention,使用分页管理的kvcache计算attention score,额外支持分离qnope/qrope、ctkv/krope的输入。

定义

struct MultiLatentAttentionParam {
    int32_t headNum = 0;
    float qkScale = 1.0;
    int32_t kvHeadNum = 0;
    enum MaskType : int {
        UNDEFINED = 0,      
        MASK_TYPE_SPEC,      
        MASK_TYPE_MASK_FREE, 
    };
    MaskType maskType = UNDEFINED;
    enum CalcType : int {
        CALC_TYPE_UNDEFINED = 0,
        CALC_TYPE_SPEC,          
        CALC_TYPE_RING,         
    };
    CalcType calcType = CALC_TYPE_UNDEFINED;
    enum CacheMode : uint8_t {
        KVCACHE = 0,  
        KROPE_CTKV,   
        INT8_NZCACHE, 
        NZCACHE,     
    };
    CacheMode cacheMode = KVCACHE;
    uint8_t rsv[43] = {0};
};

参数列表

成员名称

类型

默认值

取值范围

是否必选

描述

headNum

int32_t

0

{8,16,32,64,128}

query头数量。

qkScale

float

1.0

(0,1]

Q*K^T后乘以的缩放系数

kvHeadNum

int32_t

0

[1]

kv头数量

maskType

MaskType

UNDEFINED

[0,2]

mask类型。

calcType

CalcType

CALC_TYPE_UNDEFINED

[0,2]

计算类型。

cacheMode

CacheMode

KVCACHE

[0,3]

输入query和kcache的类型。

rsv[43]

uint8_t

0

[0]

预留字段

上表中类型为自定义类型的,其描述如下:

输入

参数

维度

数据类型

格式

cpu/npu

描述

qNope

[num_tokens, num_heads, 512]

float16/bf16/int8

ND

NPU

无位置编码query。

qRope

[num_tokens, num_heads, 64]

float16/bf16

ND

NPU

旋转位置编码query。

ctKV

[num_blocks , block_size, kv_heads, 512]

  • cacheMode为2:

    [blockNum, kv_heads*512/32,block_size, 32]

  • cacheMode为3:

    [blockNum, kv_heads*512/16,block_size, 16]

float16/bf16/int8

ND/NZ

NPU

无位置编码ctkv。

  • cacheMode为2:int8,NZ。
  • cacheMode为3:float16/bf16,NZ。

kRope

[num_blocks , block_size, kv_heads, 64]

cacheMode为2或3:

[blockNum, kv_heads*64 / 16 ,block_size, 16]

float16/bf16

ND/NZ

NPU

旋转位置编码k。

cacheMode为2或3:NZ。

block_tables

[batch, max_num_blocks_per_query]

int32

ND

NPU

每个query的kvcache的block映射表。

contextLens

[batch]

int32

ND

CPU

每个query对应的上下文长度,kseqlen。

mask

  • MASK_TYPE_SPEC:

    [num_tokens(合轴), max_seq_len]

  • MASK_TYPE_MASK_FREE:

    [125 + 2 * qseqlen, 128]

float16/bf16

ND

NPU

注意力掩码,maskType不为0时传入。

qseqlen

[batch]

int32

ND

CPU

calcType为1时传入,每个batch对应的seqLen,取值范围为[1,4]。

qkDescale

[num_heads]

float

ND

NPU

cacheMode为2时传入。

pvDescale

[num_heads]

float

ND

NPU

cacheMode为2时传入。

输出

参数

维度

数据类型

格式

cpu/npu

描述

attenOut

[num_tokens, num_heads, head_size_vo]

float16/bf16

ND

NPU

attention输出。

Ise

[num_tokens, num_heads, 1]

float16/bf16

ND

NPU

Ise输出,只有calcType为CALC_TYPE_RING时需要此tensor。

只支持maskType为UNDEFINED,cacheMode为KROPE_CTKV场景。

规格约束