TurboQuant:6倍压缩LLM KV缓存,精度零损失
在自回归语言模型生成中,注意力机制依赖于先前标记的键(Key)和值(Value)向量。每一步重新计算完整上下文效率极低,因此需要缓存中间表示。KV缓存随上下文长度线性增长,限制了吞吐量和最大上下文长度。
在长序列场景下,推理受限于内存带宽:GPU花费更多时间读取数据而非计算,导致延迟增加和成本上升。TurboQuant通过压缩缓存同时保留语义信息来应对这一挑战,确保注意力机制正常运作。
PolarQuant的工作原理
第一阶段是PolarQuant。向量经过随机旋转后转换为极坐标形式。半径(rho)编码向量大小,角度(phi)捕捉方向信息。
# 伪代码:PolarQuant
rotated = rotate_random(vector)
rho = norm(rotated) # 半径
phi = angle(rotated) # 角度
quantized = quantize(rho, phi)
随机旋转简化了数据分布,使其更易于量化。无需额外参数或码本,即可实现每值3–4比特的压缩,且无需微调模型。
通过QJL实现误差校正
量化会引入噪声。第二阶段采用QJL(量化约翰逊-林登斯特拉-斯引理),仅用1比特/值编码残差误差。该变换保持向量间的欧几里得距离——这对点积注意力至关重要。
QJL以量化形式近似约翰逊-林登斯特拉-斯引理:
- 输入:PolarQuant后的残差
- 输出:1比特修正值
- 性质:对任意x, y ∈ KV缓存,有 ||Qx - Qy|| ≈ ||x - y||
两者结合,可实现每值1.25–2比特的压缩,且困惑度下降极小。
基准测试与性能表现
在Llama-3.1-8B-Instruct(LongBench)上的测试结果:
- 压缩率:相比基线提升6–8倍
- 对数运算加速:在H100上最高达8倍(基于JAX基线)
- 质量:针堆找针与长上下文任务中,性能下降不足1%
在GloVe(d=200)数据集上,TurboQuant在召回率与压缩比之间达到最优平衡(1:k最优)。
| 方法 | 每值比特数 | 压缩比 | 困惑度下降 |
|--------|------------|-------------|------------------|
| 基线 | 16 | 1x | 0% |
| INT8 | 8 | 2x | 0.5% |
| TurboQuant(3比特) | 3 | 6x | 0.2% |
无需重新训练即可实现高达3比特压缩——这是零样本量化领域的重大突破。
核心亮点
- 极致压缩:每值3比特时,KV缓存减少6倍。
- 推理提速:在内存瓶颈任务中,最高提速8倍。
- 距离保真:QJL确保注意力机制兼容性。
- 普适性强:适用于向量搜索与RAG场景。
- 无需微调:可直接替换现有LLM的缓存模块,即插即用。
超越LLM的应用
TurboQuant不仅适用于Transformer架构,还可拓展至向量数据库。嵌入向量压缩后仍能维持ANN搜索性能(如HNSW、FAISS)。在边缘设备上,显著降低DRAM需求,支持本地化推理。
对资深工程师而言:可集成至自定义推理引擎。JAX/Flax支持简化原型开发。建议在超长上下文(>128k token)场景下测试,以释放真实应用价值。
— Editorial Team
暂无评论。