聊一聊谷歌新算法TurboQuant

11 阅读8分钟

最近谷歌在自己的技术博客上介绍了一种新的向量量化算法TurboQuant,引起了不小的轰动。有的自媒体已经在宣传谷歌把内存股价打崩了。这两者是不是有直接的联系我不清楚,但这个领域我正好有点了解,所以今天来聊一聊这个 TurboQuant 到底是怎么回事。

在我写这篇文章的时候,RaBitQ 的作者已经公开发文质疑 TurboQuant 了。RaBitQ 是什么后文会讲,之所以把这段话放在前面,是希望读者能够都能看到,了解一下算法背后的来龙去脉。具体内容我就不评论了,大家自行评判。

1. TurboQuant 是做什么的?

简单来说,TurboQuant 是一种向量压缩算法。它的目标是将高维向量(比如几百到几千维的浮点数序列)用更少的存储空间来表示,同时尽可能保持向量的原始信息。

在当今的 AI 应用中,向量无处不在。

当你使用搜索引擎搜索一段文本或者一张图片时,系统需要从海量数据中找到跟它们相似的内容。这些数据都是通过一个叫做"embedding"的过程,转换成向量存储的。这个搜索过程叫做"向量检索",更专业一点的说法是"近似最近邻搜索"(Aproximate Nearest Neighbor Search)。如果向量被压缩得更小,搜索速度会更快,内存占用也会更少。

当你跟AI助手对话,背后的大语言模型生成回复时,每生成一个新的token,都需要用到之前生成的所有内容。这些中间结果以 KV Cache 的形式存储起来,以加快推理速度。KV Cache 也是向量。随着生成长度的增加,KV Cache 会占用大量显存。通过压缩 KV Cache,可以在同样的硬件上运行更长的上下文,或者服务更多的用户。

现在的模型越来越大,模型内用来表示数据的向量也往往非常大。以一个 1536 维的向量为例,如果用传统的 16 位浮点数存储,每个向量需要 3KB 空间。当数据量达到百万、千万级别时,存储和计算成本会变得非常高。TurboQuant 的作用就是将这些向量"压缩",用更少的比特数来表示,从而节省存储空间和计算时间。


2. TurboQuant 的效果怎么样?

谷歌的博客说TurboQuant可以把KV Cache压缩6倍,而几乎没有性能损失。TurboQuant到底有没有那么神奇?我们来看一下TurboQuant论文里的数据。

向量检索场景

在标准的向量检索测试中,研究人员使用了包含 100 万个向量的数据集。传统方法需要在索引构建阶段花费大量时间进行聚类训练,而 TurboQuant 几乎不需要这个时间。

具体来说,对于一个 1536 维的向量:

  • 传统方法(RaBitQ)需要约 2267 秒 来构建索引
  • TurboQuant 只需要 0.0013 秒

这个性能提升巨大,同时在检索精度上,TurboQuant 不仅没有下降,反而略有提升。

KV Cache 场景

在大语言模型的长文本测试中,研究人员使用了 Llama-3.1-8B 模型,测试其在长文档理解任务上的表现。结果显示:

  • 未压缩的原始模型得分:0.997
  • 使用 TurboQuant 压缩到 3.5 bit/维度后得分:0.997

也就是说,在压缩了约 4.5 倍的情况下,模型性能完全没有损失。即使压缩到 2.5 bit/维度,得分也保持在 0.994,仅有微小下降。相比之下,其他压缩方法在同等压缩率下,性能下降会更明显。


3. TurboQuant 怎么达到这种效果的?

TurboQuant 的核心思想,是利用随机数据中的确定性。听起来有点矛盾,但是可以这样理解:想象你有一组杂乱分布的点。如果你从不同角度去观察它们,某些角度下这些点可能会呈现出更规则的分布。TurboQuant 做的就是找到一个特殊的"观察角度"——通过数学上的旋转变换,让向量在新的坐标系下呈现出可预测的分布规律。

具体来说,TurboQuant 假设原始向量在高纬空间中均匀分布,经过随机旋转后,向量的每个坐标值会服从"Beta 分布"。这个发现非常关键,因为它意味着我们可以预先计算出最优的量化方案,而不需要针对具体数据进行训练。

TurboQuant的量化过程分为三步:

第一步:归一化
将向量缩放到单位长度,这样所有向量都在同一个"球面"上。

