NormRopeConcatGrad
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | × |
| Atlas 训练系列产品 | × |
功能说明
-
算子功能:(多模态)transformer注意力机制中,针对query、key和Value实现归一化(Norm)、旋转位置编码(Rope)、特征拼接(Concat)融合算子功能反向推导。
-
计算公式:
-
LayerNorm反向推导:
∂L∂x=rstd⋅(∂L∂y−Mean(∂L∂y)−x^⋅Mean(∂L∂y⊙x^))[Mean over headDim dimension] \frac{\partial L}{\partial x} = \text{rstd} \cdot \Bigg( \frac{\partial L}{\partial y} - \text{Mean}\left( \frac{\partial L}{\partial y} \right) - \hat{x} \cdot \text{Mean}\left( \frac{\partial L}{\partial y} \odot \hat{x} \right) \Bigg) \quad \quad \quad \quad \quad \quad \quad \text{[Mean over headDim dimension]}
-
LayerNorm(带仿射变换参数)反向推导:
{∂L∂β=∑B,S,H∂L∂y,[Sum over batch, seq, headNum dimensions]∂L∂γ=∑B,S,H∂L∂y⊙x^,[Element-wise product accumulation]∂L∂x=rstd⋅(∂L∂x^−Mean(∂L∂x^)−x^⋅Mean(∂L∂x^⊙x^))[Mean over headDim dimension]} \left\{ \begin{aligned} \frac{\partial L}{\partial \beta} &= \sum_{B, S, H} \frac{\partial L}{\partial y}, &\quad \text{[Sum over batch, seq, headNum dimensions]} \\ \frac{\partial L}{\partial \gamma} &= \sum_{B, S, H} \frac{\partial L}{\partial y} \odot \hat{x}, &\quad \text{[Element-wise product accumulation]} \\ \frac{\partial L}{\partial x} &= \text{rstd} \cdot \Bigg( \frac{\partial L}{\partial \hat{x}} - \text{Mean}\left( \frac{\partial L}{\partial \hat{x}} \right) - \hat{x} \cdot \text{Mean}\left( \frac{\partial L}{\partial \hat{x}} \odot \hat{x} \right) \Bigg) &\quad \text{[Mean over headDim dimension]} \\ \end{aligned} \right\}
-
其中(μ为均值,σ^2为方差):
x^=x−μσ2+ϵ,∂L∂x^=∂L∂y⊙γ,rstd=1σ2+ϵ \hat{x} = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}}, \quad \quad \frac{\partial L}{\partial \hat{x}} = \frac{\partial L}{\partial y} \odot \gamma, \quad \quad \text{rstd} = \frac{1}{\sqrt{\sigma^2 + \epsilon}}
-
Rope-Interleave反向推导:
∂L∂x=∂L∂y⋅cos+Interleave(∂L∂y⋅sin)⊙negMask \frac{\partial L}{\partial x} = \frac{\partial L}{\partial y} \cdot \text{cos} + Interleave({\frac{\partial L}{\partial y} \cdot \text{sin}}) \odot \text{negMask}
-
Rope-Half反向推导:
∂L∂x=∂L∂y⋅cos+Half(∂L∂y⋅sin)⊙negMask \frac{\partial L}{\partial x} = \frac{\partial L}{\partial y} \cdot \text{cos} + Half({\frac{\partial L}{\partial y} \cdot \text{sin}}) \odot \text{negMask}
-
其中Interleave()表示headDim维度奇数与偶数位置交替重组,Half()表示headDim维度后半和前一半元素交替重组,例如x = [0,1,2,3,4,5,6,7], 则Interleave(x) = [1,0,3,2,5,4,7,6],Half(x)=[4,0,5,1,6,2,7,3];negMask为headDim长度,偶数位为1, 奇数位为-1,即(1, -1, 1, -1, 1, ...)
-
-
参数说明:
参数名 输入/输出/属性 描述 数据类型 数据格式 gradQueryOutput 输入 网络层对query和encoderQuery正向输出结果的反向梯度值,对应公式中的y,encoderQuery参数为nullptr时seqEncoderQuery值为0,headDim长度大小需在[1~1024]间且为偶数,shape为[batch, headNum, seqQuery+seqEncoderQuery, headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND gradKeyOutput 输入 网络层对key和encoderKey正向输出结果的反向梯度值,对应公式中的y,encoderKey参数为nullptr时seqEncoderKey值为0,数据类型与参数gradQueryOutput保持一致,shape为[batch, headNum, seqKey+seqEncoderKey, headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND gradValueOutput 输入 网络层对value和encoderValue正向输出结果的反向梯度值,对应公式中的y,encoderValue参数为nullptr时seqEncoderValue值为0,seqValue长度大小与seqKey一致,seqEncoderValue长度大小与seqEncoderKey一致,数据类型与参数gradQueryOutput保持一致,shape为[batch, headNum, seqValue+seqEncoderValue, headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND query 输入 正向输入的query(多模态中图片Query),对应公式中的x,数据类型与参数gradQueryOutput保持一致,shape为[batch, seqQuery, headNum, headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND key 输入 正向输入的key(多模态中图片Key),对应公式中的x,数据类型与参数gradQueryOutput保持一致,shape为[batch, seqKey, headNum,headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND encoderQuery 可选输入 正向输入的encoderQuery(多模态中文本Query),对应公式中的x,当文本Query参与训练时进行传入,数据类型与参数gradQueryOutput保持一致,shape为[batch, seqEncoderQuery, headNum, headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND encoderKey 可选输入 正向输入的encoderKey(多模态中文本Key),对应公式中的x,当文本Key参与训练时进行传入,数据类型与参数gradQueryOutput保持一致,shape为[batch, seqEncoderKey, headNum, headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND normQueryWeight 可选输入 正向query进行归一化操作的权重值,对应公式中的γ,当图片Query、Key进行带仿射LayerNorm归一化操作时传入,数据类型与参数gradQueryOutput保持一致,shape为[headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND normQueryMean 可选输入 正向query进行归一化操作时输出的均值,对应公式中的μ,当图片Query、Key进行归一化操作时传入,shape为[batch, seqQuery, headNum, 1]。 FLOAT32 ND normQueryRstd 可选输入 正向query进行归一化操作时输出的方差相关项,对应公式中的rstd,当图片Query、Key进行归一化操作时传入,shape为[batch, seqQuery, headNum, 1]。 FLOAT32 ND normKeyWeight 可选输入 正向key进行归一化操作的权重值,对应公式中的γ,当图片Query、Key进行带仿射LayerNorm归一化操作时传入,数据类型与参数gradQueryOutput保持一致,shape为[headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND normKeyMean 可选输入 正向key进行归一化操作时输出的均值,对应公式中的μ,当图片Query、Key进行归一化操作时传入,shape为[batch, seqKey, headNum, 1]。 FLOAT32 ND normKeyRstd 可选输入 正向key进行归一化操作时输出的方差相关项rstd,对应公式中的rstd,当图片Query、Key进行归一化操作时传入,shape为[batch, seqKey, headNum, 1]。 FLOAT32 ND normAddQueryWeight 可选输入 正向encoderQuery进行归一化操作的权重值,对应公式中的γ,当文本Query、Key进行带仿射LayerNorm归一化操作时传入,数据类型与参数gradQueryOutput保持一致,shape为[headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND normAddQueryMean 可选输入 正向encoderQuery进行归一化操作时输出的均值,对应公式中的μ,当文本Query、Key进行归一化操作时传入,shape为[batch, seqEncoderQuery, headNum, 1]。 FLOAT32 ND normAddQueryRstd 可选输入 正向encoderQuery进行归一化操作时输出的方差相关项,对应公式中的rstd,当文本Query、Key进行归一化操作时传入,shape为[batch, seqEncoderQuery, headNum, 1]。 FLOAT32 ND normAddKeyWeight 可选输入 正向encoderKey进行归一化操作的权重值,对应公式中的γ,当文本Query、Key进行带仿射LayerNorm归一化操作时传入,数据类型与参数gradQueryOutput保持一致,shape为[headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND normAddKeyMean 可选输入 正向encoderKey进行归一化操作时输出的均值,对应公式中的μ,当文本Query、Key进行归一化操作时传入,shape为[batch, seqEncoderKey, headNum, 1]。 FLOAT32 ND normAddKeyRstd 可选输入 正向encoderKey进行归一化操作时输出的方差相关项,对应公式中的rstd,当文本Query、Key进行归一化操作时传入,shape为[batch, seqEncoderKey, headNum, 1]。 FLOAT32 ND ropeSin 可选输入 公式中正向输入进行旋转位置编码操作的sin值,当图片或文本Query、Key进行旋转位置编码操作时传入,seqRope长度大小需在[1~min(seqQuery+seqEncoderQuery, seqKey+seqEncoderKey)]之间,数据类型与参数gradQueryOutput保持一致,shape为[seqRope, headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND ropeCos 可选输入 公式中正向输入进行旋转位置编码操作的cos值,当图片或文本Query、Key进行旋转位置编码操作时传入,数据类型与参数gradQueryOutput保持一致,shape为[seqRope, headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND normType 可选属性 指定query、key归一化操作类型,0:不进行归一化操作,1:层归一化操作,2:带仿射变换参数层归一化操作,用户不特意指定时建议传入为0。 INT64 - normAddedType 可选属性 指定encoderQuery、encoderKey归一化操作类型,0:不进行归一化操作,1:层归一化操作,2:带仿射变换参数层归一化操作,用户不特意指定时建议传入为0。 INT64 - ropeType 可选属性 指定query与encoderQuery、key与encoderKey进行Concat后的旋转位置编码操作类型,0:不进行旋转位置编码操作,1:Interleave类型旋转位置编码,2:Half类型旋转位置编码,用户不特意指定时建议传入为0。 INT64 - concatOrder 可选属性 指定query与encoderQuery、key与encoderKey、value与encoderValue的Concat操作叠加顺序,以query为例,0:[query, encoderQuery],1:[encoderQuery, query],用户不特意指定时建议传入为0。 INT64 - gradQuery 输出 公式中网络层对正向输入query的反向梯度值,数据类型与参数gradQueryOutput保持一致,shape为[batch, seqQuery, headNum, headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND gradKey 输出 公式中网络层对正向输入key的反向梯度值,数据类型与参数gradQueryOutput保持一致,shape为[batch, seqKey, headNum, headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND gradValue 输出 公式中网络层对正向输入value的反向梯度值,数据类型与参数gradQueryOutput保持一致,shape为[batch, seqValue, headNum, headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND gradEncoderQuery 可选输出 公式中网络层对正向输入encoderQuery的反向梯度值,当文本Query参与训练时输出,数据类型与参数gradQueryOutput保持一致,shape为[batch, seqEncoderQuery, headNum, headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND gradEncoderKey 可选输出 公式中网络层对正向输入encoderKey的反向梯度值,当文本Key参与训练时输出,数据类型与参数gradQueryOutput保持一致,shape为[batch, seqEncoderKey, headNum, headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND gradEncoderValue 可选输出 公式中网络层对正向输入encoderValue的反向梯度值,当文本Value参与训练时输出,数据类型与参数gradQueryOutput保持一致,shape为[batch, seqEncoderValue, headNum, headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND gradNormQueryWeight 可选输出 公式中网络层对正向输入query进行归一化操作的γ权重反向梯度值,当图片Query、Key进行带仿射LayerNorm归一化操作时输出,数据类型与参数gradQueryOutput保持一致,shape为[headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND gradNormQueryBias 可选输出 公式中网络层对正向输入query进行归一化操作的β偏移反向梯度值,当图片Query、Key进行带仿射LayerNorm归一化操作时输出,数据类型与参数gradQueryOutput保持一致,shape为[headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND gradNormKeyWeight 可选输出 公式中网络层对正向输入key进行归一化操作的γ权重反向梯度值,当图片Query、Key进行带仿射LayerNorm归一化操作时输出,数据类型与参数gradQueryOutput保持一致,shape为[headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND gradNormKeyBias 可选输出 公式中网络层对正向输入key进行归一化操作的β偏移反向梯度值,当图片Query、Key进行带仿射LayerNorm归一化操作时输出,数据类型与参数gradQueryOutput保持一致,shape为[headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND gradNormAddedQueryWeight 可选输出 公式中网络层对正向输入encoderQuery进行归一化操作的γ权重反向梯度值,当文本Query、Key进行带仿射LayerNorm归一化操作时输出,数据类型与参数gradQueryOutput保持一致,shape为[headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND gradNormAddedQueryBias 可选输出 公式中网络层对正向输入encoderQuery进行归一化操作的β偏移反向梯度值,当文本Query、Key进行带仿射LayerNorm归一化操作时输出,数据类型与参数gradQueryOutput保持一致,shape为[headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND gradNormAddedKeyWeight 可选输出 公式中网络层对正向输入encoderKey进行归一化操作的γ权重反向梯度值,当文本Query、Key进行带仿射LayerNorm归一化操作时输出,数据类型与参数gradQueryOutput保持一致,shape为[headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND gradNormAddedKeyBias 可选输出 公式中网络层对正向输入encoderKey进行归一化操作的β偏移反向梯度值,当文本Query、Key进行带仿射LayerNorm归一化操作时输出,数据类型与参数gradQueryOutput保持一致,shape为[headDim]。 FLOAT32、FLOAT16、BFLOAT16 ND
约束说明
无。
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| aclnn接口 | test_aclnn_norm_rope_concat_backward.cpp | 通过aclnnNormRopeConcatBackward接口方式调用NormRopeConcatGrad算子。 |