开发者
下载
[object Object][object Object][object Object]undefined
[object Object]
  • 算子功能:LightningIndexerV2基于一系列操作得到每一个token对应的top-k个位置。

  • 计算公式:

    Topk{[1]1×g@[(W@[1]1×Sk)ReLU(Qindex@KTindex)]}Top-k \left\{ \left[ 1 \left] \mathop{{}}\nolimits_{{1 \times \text{ }g}}\text{@} \left[ \left( W\text{@} \left[ 1 \left] \mathop{{}}\nolimits_{{1\text{ } \times \text{ }S\mathop{{}}\nolimits_{{k}}}} \left) \text{ } \odot \text{ }ReLU \left( Q\mathop{{}}\nolimits_{{index}}\text{@}K\mathop{{}}\nolimits_{{T}}^{{index}} \left) \left] \right\} \right. \right. \right. \right. \right. \right. \right. \right. \right. \right.
  • 主要计算过程为:

    1. 将某个token对应的输入参数[object Object]QindexRg×dQ_{index}\in\R^{g\times d})乘以给定上下文[object Object]KindexRSk×dK_{index}\in\R^{S_{k}\times d}),得到相关性。
    2. 通过激活函数ReLUReLU过滤无效负相关信号后,得到当前Token与所有前序Token的相关性分数向量。
    3. 将其与权重系数[object Object]WW)相乘后,沿g的方向,选取前TopkTop-k个索引值得到输出sparseIndicessparseIndices,并输出对应的sparseValuessparseValues,作为Attention的输入。
[object Object]

算子执行接口为,必须先调用“aclnnLightningIndexerV2GetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnLightningIndexerV2”接口执行计算。

[object Object]
[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的输入样本序列长度的累加和。
  • 返回值:

    aclnnStatus:返回状态码,具体参见

    第一段接口会完成入参校验,出现以下场景时报错:

    [object Object]
[object Object]
  • 参数说明:

    [object Object]
  • 返回值:

    aclnnStatus:返回状态码,具体参见

[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]

示例代码如下,仅供参考,具体编译和执行过程请参考

[object Object]