LaserAttentionGradOperation
产品支持情况
产品  | 
是否支持  | 
|---|---|
√  | 
|
√  | 
|
x  | 
|
x  | 
|
x  | 
功能
训练场景下,使用LaserAttention算法实现self-attention(自注意力)的计算(反向)。
定义
1 2 3 4 5 6 7 8 9 10 11  | struct LaserAttentionGradParam { int headNum = 0; std::string inputLayout = "BNSD"; float scaleValue = 0.08838834764831843; float keepProb = 1.0f; int preTokens = 2147483647; int nextTokens = 1; int sparseMode = 0; int innerPrecise = 1; uint8_t rsv[8] = {0}; };  | 
参数列表
成员名称  | 
类型  | 
默认值  | 
取值范围  | 
描述  | 
|---|---|---|---|---|
headNum  | 
int  | 
0  | 
(0, INT_MAX]  | 
head个数,需大于0。  | 
inputLayout  | 
string  | 
"BNSD"  | 
"BNSD"  | 
输入排布。  | 
scaleValue  | 
float  | 
0.08838834764831843  | 
(0, 1]  | 
缩放系数。  | 
keepProb  | 
float  | 
1.0f  | 
目前暂未使用,配置值未生效,可配任意值  | 
需要保留的比例,与dropMask相关。  | 
preTokens  | 
int  | 
2147483647  | 
[1, INT_MAX],为256的整数倍  | 
sparse纵向滑动窗口大小。与seqSize相关,约束参考规格约束。  | 
nextTokens  | 
int  | 
1  | 
目前暂未使用,配置值未生效,可配任意值  | 
sparse横向滑动窗口大小。  | 
sparseMode  | 
int  | 
0  | 
目前暂未使用,配置值未生效,可配任意值  | 
sparse模式,是否有下三角/梯形掩码。  | 
innerPrecise  | 
int  | 
1  | 
1  | 
精度模式。1:高精度模式。  | 
rsv[8]  | 
uint8_t  | 
{0}  | 
-  | 
预留参数。  | 
输入
参数  | 
维度  | 
数据类型  | 
格式  | 
描述  | 
|---|---|---|---|---|
query  | 
[batch, qHeadNum, seqSize, q_head_size]  | 
bf16  | 
ND  | 
注意力机制的Q矩阵。  | 
key  | 
[batch, kvHeadNum, kvSize, k_head_size]  | 
bf16  | 
ND  | 
注意力机制的K矩阵。  | 
value  | 
[batch, kvHeadNum, kvSize, v_head_size]  | 
bf16  | 
ND  | 
注意力机制的V矩阵。  | 
attentionOutGrad  | 
[batch, qHeadNum, seqSize, v_head_size]  | 
bf16  | 
ND  | 
正向输出(attentionOut)的梯度。  | 
pseShift  | 
-  | 
-  | 
-  | 
目前为预留接口,输入空Tensor。  | 
dropMask  | 
-  | 
-  | 
-  | 
目前为预留接口,输入空Tensor。  | 
paddingMask  | 
-  | 
-  | 
-  | 
目前为预留接口,输入空Tensor。  | 
attenMask  | 
[seqSize, kvSize]  | 
float16  | 
ND  | 
attention范围。 该接口可选,可正常输入,也可输入空Tensor不参与计算。  | 
softmaxMax  | 
[batch, qHeadNum, seqSize]  | 
float  | 
ND  | 
对应前向的输出softmaxMax。  | 
softmaxSum  | 
[batch, qHeadNum, seqSize]  | 
float  | 
ND  | 
对应前向的输出softmaxSum。  | 
softmaxIn  | 
[...]  | 
bf16  | 
ND  | 
对应前向的输出softmaxOut。维度可任意配置。  | 
attentionIn  | 
[batch, qHeadNum, seqSize, v_head_size]  | 
bf16  | 
ND  | 
对应前向的输出attentionOut。  | 
prefix  | 
-  | 
-  | 
-  | 
目前为预留接口,输入空Tensor。  | 
actualSeqQLen  | 
-  | 
-  | 
-  | 
目前为预留接口,输入空Tensor。  | 
actualSeqKVLen  | 
-  | 
-  | 
-  | 
目前为预留接口,输入空Tensor。  | 
输出
参数  | 
维度  | 
数据类型  | 
格式  | 
描述  | 
|---|---|---|---|---|
queryGrad  | 
[batch, qHeadNum, seqSize, q_head_size]  | 
bf16  | 
ND  | 
输出tensor。  | 
keyGrad  | 
[batch, kvHeadNum, kvSize, k_head_size]  | 
bf16  | 
ND  | 
输出tensor。  | 
valueGrad  | 
[batch, kvHeadNum, kvSize, v_head_size]  | 
bf16  | 
ND  | 
输出tensor。  | 
dpse  | 
[...]  | 
bf16  | 
ND  | 
目前为预留接口,维度可任意配置。  | 
规格说明
- qHeadNum值与参数headNum值相同。
 - qHeadNum值是kvHeadNum值的整数倍。
 - seqSize值和kvSize值均为256的整数倍。
 - 构造query/key/value时,若值域配置在[-100, 100]以内,采取uniform均匀分布方式生成数据;否则,采取normal正态分布,均值在[-100, 100]内随机选取,标准差在[1, 25]内随机选取。
 - 当attenMask不为空Tensor时:
- seqSize值和kvSize值相同。
 - 为下三角形,当preTokens < seqSize时,算子内部当作梯形处理。
 
 - attentionOutGrad值域为[-0.5, 0.5]。
 - q_head_size、k_head_size和v_head_size的值有以下组合:
q_head_size
k_head_size
v_head_size
约束说明
128
128
128
seqSize值不小于参数preTokens值。
192
256
128
seqSize值和参数preTokens值相同。