LLM系列:KVCache量化

827 阅读5分钟

1 KIVI: A Tuning-Free Asymmetric 2bit Quantization for KV Cache

论文:arxiv.org/abs/2402.02…
github:github.com/jy-yuan/KIV…
被引次数:13
量化规格:KV Cache 2bit

量化思路: LLMs batch size和序列长度不断增大,KV Cache成为推理性能和内存的瓶颈。

论文分析KV cache数据分布后,提出Key per-channel、Value per-token的2bit KV cache量化方案,推理内存减小2.6倍。显存降低带来batch size 4倍增大,吞吐显著提升。

image.png

Attention计算的流程:
prefill 阶段
XK=XWK,XV=XWVX_K=XW_K, X_V=XW_V

decode 阶段
t(shape[b,1,d])表示增量输入token embedding,更新kv Cache:
tK=tWK,tV=tWVt_{K} = tW_K, t_{V}=tW_{V}
XKConcat(XK,tK)X_{K} \leftarrow Concat(X_{K}, t_{K})

计算attention output: tQ=tWQt_{Q}=tW_{Q} A=Softmax(tQXKT)A=Softmax(t_{Q}X_{K}^{T}) tO=AXVt_{O}=AX_{V} WKW_KWVW_VWQW_Q表示K、Q、V权重。

关键问题:per-token量化能与自回归的流式特性很好对齐,per-channel量化无法直接实现(由于per-channel跨不同长度tokens)。 论文把key cache XKX_K分成量化XKgX_{K_{g}}和残差XKrX_{K_{r}}两部分,其中XKgX_{K_{g}} 可按每组G个tokens被切分。KIVI算法流程图如下:

Q(XKg)Q(X_{K_{g}}) 分组量化,XKrX_{K_{r}}保持fp16全精度。decoding阶段,新生成的tKt_{K}添加到XKrX_{K_{r}},当XKrX_{K_{r}}达到超参R的长度,量化tKt_{K}并Concate到Q(XKg)Q(X_{K_{g}}),并且重置XKrX_{K_{r}}为空。

attention logits的计算: Ag=tQQ(XKgT)A_g=t_{Q}Q(X_{K_{g}}^{T}) XKr=Concat([XKr,tK])X_{K_{r}} = Concat([X_{K_{r}}, t_{K}]) Ar=tQ(XKrT)A_{r}=t_{Q}(X_{K_{r}}^{T}) A=Concat([Ag,Ar])A=Concat([A_g, A_r])

weight-only量化(例如GPTQ、AWQ)与KIVI量化正交,可以叠加; KIVI与SmoothQuant对比,SmoothQuant压缩A8W8精度比较好,但压缩4bit精度劣化严重; KIVI量化方案给HF Transformers量化很大启发。

参考:
KV缓存量化解锁长文本生成
KV Cache量化技术,单卡100K大模型

2 Flexgen:High-throughput generative inference of large language models with a single gpu

论文:arxiv.org/abs/2303.06…
github:github.com/FMInference…
被引次数:200
量化规格:KV Cache 4-bit

量化思路: 论文提出使用压缩(压缩weight和kv Cache,稀疏Attention)+offloading,提升推理batch size,实现高吞吐推理。在吞吐优先的场景,增大batch size牺牲一点推理性能,缓冲昂贵的IO通信(计算通信掩盖),可以显著提升offloading效率。 Flexgen框架在T4单机推理OPT-175B吞吐率提升100倍。

offloading-based systems: Flexgen、DeepSpeed、Accelerate
offloading技术:为了能在有限的显存硬件执行LLM推理,可以把权重offload到二级memory,再部分加载完成part-by-part计算。

Group-wise Quantization
量化方式选型:由于目标是降低mem和IO,不是加速计算(激活量化做定点矩阵乘),选择细粒度group quantization(高压缩率)并且矩阵计算前反量化fp16,精度影响较小。 论文发现沿着output channel维度对权重分组,沿着hidden维度对kv cache分组,这种group方式精度损失较小而且runtime-efficient。

Sparse Attention
论文发现稀疏Attention(top 10% attention value cache,OPT-175B)能保持模型正确结果,提出一种简单的TOP-K稀疏方法。

3 KVQuant: Towards 10 Million Context Length LLM Inference with KV Cache Quantization

论文:arxiv.org/abs/2401.18…
github:github.com/SqueezeAILa…
被引次数:12
量化规格:KV Cache 2、3、4bit

