接口功能:量化的训练场景下,使用FlashAttention算法实现self-attention(自注意力)的计算。
计算公式:
注意力的正向计算公式如下:
其中
每个算子分为,必须先调用“aclnnQuantFlashAttentionScoreGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnQuantFlashAttentionScore”接口执行计算。
[object Object]
[object Object]
确定性计算:
- aclnnQuantFlashAttentionScore默认确定性实现。
该接口与PyTorch配合使用时,需要保证CANN相关包与PyTorch相关包的版本匹配。
输入query、key、value的
- B:batchsize必须相等。
- D:Head-Dim必须满足(qD == kD && kD >= vD)。
- inputLayout必须一致。
关于数据shape的约束, 目前支持以下场景:
[object Object]query、key、value数据排布格式支持从多种维度解读,其中B(Batch)表示输入样本批量大小、S(Seq-Length)表示输入样本序列长度、N(Head-Num)表示多头数、D(Head-Dim)表示隐藏层最小的单元尺寸。
部分场景下,如果计算量过大可能会导致算子执行超时(aicore error类型报错,errorStr为:timeout or trap error),此时建议做轴切分处理,注:这里的计算量会受B、S、N、D等参数的影响,值越大计算量越大。
[object Object]