昇腾社区首页
中文
注册
开发者
下载

aclnnNormRopeConcat

产品支持情况

[object Object]undefined

功能说明

  • 接口功能:(多模态)transfomer注意力机制中,针对query、key和Value实现归一化(Norm)、旋转位置编码(Rope)、特征拼接(Concat):

    • 归一化(Norm)当前支持层归一化(LayerNorm)和带仿射变换参数层归一化(AFFINE LayerNorm)类型。
    • 旋转位置编码(Rope)支持Interleave和Half类型。
    • 特征拼接(Concat)支持在sequence维度上进行拼接,拼接有顺序区别。
  • 计算公式(以Query(视频)和EncoderQuery(文本)为例):

    hiddenStateq=LayerNorm(query,normQueryWeight,normQueryBias,eps)hiddenStateeq=LayerNorm(encoderQuery,normEncoderQueryWeight,normEncoderQueryBias,eps)concatedHiddenState=Concat(hiddenStateq,hiddenStateeq)transposedHiddenState=Transpose(concatedHiddenState,(0,2,1,3))hiddenState=RoPE(concatedHiddenState,ropeSin,ropeCos)hiddenState_q = \text{LayerNorm}(query, normQueryWeight, normQueryBias, eps) \\ hiddenState_{eq} = \text{LayerNorm}(encoderQuery, normEncoderQueryWeight, normEncoderQueryBias, eps) \\ concatedHiddenState = \text{Concat}(hiddenState_q, hiddenState_{eq}) \\ transposedHiddenState = \text{Transpose}(concatedHiddenState, (0, 2, 1, 3)) \\ hiddenState = \text{RoPE}(concatedHiddenState, ropeSin, ropeCos)
  • 说明:

    1. 输入输出布局如下:输入[object Object]的shape为[object Object],输出[object Object]的shape为[object Object],其中 B为batch,S为sequenceLen,N为headNum,D为headDim。

    2. LayerNorm有三种模式([object Object]):[object Object],其中: 当[object Object]时:

      hiddenStateq=queryhiddenState_q = query

      [object Object]

      queryMeanb,s,n=1Di=0Dqueryb,s,nqueryVarb,s,n=1Di=0D(queryqueryMeanb,s,n)2queryRstdb,s,n=1queryVarb,s,n+ϵhiddenStateq=(queryqueryMean)queryRstdqueryMean_{b,s,n} = \frac{1}{D}\sum_{i=0}^{D}query_{b,s,n} \\ queryVar_{b,s,n} = \frac{1}{D}\sum_{i=0}^{D}(query-queryMean_{b,s,n})^2 \\ queryRstd_{b,s,n}= \frac{1}{\sqrt{queryVar_{b,s,n}+\epsilon}} \\ hiddenState_q = (query-queryMean)*queryRstd

      [object Object]时,在上面的基础上

      hiddenStateq=normQueryWeighthiddenStateq+normQueryBiashiddenState_q = normQueryWeight*hiddenState_q + normQueryBias
    3. Concat指在sequence维度上进行拼接,拼接有顺序区别([object Object]),当[object Object]时,hiddenStateqhiddenState_qhiddenStateeqhiddenState_{eq}前,当[object Object]时,hiddenStateqhiddenState_qhiddenStateeqhiddenState_{eq}后。

    4. RoPE有三种模式([object Object]):[object Object],其中当[object Object]时直接输出不做变换,其余情况参考如下:

      [object Object]
    5. RoPE的输入[object Object]的shape为[object Object],其中

      seqRope<=min(seqQuery+seqEncoderQuery,seqKey+seqEncoderKey)seqRope <= min(seqQuery+seqEncoderQuery, seqKey+seqEncoderKey)

    6. 当场景为训练时,会输出[object Object]供后续反向使用。

函数原型

每个算子分为,必须先调用“aclnnNormRopeConcatGetWorkspaceSize”接口获取入参并根据计算流程计算所需workspace大小,再调用“aclnnNormRopeConcat”接口执行计算。

[object Object]
[object Object]

aclnnNormRopeConcatGetWorkspaceSize

  • 参数说明

    [object Object]
  • 返回值

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

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

    [object Object]

aclnnNormRopeConcat

  • 参数说明

    [object Object]
  • 返回值

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

约束说明

  • query、key、value、encoderQuery、encoderKey、encoderValue数据类型需一致。
  • headDim长度在[1~1024]间,且为偶数。
  • seqRope长度大小在[1~Min(seqQuery+seqEncoderQuery, seqKey+seqEncoderKey)]之间。

调用示例

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

[object Object]