第二步:随机旋转
用一个随机生成的旋转矩阵对向量进行变换。这一步是关键,它使得旋转后的坐标值呈现出稳定的统计分布。

第三步:查表量化
根据预计算的最优码本,将每个坐标值映射到最近的离散值。这个过程非常快,因为只是简单的查表操作。

传统量化方法(如 PQ)需要先对大量数据进行聚类训练,找到合适的"代表点"。这个过程既耗时又依赖于具体的数据分布。TurboQuant 的优势在于:

  • 不需要训练:码本是预先计算好的,基于数学推导而非数据拟合
  • 适用于任何数据:因为依赖的是旋转后的统计规律,而不是具体数据特征
  • 速度极快:量化过程只是简单的矩阵乘法和查表操作

4. TurboQuant 是不是革命性的创新?

要回答这个问题,我觉得有必要先介绍一种叫做 RaBitQ 的量化算法。

RaBitQ 是南洋理工大学 2024 年发表的一种量化方法,它率先使用了随机旋转的思想。TurboQuant 和 RaBitQ 遵循同样的算法框架:归一化 -> 随机旋转 -> 量化。它们的区别在第三步。RaBitQ 的做法是,用"立方体"的顶点作为量化点。前面讲过,归一化之后的向量分布在一个"球面"上,RaBitQ 就是用这个球体内切立方体的顶点作为量化点。而 TurboQuant 是利用坐标值的统计分布进行标量量化。

最初版本的 RaBitQ 只能进行 1-bit 量化(每个浮点数压缩为1 bit),很快南洋理工的团队又发表了 Extended RaBitQ,把它扩展到 n-bit 量化,可以使用更多的空间来提高精度。它的主要原理是对立方体进行分割,创造出顶点之外的量化点,这样每个量化点代表的向量范围就更小,量化也就更加精细。但是这样做的代价是,在量化的时候需要从更多的量化点里面寻找最接近的那一个,时间复杂度是指数级的,所以速度也就更慢了。TurboQuant 论文里对比的,就是 Extended RaBitQ。它指出的 RaBitQ 量化速度慢的问题,应该也是这个原因。不过这个问题 RaBitQ 后面也解决了,把复杂度降到了线性级。虽然没有发表论文,但是在他们开源的代码库里有所体现。在这点上,相比 RaBitQ,TurboQuant 并没有它所声称的巨大优势

RaBitQ 和 Extended RaBitQ 发表之后,在工业界也引起了很大的关注。Milvus、Elastic等主流的数据库产品都采用了这一算法。

有一点需要指出的是,RaBitQ 一开始是专为向量检索场景设计的,虽然后续也有研究工作把它用于大模型的推理。而 TurboQuant 则同时适用于向量检索和 KV Cache 两种场景。

TurboQuant 的团队在之前也发表的一系列相研究工作,包括 QJL 和 PolarQuant,都是针对 KV Cache 的压缩算法,和 TurboQuant、RaBitQ 也都有相似之处。特别是 QJL,它还是 TurboQuant 的重要组件之一。TurboQuant 在用于 KV Cache 进行内积计算时,需要用到 QJL。TurboQuant 可以算是 QJL 的延伸和改进,同时兼顾了向量检索的场景。

在我看来,TurboQuant 更像是一次重要的渐进式创新,而非颠覆式的革命。它继承了 RaBitQ"随机旋转"的思想,结合团队的工作积累,在具体实现上做了重要优化,在工程实践上还是很有价值的。

其实 TurboQuant 也并非最近的新成果,它的论文差不多1年前就已经发表在 arXiv 上了。谷歌最近才把它拿出来 PR ,可能主要还是因为1月份刚刚被顶会 ICLR 录用了。ICLR 2026即将在4月份召开,提前预热一下。


结语

TurboQuant 代表了一种新的量化范式:不依赖于具体数据的统计特性,而是通过数学变换创造出可预测的分布规律。这种方法不仅在理论上优雅,在实践中也展现出了显著的优势。对于需要处理大规模向量的应用来说,TurboQuant 提供了一个值得考虑的选择。当然,真是的效果可能还需要更多的实践来检验,论文里有限的benchmark仅仅是参考。不过创新从来也不是一蹴而就的。靠一个革命性的想法就颠覆一切,这更像是小说情节。现实世界中,技术演进背后的脉络,要远比故事复杂。