QKV Full Quantization
Description
Quantized q, k, and v can be passed to reduce the graphics memory usage.
How to Enable
Set quantType to TYPE_QUANT_QKV_OFFLINE (offline quantization) or TYPE_QUANT_QKV_ONLINE (online quantization).
Online full quantization requires four input tensors: qkDescale, qkOffset, vpvDescale, and vpvOffset. When offline quantization is used, pScale needs to be passed as the input tensor based on the new input tensor for online full quantization.
The following table lists the dimensions that need to be specified for input tensors.
Parameter |
Dimension |
Data Type |
Format |
npu or cpu |
Description |
|---|---|---|---|---|---|
query |
[nTokens, headNum, headSize] |
int8 |
ND |
npu |
Query matrix |
key |
[nTokens, headNum, headSize] |
int8 |
ND |
npu |
Key matrix |
value |
[nTokens, headNum, headSize] |
int8 |
ND |
npu |
Value matrix |
mask |
Same as Mask Types. Different when mask compression is enabled. For details, see compressing mask. |
float16/bf16 |
ND/NZ |
npu |
The four shapes are described as follows: 1. All batches are the same, square matrix. 2. Matrix with different batches. 3. Vectors with different batches. 4. Alibi. This tensor is not passed when maskType is undefined. |
seqLen |
[batch] |
int32 |
ND |
cpu |
1: incremental or full mode. > 1: full mode. |
slopes |
[headNum] |
ND |
npu |
When maskType is set to ALiBi compression and the shape of mask is set to [256, 256], this tensor needs to be passed. It is the coefficient of each head of the ALiBi mask. |
|
qkDescale |
[headNum] |
float |
ND |
npu |
Dequantization scale of Q x K^T |
qkOffset |
[headNum] |
int32 |
ND |
npu |
Dequantization offset of Q*K^T Reserved. A non-null tensor needs to be passed. This parameter is not used currently. |
vpvDescale |
[headNum] |
float |
ND |
npu |
When quantType is 2, this parameter indicates the dequantized scale of P x V. When quantType is 3, this parameter indicates the dequantized scale of V. |
vpvOffset |
[headNum] |
int32 |
ND |
npu |
This tensor is passed only in full quantization scenarios (quantType=2 or 3).
Reserved. A non-null tensor needs to be passed. This parameter is not used currently. |
pScale |
[headNum] |
float |
ND |
npu |
Offline quantization scale of P.
|
output |
[nTokens, headNum, headSize] |
float16/bf16 |
ND |
npu |
Output. |
pScale is passed only in the offline quantization scenario.
Constraints
When full quantization is used, specify the data type of the output tensor by using the outDataType parameter, which can only be ACL_FLOAT16 or ACL_BF16.
calctype must be set to PA_ENCODER.
Not supported by