Paper | Advantages | Problems |
---|
NoMAD-Attention | 使用 PQ 的方法避免了大量的 QK相乘这一过程的 MAD 计算,加速了长序列 Attention 的计算。 使用 SIMD 加速实现了这一过程(实际实现上应该是依赖于 FAISS)
| 并不是主流的 KVcache 量化方法,并且采用 PQ 的方法存在较大的问题。 仍然无法避免的 Q 和 PQ 的中心点的每一次的 FP32 的 MAD 的计算。 无法充分发挥 CPU 的整型计算的优势,全部的计算使用 FP32 进行。
|
INT-FlashAttention | 充分利用了 INT8 类型的 Tensor Core 的计算能力,优化了 Attention 计算中的GeMM 的计算。 其中对于 exp 的计算存在进一步的小小优化,可以使用 LUT 的方式避免将 QK 的计算结果反量化的操作。 其计算准确程度,要比 FP8 要好很多。
| 只能进行 per-token 的量化,并且仅仅支持 8bit 情况下的性能优化。(或者说1bit、2bit 性能和 8bit 一样)
|
QServe | 找出了当前的 KVcache 量化的存在的主要bottleneck 在反量化的过程,解释了其中 ATOM 等工作在 CUDA core 有限时的性能差的问题。 提出 QoQ 二级量化算法,在保持推理精度几乎无损的前提下,将权重、激活与 KV-cache 分别量化到 4 bit/8 bit/4 bit。 基于 QoQ 量化算法,利用软硬件结合的方式,充分利用了 INT8-Tensor Core 的性能,并且降低了越界的风险。
| 仍然属于经典的反量化/量化的计算流程。 没有考虑端侧场景。
|
KVTuner | 成功提出了一种在有限 GPU 显存下,自动进行量化的规划的一个框架,检测到显存不足,自动量化一部分,阶梯型的量化过程。 通过实验观察以及理论推导,证明了对于KVcache 可以进行 low-bit 的量化的正确性。 通过实验发现对于 KV 之间,K 的精度应该比 V 的精度更高一点,也就是说 K4V4 > K4V2 > K2V4 > K2V2。
| 仅仅支持 token-level 的量化。
|
Cocktail | 使用prefill 的过程中取得的不同 query 和 kv 之间的 score 决定量化策略,对 KV cache 进行一次性的分级量化,总体上分成 FP16、INT4 和 INT2 的KVcache,之后分段进行计算并且 reduce。 使用 reorder 的方法对于 KVcache 进行移动,为了更好的进行分段的计算。
| 仅仅只能在 prefill 的时候进行一次量化策略的决定,无法适配多轮长对话的场景。
|
PM-KVQ | 类似 KVTuner,实现了一种对于有限 budget 的内存大小情况下,进行动态的量化。 使用了Position interpolation的方法,将少量的 context 映射到长的 RoPE 上。 使用小的一个 context,进行校准。
| 仅仅支持 token-level 的量化。
|
| | |
| | |
| | |