量化思路: 在长序列场景,KV cache activations成为主要内存瓶颈,为了解决4bit以下kv cache量化精度问题,论文提出:
(1)Per-Channel Key Quantization
(2)Pre-RoPE Key Quantization,RoPE前量化key
(3)Non-Uniform KV Cache Quantization,非均匀 KV 缓存量化,选择每层敏感性加权的非均匀数据类型来更好地表示分布的技术
(4)Per-Vector Dense-and-Sparse Quantization,向量级的密集和稀疏量化,隔离一小部分数值异常值,例如1%异常值不量化,以全精度形式保存在另一个稀疏矩阵。可能会影响执行效率。

4 Squeezellm: Dense-and-sparse quantization

论文:arxiv.org/abs/2306.07…
github:github.com/SqueezeAILa…
被引次数:101
量化规格:非均匀量化 3bit

摘要:LLM自回归推理的bottleneck是memory、bandwidth,而非compute,在短序列输入下(short seq length),显存消耗主要是模型权重,压缩模型权重大小可显著缓解mem-bound问题。论文提出SqueezeLLM PTQ框架可以达到精度几乎无损3-bit量化,而且能获得更好的量化性能。主要创新点:
(i) sensitivity-based non-uniform quantization,基于敏感度非均匀量化。根据二阶信息,搜索最优的量化bit精度。
(ii) the Dense-and-Sparse decomposition, dense和sparse分解,把outliers和敏感权重values放在稀疏矩阵。 性能效果:LLama模型,3-bit量化perplexity相比fp16基线的gap,优化2.1x SOTA方法,推理性能相比fp16 2.3x提升。

Methodology:
(1) sensitivity-based non-uniform quantization

为什么选择非均匀量化?
原因:(a)模型权重非均匀分布;(b)均匀量化具有高效整数计算的优势(这里指均匀量化过程,不是指算子整数计算),但不会对LLM增量推理有性能收益。

搜索最优的非均匀量化配置参数问题可以转化为一个k-means问题,可以形式化表示为: Q(w)=argminQWWQ2Q(w)^*={arg\,min}_Q||W-W_Q||^2
W是原始权重,WQW_Q是对应量化权重,最优解Q(w)Q(w)^*可以通过1维k-means聚类求得。这一步perplexity已经超过均匀量化。

Sensitivity-Based K-means Clustering
权重量化虽然是在每个layer引入扰动(perturbations)误差,但目标是最小化final loss的误差,并不关注个别layer误差。因此,k-means的质心(centroids)需要放置在敏感values(对final loss非常敏感的value)附近。论文推导出满足此目标的量化误差公式如下:
Q(w)=argminQ(WWQ)TH(WWQ)Q(w)^*={arg\,min}_Q(W-W_Q)^TH(W-W_Q) (1)

H可以简化为 HΓ=1DdDgdgdTH\approx\Gamma=\frac{1}{|D|}\sum_{d\in D}g_dg_d^T (2)

简化后量化误差公式:
Q(w)=argminQ(WWQ)Tdiag(Γ)(WWQ)Q(w)^*={arg\,min}_Q(W-W_Q)^Tdiag(\Gamma)(W-W_Q) (3)

上述公式是加权k-means聚类,质心会被“拉”到敏感权重。

(2) Dense-and-Sparse decomposition

统计LLaMA-7B的权重参数,99.9%的参数分布在10%的数据范围内,因此按大范围量化权重,会明显降低量化性能(准确度)。因此对权重W使用“低秩分解”,outliers分解到Sparse matrix(S),剩余参数保留在Dense matrix(D): W=D+SW= D+ S

WX=DX+SXWX= DX+ SX, dense和sparse矩阵乘两个kernels可以并行。

Sensitivity-Based Sparse Matrix
除了outliers 分解到Sparse矩阵,还可以把sensitive weight matrix values(敏感权重值,可以通过Fisher information准确识别)分解到Sparse矩阵。 这样做不仅使敏感权重值保持fp16,避免对模型output产生影响,还会阻止质心偏向于敏感权重值。
实验证明3-bit LLaMa-7B,提取0.45% outliers和敏感值,perplexity优化7.67->7.56。

总结:论文关注短序列LLM模型自回归推理优化,分析自回归推理是memory-bound。使用创新方式量化模型权重参数,超越GPTQ、AWQ、SpQR等权重量化算法,达到SOTA性能水平。