一般的,传入SelfAttention算子的q,k,v的维度为[batch, seqLen, headNum, head_dim],即[b, s, n, d],或者是它合轴后的变种。在某些场景下,传入[b, n, s, d]性能更好。
参数“inputLayout”置为TYPE_BNSD。
输入参数如下:
输入tensor |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
query |
[batch, headNum, seqLen, headSize] |
float16/bf16 |
ND |
query矩阵。 |
cacheK |
[layer, batch, headNum, seqLen, headSize] |
float16/bf16 |
ND |
|
cacheV |
[layer, batch, headNum, seqLen, headSize] |
float16/bf16 |
ND |
|
输入tensor |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
query |
[batch, headNum, seqLen, headSize] |
float16/bf16 |
ND |
query矩阵。 |
cacheK |
[layer, batch*headNum, headSize / 16, kvMaxSeq, 16] |
float16/bf16 |
NZ |
|
cacheV |
[layer, batch*headNum, headSize / 16, kvMaxSeq, 16] |
float16/bf16 |
NZ |
|
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
query |
[batch, headNum, qSeqLen, headSize] |
bf16 |
ND |
query矩阵。 |
cacheK |
[batch, kvHeadNum, kvSeqLen, headSize] |
bf16 |
ND |
key矩阵。 |
cacheV |
[batch, kvHeadNum, kvSeqLen, headSize] |
bf16 |
ND |
value矩阵。 |
SeqLen |
[batch] / [2, batch] |
int32/uint32 |
ND |
若shape为[batch] ,代表每个batch的序列长度,query,cacheK,cacheV相同。 若shape为[2,batch],SeqLen[0]代表query的序列长度,SeqLen[1]代表cacheK,cacheV的序列长度。 |
attnOut |
[batch, headNum, qSeqLen, headSize] |
bf16 |
ND |
输出tensor。 |