支持量化好的q, k, v传入,降低显存占用。
参数“quantType”置为TYPE_QUANT_QKV_OFFLINE或TYPE_QUANT_QKV_ONLINE, 分别为离线量化与在线量化。
在线全量化需要添加四个输入tensor,分别是qkDescale、qkOffset、vpvDescale、vpvOffset,当采用离线量化时,需要在在线全量化新增的输入tensor的基础上额外传入pScale作为输入tensor。
若干输入tensor需要传入指定的维度,如下表所示:
参数 |
维度 |
数据类型 |
格式 |
npu or cpu |
描述 |
---|---|---|---|---|---|
query |
[nTokens, headNum, headSize] |
int8 |
ND |
npu |
query矩阵。 |
key |
[nTokens, headNum, headSize] |
int8 |
ND |
npu |
key矩阵。 |
value |
[nTokens, headNum, headSize] |
int8 |
ND |
npu |
value矩阵。 |
mask |
float16/bf16 |
ND/NZ |
npu |
四种shape分别对应: 1.所有batch相同,方阵。 2. batch不同时的方阵。 3. batch不同时的向量。 4. alibi场景。 当maskType为undefined时不传此tensor。 |
|
seqLen |
[batch] |
int32 |
ND |
cpu |
等于1时,为增量或全量;大于1时,为全量。 |
slopes |
[headNum] |
ND |
npu |
当maskType为alibi压缩,且mask为[256,256]时需传入此tensor,为alibi mask每个head的系数。 |
|
qkDescale |
[headNum] |
float |
ND |
npu |
为Q*K^T的反量化scale参数。 |
qkOffset |
[headNum] |
int32 |
ND |
npu |
作为Q*K^T的反量化offset参数。预留tensor,需传任意非空tensor,实际暂未使用。 |
vpvDescale |
[headNum] |
float |
ND |
npu |
quantType=2时,为P*V的反量化scale参数;quantType=3时,为V的反量化scale参数。 |
vpvOffset |
[headNum] |
int32 |
ND |
npu |
仅全量化场景传此tensor(即quantType=2或3)。quantType=2时,为P*V的反量化offset参数;quantType=3时,为V的反量化offset参数。 预留tensor,需传任意非空tensor,实际暂未使用。 |
pScale |
[headNum] |
float |
ND |
npu |
P的离线量化scale参数,当开启离线全量化时需要传此tensor(即quantType=2)。当开启在线全量化时不传此tensor(即quantType=3)。 |
output |
[nTokens, headNum, headSize] |
float16/bf16 |
ND |
npu |
输出。 |
其中pScale仅在离线量化场景传入,在线量化场景则不传此输入tensor。
使用全量化时需要指定输出tensor的数据类型,具体为使用参数outDataType,该参数只能是ACL_FLOAT16或ACL_BF16。
“calctype”须为PA_ENCODER。
不支持