qkv全量化

功能

支持量化好的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

mask类型,开启mask压缩功能时与FA有所不同,见压缩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]

Atlas 800I A2 推理产品/Atlas A2 训练系列产品Atlas A3 推理系列产品/Atlas A3 训练系列产品: float16

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。

不支持Atlas 推理系列产品