算子功能:LightningIndexerV2基于一系列操作得到每一个token对应的top-k个位置。
计算公式:
主要计算过程为:
- 将某个token对应的输入参数
[object Object]()乘以给定上下文[object Object](),得到相关性。 - 通过激活函数过滤无效负相关信号后,得到当前Token与所有前序Token的相关性分数向量。
- 将其与权重系数
[object Object]()相乘后,沿g的方向,选取前个索引值得到输出,并输出对应的,作为Attention的输入。
- 将某个token对应的输入参数
算子执行接口为,必须先调用“aclnnLightningIndexerV2GetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnLightningIndexerV2”接口执行计算。
[object Object]
[object Object]
参数说明:
[object Object]- q、k、w、q_descale、k_descale参数维度含义:B(Batch Size)表示输入样本批量大小、S(Sequence Length)表示输入样本序列长度、H(Head Size)表示hidden层的大小、N(Head Num)表示多头数、D(Head Dim)表示hidden层最小的单元尺寸,且满足D=H/N、T表示所有Batch输入样本序列长度的累加和。
- 使用S1和S2分别表示q和k的输入样本序列长度,N1和N2分别表示q和k对应的多头数,k表示最后选取的索引个数。参数q中的D和参数k中的D值相等为128。T1和T2分别表示q和k的输入样本序列长度的累加和。
返回值:
第一段接口会完成入参校验,出现以下场景时报错:
[object Object]
- 确定性计算:
- aclnnLightningIndexerV2默认确定性实现。
- 参数q的N支持1~64,k的N支持1。
- headdim支持128。
- pa_kv_cache支持0轴非连续;pa_block_size支持1~1024,满足block大小32 Byte对齐。
- 参数q、k的数据类型应保持一致。
- sparse_indices无效部分填-1;sparse_values无效部分填-inf。
- [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]、[object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:
- topk取值范围当前仅支持[1, 2048],以及3072、4096、5120、6144、7168、8192。
- 当前不支持sequsedQOptional、outputIdxOffsetOptional、maxSeqlenQ功能,不建议传入这些参数。
- 当layout_k为PA_BBND时,必须传入sequsedKOptional;当layout_k不为PA_BBND时,不支持sequsedKOptional功能,不建议传入该参数。
- [object Object]Ascend 950PR/Ascend 950DT[object Object]:
- 参数q的N当前仅支持32和64。
- topk取值范围当前仅支持[1, 2048]。
- 当layout_q为BSND时,不支持传入cuSeqlensQOptional;当layout_k为BSND或PA_BBND时,不支持传入cuSeqlensKOptional。
- 当传入outputIdxOffsetOptional时,只支持大于0的索引偏移值;且应满足约束:加上传入的索引偏移值后,得到的sparseIndice值不超过INT32的最大值。
- 当layout_q为TND时,必须传入cuSeqlensQOptional,如果也传入sequsedQOptional,应保证由sequsedQOptional传入的各个batch的query长度不超过根据cuSeqlensQOptional计算出的各个batch的q序列长度。当某个batch由sequsedQOptional传入的q序列长度seqlen1小于由cuSeqlensQOptional计算出的query长度seqlen2时,会启用TND Padding功能,将该batch的从seqlen1 + 1到seqlen2的query输出的sparseIndices和sparseValues全部置为无效值。
- 当传入的cmpRatio > 1且maskMode = 3时,必须传入cmpResidualKOptional,其余情况不传入。
[object Object]