开发者
资源
[object Object][object Object][object Object]undefined
[object Object]
  • 接口功能:实现“Transformer Attention Score”的融合量化的反向计算。

  • 计算公式:

    Y=Softmax(Q^K^T(dSqdSk)d)V^dSvY=Softmax(\frac{\hat{Q}\hat{K}^T*(dS_q*dS_k)}{\sqrt{d}})\hat{V}*dS_v

    为方便表达,以变量SSPP表示计算公式:

    S=Q^K^T(dSqdSk)dS=\frac{\hat{Q}\hat{K}^T*(dS_q * dS_k)}{\sqrt{d}} P=Softmax(S)P=Softmax(S) Y=PV^dSvY=P\hat{V} * dS_v

    则注意力的反向计算公式为:

    dS^=dSdsScale\hat{dS}= dS * dsScale P^=PpScale\hat{P}= P * pScale dV=P^TdY^(dSdydSp)dV=\hat{P}^T\hat{dY} * (dS_{dy} * dS_p) dQ=((dS)^K^)d(dSdsdSk)dQ=\frac{(\hat{(dS)}*\hat{K})}{\sqrt{d}}* (dS_{ds} * dS_k) dK=((dS)^TQ^)d(dSdsdSq)dK=\frac{(\hat{(dS)}^T*\hat{Q})}{\sqrt{d}} * (dS_{ds} * dS_q)
[object Object]

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

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

    [object Object]
  • 返回值:

    返回aclnnStatus状态码,具体参见

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

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

    [object Object]
  • 返回值:

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

[object Object]
  • 确定性计算:

    • aclnnQuantFlashAttentionScoreGrad默认确定性实现。
  • 输入query、key、value、dy的约束如下:

    • B:batchsize必须相等。
    • inputLayout必须一致。
    • D:支持128。
  • 输入query/dy的N和key/value的N必须相等。

  • 关于数据shape的约束,目前支持以下场景:

    [object Object]
  • 部分场景下,如果计算量过大可能会导致算子执行超时(aicore error类型报错,errorStr为:timeout or trap error),此时建议做轴切分处理,注:这里的计算量会受B、S、N、D等参数的影响,值越大计算量越大。

  • 关于softmaxMax与softmaxSum参数的约束:输入格式固定为[B, N, S, 1]。

  • headNum的取值必须和传入的Query中的N值保持一致。

[object Object]

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

[object Object]