⚡ News

内存立省85%!Rust高性能向量索引库Turbovec发布,基于谷歌TurboQuant算法

内存立省85%!Rust高性能向量索引库Turbovec发布,基于谷歌TurboQuant算法

向量搜索是大多数检索增强生成(RAG)管道的核心基础。然而,在大规模应用中,其成本非常昂贵。以float32格式存储1000万个文档嵌入(embeddings)通常需要消耗约31GB的内存。对于在本地或本地部署环境下运行推理的开发团队来说,这一内存开销构成了巨大的技术约束。

一个名为 Turbovec 的新型开源库直接解决了这一难题。这是一个采用 Rust 编写并提供 Python 绑定的向量索引库,其核心构建在谷歌研究院(Google Research)提出的 TurboQuant 量化算法之上。通过 Turbovec,同样规模的1000万文档语料库仅需 4GB 内存即可存储。在 ARM 硬件上,其搜索速度甚至比 FAISS 的 IndexPQFastScan 快 12%–20%。

TurboQuant 算法最初由谷歌研究团队推出,被定义为一种“数据无关(data-oblivious)”的量化器。它在所有位宽和维度上都能实现接近最优的失真率,且具有零训练、零数据扫描的特性。相比之下,包括 FAISS 的乘积量化(Product Quantization)在内的大多数生产级向量量化器都需要一个码本(codebook)训练步骤。在开始索引之前,必须对代表性向量样本运行 k-means 聚类。如果语料库增长或分布发生偏移,往往需要重新训练并重建整个索引。TurboQuant 则跳过了这些步骤,它利用旋转向量的解析特性,而非依赖于数据的标定。

Turbovec 的向量量化流程分为四个步骤:首先,对每个向量进行归一化处理,将长度(模)提取并存储为单个浮点数,使每个向量成为高维超球面上的单位方向;其次,应用随机旋转,所有向量乘以相同的随机正交矩阵,旋转后各坐标独立遵循 Beta 分布,在高维空间中收敛于高斯分布 N(0, 1/d);接着,应用 Lloyd-Max 标量量化,由于分布是解析可知的,仅通过数学计算即可预先算出最优的分桶边界和质心,无需扫描数据;最后,将量化后的坐标打包成字节,例如 1536 维向量在 2-bit 下可从 6,144 字节压缩至 384 字节,压缩比高达 16 倍。

在搜索时,查询向量也会被旋转到相同域中。评分过程直接针对码本值进行,其内核使用了 SIMD 指令集优化——包括 ARM 上的 NEON、现代 x86 上的 AVX-512BW 以及 AVX2 备选方案,并配合半字节拆分查找表以提升吞吐量。在 100K 向量规模的基准测试中,Turbovec 展示出了极高的召回率和速度表现,成为了 FAISS 强有力的替代方案。

↗ 阅读原文