多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

TurboQuant原理解析上篇:为什么随机正交旋转能让KV Cache量化几乎无损

TurboQuant原理解析上篇:为什么随机正交旋转能让KV Cache量化几乎无损 【免费下载链接】turboquantTurboQuant: Near-optimal KV cache quantization for LLM inference (3-bit keys, 2-bit values) with Triton kernels vLLM integration项目地址https://gitcode.com/gh_mirrors/tu/turboquant点击查看免费下载TurboQuant 是一种面向 LLM 推理的 KV Cache 量化方案核心思想是随机正交旋转 Lloyd-Max 标量量化把 Key 压缩到 3-bit、Value 压缩到 2-bit再配合 Triton 融合内核与 vLLM 集成在实测中做到 Key 压缩余弦相似度 1.000000几乎无损、显存容量直接翻倍。本篇从原理出发讲清楚为什么一个随机旋转矩阵就能让低比特量化不毁模型。 先看清问题KV Cache 为什么是显存瓶颈LLM 推理的每个 token 在自注意力层都会产生一对 Key/Value 向量它们必须一直留在显存里供后续解码反复读取。上下文越长KV Cache 占用越大——它常是长上下文、高并发场景下的第一显存杀手。最直觉的压缩办法是量化把每个 bf16 的数存成 3-bit 甚至更少的索引。但量化必然带来误差对模型输出质量是否几乎无损完全取决于误差长什么样、能不能被控制。TurboQuant 的答案分三步先旋转再查表最后补一个符号位。对应的压缩存储设计见 store.py。 为什么朴素的逐坐标量化会翻车一个 head_dim128 的 Key 向量逐坐标量化时会遇到两个经典麻烦离群值撑爆量级只要某一维数值特别大scale 就被拉宽其余小数值全被挤进极窄区间精度归零能量集中在少数坐标高维随机向量的模长天然倾向于扎堆在个别维度上直接量化这些大坐标一个坐标的舍入误差就足以毁掉整个向量的方向。于是量化误差变成数据相关、不可预测的东西——你无法保证它对注意力分数无害。 核心原理随机正交旋转把数据问题变成统计问题TurboQuant 的第一步是对归一化后的向量做一次随机正交旋转x_unit x / ‖x‖₂ y Π · x_unit其中 Π 是一个 d×d 的正交矩阵旋转不改变长度只改变方向。妙处在于Π 乘上一个单位向量等价于把这个点随机地撒到单位超球面上。这样一来旋转后每一个坐标 y_j 的取值分布与数据本身完全无关只取决于维度 d并且是严格已知的——一个定义在 [-1, 1] 上的缩放 Beta 分布codebook.py 头部注释给出了精确形式高维下它高度集中在 0 附近近似 N(0, 1/d)每个坐标的方差恒等于 1/d没有离群值可乘之机量化误差由此变成一个可积分、可证明的统计量论文定理 1-3 的误差界都建立在这个性质上。随机性不是加在数据上的抖动而是加在坐标基上的预处理分布被钉死之后量化器就拥有了确定性。实现上旋转矩阵用固定种子的 QR 分解生成rotation.py取 d×d 高斯随机矩阵 G做 QR 分解得正交阵 Q用 R 对角线符号修正保证 det 1纯旋转而非反射前向旋转y x·Πᵀ、反向旋转x y·Πrotation.py。开销方面完全可忽略d128 时矩阵只有 64 KBfloat32每层生成一次、由固定种子决定同层所有注意力头共享。追求更快的话注释里还提到了 O(d log d) 的随机 Hadamard 变换近似方案rotation.py。 分布已知之后Lloyd-Max 最优码本旋转把分布钉死后标量量化就退化成一道最优 1D k-means作业在 [-1, 1] 上对 Beta 分布跑 Lloyd-Max 迭代找到每个比特宽度的最优质心与判决边界实现见 codebook.py。项目预生成了各维度/比特数的码本codebooks/ 目录例如 codebook_d128_b3.jsond128、3-bit的 8 个质心-0.1884, -0.1181, -0.0666, -0.0216, 0.0216, 0.0666, 0.1181, 0.1884注意两个自动出现的特征质心关于 0 对称——因为分布是对称的中间密、边缘疏——概率密度大的区域分配了更细的格子。这就是最优的含义同样的比特数下MSE 比均匀分格更小。以该码本为例codebook_d128_b3.jsonmse_per_coord ≈ 2.65e-4 mse_total ≈ 3.40e-2对单位向量换算成单位向量的相对误差约 5.8%方向余弦相似度约 0.98——这正是后面 Key 压缩几乎无损的数学来源误差被摊薄到了全部 128 个维度上没有哪一维能单独捣乱。 最后 1 bit 的巧思QJL 残差符号位让估计无偏注意力真正关心的是内积 ⟨query, key⟩打分而不是 Key 能否被逐值还原。TurboQuant 把 3-bit 预算拆成2-bit 主码本 1-bit 残差符号quantizer.py用 2-bit Lloyd-Max 码本量化旋转后的向量得到近似 x̃取残差 r x − x̃乘一个随机高斯矩阵 S只保留每个投影坐标的符号sign(S·r)——每维 1 bit8 个符号打包进 1 字节quantizer.py同时存下 ‖r‖ 用于还原量级。反量化时的内积估计器为⟨y, x̃⟩ ‖r‖·(√(π/2)/d) · ⟨Sᵀy, signs⟩第二项是 QJL 残差校正。它的美妙之处在于对随机 S 取期望sign 项的期望恰好为 0因此E[估计值] ⟨y, x⟩ —— 整个估计器无偏无偏意味着量化误差没有系统性方向2-bit 直接量化往往会整体压低打分、扭曲 softmax 权重而这里误差是围绕真值的对称噪声注意力排序保持稳定。项目实测验证了这一点相对偏差 0.1%README Paper Validation 一节。 完整流水线与实测效果串起来TurboQuant 的量化管线是步骤作用比特开销每维源码归一化分离模长与方向模长单独精确保存≈0每向量 1 个浮点quantizer.py随机正交旋转 Π坐标分布 → 已知 Beta 分布0矩阵离线共享rotation.pyLloyd-Max 码本查表找最近质心 → 位索引b−1Key 为 2codebook.pyQJL 残差符号无偏校正内积1quantizer.py位打包存储2-bit 每字节 4 个值—quantizer.pyValue 侧则采用更朴素的 2-bit 分组量化逐组 scale/zero 位打包kv_cache.py最近若干 token 以 bf16 精度留在环形缓冲中保质量capture.py读取时压缩段与精确段合并做注意力score.py解码路径还有 3 个融合 Triton 内核直接从打包数据算分triton_kernels.pyvLLM 集成入口在 integration/vllm.py。实测数字README Benchmark Results组件余弦相似度备注3-bit Key 压缩1.000000几乎无损2-bit Value 量化0.940质量瓶颈敏感场景可换 4-bit0.9973b Key 2b Value 组合0.940退化主要来自 Value 侧指标Qwen3.5-27B4 卡基线 bf16TurboQuantKV Cache 释放—30.0 GB最大 token 容量457,072914,1442.0x长上下文 Prefill1,804 tok/s1,907 tok/s5.7%纯 dense 注意力模型上整体压缩比可达 4.4x。本地可运行pip install -e .后执行 proof.py 做 A/B 基准对比复现。✅ 小结TurboQuant 上篇的原理可以浓缩成一条链随机正交旋转→ 坐标分布与数据无关Beta→Lloyd-Max 码本按分布最优分配比特 →QJL 符号位消除系统性偏差 → 量化误差变成可证明、无偏的对称噪声→ 注意力打分几乎无损。一句话它不是更小心地量化数据而是先随机化坐标基把不可控的数据问题变成可解的统计问题——旋转的那一点随机性就是几乎无损的全部秘密。核心模块索引模块职责turboquant/rotation.py随机正交旋转矩阵QR与 QJL 投影矩阵turboquant/codebook.pyLloyd-Max 最优码本求解turboquant/quantizer.pyTurboQuantMSE / TurboQuantProd 两种量化器turboquant/codebooks/预生成码本d64/128/5761–4 bitturboquant/store.py压缩 KV 存储分块 惰性展平turboquant/score.py压缩历史 精确缓冲的混合注意力turboquant/triton_kernels.py解码注意力 3 个融合 Triton 内核turboquant/integration/vllm.pyvLLM 适配器monkey-patch多模式开关proof.py基线 vs TurboQuant A/B 基准脚本赞分享【免费下载链接】turboquantTurboQuant: Near-optimal KV cache quantization for LLM inference (3-bit keys, 2-bit values) with Triton kernels vLLM integration项目地址https://gitcode.com/gh_mirrors/tu/turboquant点击查看免费下载相关推荐LMDeploy KV Cache 量化实战INT4/INT8 在线量化与 TurboQuant 原理、配置与性能分析LMDeploy KV Cache 量化实战INT4/INT8 在线量化与 TurboQuant 原理、配置与性能分析 KV Cache 量化是降低 LLM人工智能大模型模型推理服务推理引擎本地部署模型量化TurboQuant 实战指南基于 PolarQuant 与 Walsh-Hadamard 旋转的 KV Cache 压缩原理、配置与落地TurboQuant 实战指南基于 PolarQuant 与 Walsh Hadamard 旋转的 KV Cache 压缩原理、配置与落地 本文以仓库根目录LMDeploy KV Cache 量化实战INT4/INT8 在线量化与 TurboQuant 深入解析LMDeploy KV Cache 量化实战INT4/INT8 在线量化与 TurboQuant 深入解析 本篇技术指南以 LMDeploy 的 KV Cac人工智能大模型模型推理服务推理引擎本地部署模型量化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表