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

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 = LayerNorm(query, normQueryWeight, normQueryBias, eps) \\ hiddenState_{eq} = LayerNorm(encoderQuery, normEncoderQueryWeight, normEncoderQueryBias, eps) \\ concatedHiddenState = Concat(hiddenState_q, hiddenState_{eq}) \\ transposedHiddenState = Transpose(concatedHiddenState, (0, 2, 1, 3)) \\ hiddenState = 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]

      $$queryMean_{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

  • 参数说明:

    • query(aclTensor*,计算输入):Device侧的aclTensor,注意力机制前的Query,支持ND([batch, seqQuery, headNum, headDim]),headDim需为偶数。数据类型支持FLOAT16、BFLOAT16、FLOAT32。
    • key(aclTensor*,计算输入):Device侧的aclTensor,注意力机制前的Key,支持ND([batch, seqKey, headNum, headDim])。数据类型支持FLOAT16、BFLOAT16、FLOAT32。
    • value(aclTensor*,计算输入):Device侧的aclTensor,注意力机制前的Value,支持ND([batch, seqValue, headNum, headDim]), [object Object]。数据类型支持FLOAT16、BFLOAT16、FLOAT32。
    • encoderQuery(aclTensor*,计算输入):可选参数,Device侧的aclTensor,注意力机制前的Query,支持ND([batch, seqEncoderQuery, headNum, headDim])。数据类型支持FLOAT16、BFLOAT16、FLOAT32。用户不特意指定时建议传入为[object Object]
    • encoderKey(aclTensor*,计算输入):可选参数,Device侧的aclTensor,注意力机制前的Key,支持ND([batch, seqEncoderKey, headNum, headDim])。数据类型支持FLOAT16、BFLOAT16、FLOAT32。用户不特意指定时建议传入为[object Object]
    • encoderValue(aclTensor*,计算输入):可选参数,Device侧的aclTensor,注意力机制前的Value,支持ND([batch, seqEncoderValue, headNum, headDim])。数据类型支持FLOAT16、BFLOAT16、FLOAT32。用户不特意指定时建议传入为[object Object]
    • normQueryWeight(aclTensor*,计算输入):可选参数,Device侧的aclTensor,公式中正向输入Query进行归一化操作的权重值,支持ND([headDim])。数据类型支持FLOAT16、BFLOAT16、FLOAT32。用户不特意指定时建议传入为[object Object]
    • normQueryBias(aclTensor*,计算输入):可选参数,Device侧的aclTensor,公式中正向输入query进行归一化操作的偏差,支持ND([headDim])。数据类型支持FLOAT16、BFLOAT16、FLOAT32。用户不特意指定时建议传入为[object Object]
    • normKeyWeight(aclTensor*,计算输入):可选参数,Device侧的aclTensor,公式中正向输入key进行归一化操作的权重值,支持ND([headDim])。数据类型支持FLOAT16、BFLOAT16、FLOAT32。用户不特意指定时建议传入为[object Object]
    • normKeyBias(aclTensor*,计算输入):可选参数,Device侧的aclTensor,公式中正向输入key进行归一化操作的偏差,支持ND([headDim])。数据类型支持FLOAT16、BFLOAT16、FLOAT32。用户不特意指定时建议传入为[object Object]
    • normEncoderQueryWeight(aclTensor*,计算输入):可选参数,Device侧的aclTensor,公式中正向输入encoderQuery进行归一化操作的权重值,支持ND([headDim])。数据类型支持FLOAT16、BFLOAT16、FLOAT32。用户不特意指定时建议传入为[object Object]
    • normEncoderQueryBias(aclTensor*,计算输入):可选参数,Device侧的aclTensor,公式中正向输入encoderQuery进行归一化操作的偏差,支持ND([headDim])。数据类型支持FLOAT16、BFLOAT16、FLOAT32。用户不特意指定时建议传入为[object Object]
    • normEncoderKeyWeight(aclTensor*,计算输入):可选参数,Device侧的aclTensor,公式中正向输入encoderKey进行归一化操作的权重值,支持ND([headDim])。数据类型支持FLOAT16、BFLOAT16、FLOAT32。用户不特意指定时建议传入为[object Object]
    • normEncoderKeyBias(aclTensor*,计算输入):可选参数,Device侧的aclTensor,公式中正向输入encoderKey进行归一化操作的偏差,支持ND([headDim])。数据类型支持FLOAT16、BFLOAT16、FLOAT32。用户不特意指定时建议传入为[object Object]
    • ropeSin(aclTensor*,计算输入):可选参数,Device侧的aclTensor,公式中正向输入进行旋转位置编码操作的sin值,支持ND([seqRope, headDim]),[object Object]长度大小需在[1~min(seqQuery+seqEncoderQuery, seqKey+seqEncoderKey)]之间。数据类型支持FLOAT16、BFLOAT16、FLOAT32。用户不特意指定时建议传入为[object Object]
    • ropeCos(aclTensor*,计算输入):可选参数,Device侧的aclTensor,公式中正向输入进行旋转位置编码操作的cos值,支持ND([seqRope, headDim])。数据类型支持FLOAT16、BFLOAT16、FLOAT32。用户不特意指定时建议传入为[object Object]
    • normType(int64_t,计算输入):Host侧的int64,指定query、key归一化操作类型,0:不进行归一化操作,1:层归一化操作,2:带仿射变换参数层归一化操作,用户不特意指定时建议传入为0。
    • normAddedType(int64_t,计算输入):Host侧的int64,指定encoderQuery、encoderKey归一化操作类型,0:不进行归一化操作,1:层归一化操作,2:带仿射变换参数层归一化操作,用户不特意指定时建议传入为0。
    • ropeType(int64_t,计算输入):Host侧的int64,指定query与encoderQuery、key与encoderKey进行Concat后的旋转位置编码操作类型,0:不进行旋转位置编码操作,1:Interleave类型旋转位置编码,2:Half类型旋转位置编码,用户不特意指定时建议传入为0。
    • concatOrder(int64_t,计算输入):Host侧的int64,指定query与encoderQuery、key与encoderKey、value与encoderValue的Concat操作叠加顺序,以query为例,0:[query, encoderQuery],1:[encoderQuery, query],用户不特意指定时建议传入为0。
    • eps(double,计算输入):Host侧的eps,norm的eps,用户不特意指定时建议传入为1e-5。
    • isTraining(bool,计算输入):Host侧的bool,是否训练场景,用户不特意指定时建议传入false(推理场景)。当传入true时,会输出normQueryMean,normQueryRstd,normKeyMean,normKeyRstd,normEncoderQueryMean,normEncoderQueryRstd,normEncoderKeyMean,normEncoderKeyRstd。
    • queryOutput(aclTensor*,计算输出):Device侧的aclTensor,公式中正向输入query和encoderQuery处理后的最终输出,支持ND([batch,headNum, seqQuery+seqEncoderQuery, headDim])。 数据类型支持FLOAT16、BFLOAT16、FLOAT32。
    • keyOutput(aclTensor*,计算输出):Device侧的aclTensor,公式中正向输入key和encoderKey处理后的最终输出,支持ND([batch,headNum, seqKey+seqEncoderKey, headDim])。 数据类型支持FLOAT16、BFLOAT16、FLOAT32。
    • valueOutput(aclTensor*,计算输出):Device侧的aclTensor,公式中正向输入value和encoderValue处理后的最终输出,支持ND([batch,headNum, seqValue+seqEncoderValue, headDim])。 数据类型支持FLOAT16、BFLOAT16、FLOAT32。
    • normQueryMean(aclTensor*,计算输出):可选参数,Device侧的aclTensor,公式中正向输入query进行归一化操作的均值μ,非训练场景(isTraining=false)时可不传入,支持ND([batch, seqQuery, headNum, 1])。数据类型支持FLOAT32。用户不特意指定时建议传入为[object Object]
    • normQueryRstd(aclTensor*,计算输出):可选参数,Device侧的aclTensor,公式中正向输入query进行归一化操作的方差相关项rstd,非训练场景(isTraining=false)时可不传入,支持ND([batch, seqQuery, headNum, 1])。数据类型支持FLOAT32。用户不特意指定时建议传入为[object Object]
    • normKeyMean(aclTensor*,计算输出):可选参数,Device侧的aclTensor,公式中正向输入key进行归一化操作的均值μ,非训练场景(isTraining=false)时可不传入,支持ND([batch, seqKey, headNum, 1])。数据类型支持FLOAT32。用户不特意指定时建议传入为[object Object]
    • normKeyRstd(aclTensor*,计算输出):可选参数,Device侧的aclTensor,公式中正向输入key进行归一化操作的方差相关项rstd,非训练场景(isTraining=false)时可不传入,支持ND([batch, seqKey, headNum, 1])。数据类型支持FLOAT32。用户不特意指定时建议传入为[object Object]
    • normAddedQueryMean(aclTensor*,计算输出):可选参数,Device侧的aclTensor,公式中正向输入encoderQuery进行归一化操作的均值μ,非训练场景(isTraining=false)时可不传入,支持ND([batch, seqEncoderQuery, headNum, 1])。数据类型支持FLOAT32。用户不特意指定时建议传入为[object Object]
    • normAddedQueryRstd(aclTensor*,计算输出):可选参数,Device侧的aclTensor,公式中正向输入encoderQuery进行归一化操作的方差相关项rstd,非训练场景(isTraining=false)时可不传入,支持ND([batch, seqEncoderQuery, headNum, 1])。数据类型支持FLOAT32。用户不特意指定时建议传入为[object Object]
    • normAddedKeyMean(aclTensor*,计算输出):可选参数,Device侧的aclTensor,公式中正向输入encoderKey进行归一化操作的均值μ,非训练场景(isTraining=false)时可不传入,支持ND([batch, seqEncoderKey, headNum, 1])。数据类型支持FLOAT32。用户不特意指定时建议传入为[object Object]
    • normAddedKeyRstd(aclTensor*,计算输出):可选参数,Device侧的aclTensor,公式中正向输入encoderKey进行归一化操作的方差相关项rstd,非训练场景(isTraining=false)时可不传入,支持ND([batch, seqEncoderKey, headNum, 1])。数据类型支持FLOAT32。用户不特意指定时建议传入为[object Object]
    • workspaceSize(uint64_t*,出参):返回需要在Device侧申请的workspace大小。
    • executor(aclOpExecutor**,出参):返回op执行器,包含了算子计算流程。
  • 返回值:

    返回aclnnStatus状态码,具体参见

    [object Object]

aclnnNormRopeConcat

  • 参数说明:

    • workspace(void*,入参):在Device侧申请的workspace内存地址。
    • workspaceSize(uint64_t,入参):在Device侧申请的workspace大小,由第一段接口aclnnNormRopeConcatGetWorkspaceSize获取。
    • executor(aclOpExecutor*,入参):op执行器,包含了算子计算流程。
    • stream(aclrtStream,入参):指定执行任务的Stream。
  • 返回值:

    返回aclnnStatus状态码,具体参见

约束说明

  • headDim长度在[1~1024]间,或者headDim为偶数。
  • seqRope长度大小在[1~Min(seqQuery+seqEncoderQuery, seqKey+seqEncoderKey)]之间。

调用示例

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

[object Object]