aclnnFusedInferAttentionScoreV5
产品支持情况
功能说明
接口功能:适配decode & prefill场景的FlashAttention算子,既可以支持prefill计算场景(PromptFlashAttention),也可支持decode计算场景(IncreFlashAttention)。相比于FusedInferAttentionScoreV4,本接口新增qStartIdxOptional、kvStartIdxOptional、pseType参数。
说明:
[object Object]计算公式:
self-attention(自注意力)利用输入样本自身的关系构建了一种注意力模型。其原理是假设有一个长度为的输入样本序列,的每个元素都是一个维向量,可以将每个维向量看作一个token embedding,将这样一条序列经过3个权重矩阵变换得到3个维度为的矩阵。
self-attention的计算公式一般定义如下,其中为输入样本的重要属性元素,是输入样本经过空间变换得到,且可以统一到一个特征空间中。公式及算子名称中的"Attention"为"self-attention"的简写。
本算子中Score函数采用Softmax函数,self-attention计算公式为:
其中和的乘积代表输入的注意力,为避免该值变得过大,通常除以的开根号进行缩放,并对每行进行softmax归一化,与相乘后得到一个的矩阵。
说明:
[object Object]
函数原型
算子执行接口为,必须先调用“aclnnFusedInferAttentionScoreV5GetWorkspaceSize”接口获取入参并根据计算流程计算所需workspace大小,再调用“aclnnFusedInferAttentionScoreV5”接口执行计算。
aclnnFusedInferAttentionScoreV5GetWorkspaceSize
aclnnFusedInferAttentionScoreV5
约束说明
确定性计算:
- aclnnFusedInferAttentionScoreV5默认确定性实现。
公共约束
- 入参为空的场景处理:
- 空Tensor指必选输入和输出的shapeSize为0。在空Tensor场景下,若attentionOut为空,返回空,否则返回全0;若有lse且lse为空时返回空,lse不为空则返回全inf。非空Tensor时输入正常拦截。
- query,attentionOut所有tensor的shapeSize为0,属于空Tensor。
- query,attentionOut所有tensor的shapeSize不为0,若有lse且lse不为空,并且key,value中所有tensor的shapeSize为0,属于空Tensor。
- attentionOut和lse都为空时,属于空Tensor。
- 属于空Tensor时,跳过校验流程;否则,走正常校验流程。
- BNSD_BSND、BSH_BNSD、BSND_BNSD、BSH_NBSD、BSND_NBSD、BNSD_NBSD场景下的综合限制:
- 当query的d等于512时:
- 仅支持BSH_NBSD、BSND_NBSD、BNSD_NBSD;
- 仅支持decode mla场景,要求queryRope和keyRope不等于空,queryRope和keyRope的d为64;
- 当query的d不等于512时:
- 仅支持BNSD_BSND、BSH_BNSD、BSND_BNSD;
- 支持prefill mla或gqa非量化场景,其中prefill mla场景需满足下述条件之一:
- query的d等于128,queryRope和keyRope不等于空,queryRope和keyRope的d为64;
- query的d等于192,queryRope和keyRope等于空。
- gqa非量化场景,NTD、NTD_TND仅支持D=64或D=128;
- 当query的d等于512时:
- TND、NTD、TND_NTD、NTD_TND场景下query,key,value输入的综合限制:
- 当query的d等于512时:
- 仅支持TND、TND_NTD;
- 仅支持decode mla场景,要求queryRope和keyRope不等于空,queryRope和keyRope的d为64;
- 不支持左padding、tensorlist、pseType=0、prefix、伪量化。
- 当query的d不等于512时:
- 仅支持TND、NTD、NTD_TND;
- 支持prefill mla或gqa非量化场景,其中prefill mla场景需满足下述条件之一:
- query的d等于128,queryRope和keyRope不等于空,queryRope和keyRope的d为64;
- query的d等于192,queryRope和keyRope等于空。
- gqa非量化场景,NTD、NTD_TND仅支持D=64或D=128;
- 不支持左padding、tensorlist、pseType=0、prefix、伪量化。
- 当query的d等于512时:
- 入参为空的场景处理:
[object Object][object Object]通用场景
[object Object][object Object][object Object]PseShift
[object Object][object Object][object Object]Mask
[object Object][object Object][object Object]ActualSeqLen
[object Object][object Object][object Object]伪量化参数约束
[object Object][object Object][object Object]PagedAttention
[object Object]- [object Object]
[object Object][object Object]左padding
[object Object][object Object][object Object]Prefix
[object Object][object Object][object Object]MLA场景(queryRope和keyRope输入不为空时)
[object Object]qkv FP8 per-block全量化
[object Object]