turbovec
Google TurboQuant 论文的 Rust + Python 实现:2-4 bit 向量量
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Google TurboQuant 论文的 Rust + Python 实现:2-4 bit 向量量
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
如果你做过 RAG(检索增强生成)系统,一定遇到过这个头疼的问题:Embedding 模型产出的向量维度越来越高——OpenAI 的 text-embedding-3-large 单个向量就有 3072 维,一百万条数据就是 12GB 的原始向量。就算你用 FP16 半精度存储,也要 6GB。这还没算索引结构的内存开销。
大多数团队的第一反应是换更大的服务器,或者上云数据库。但 Google Research 的一篇论文给出了一个更优雅的答案:不需要训练代码本,不需要单独的准备阶段,直接把向量压到 2-4 个 bit,精度损失还比你精心调参的 PQ(乘积量化)方法更高。
这个论文的工程实现,就是今天的主角——turbovec。
图1:OpenAI 1536维向量在不同 k 值下的 R@1 召回率,TurboQuant 在 2-bit 和 4-bit 配置下均领先 FAISS
turbovec 由独立开发者 Ryan Codrai 用 Rust 编写,配套 Python bindings,通过 maturin 打包为可直接 pip install 的轮子。它完整实现了 Google Research 在 ICLR 2026 发表的 TurboQuant 论文,核心原理异常精妙:
核心洞察:对向量施加一个随机正交旋转后,每个坐标的分布会趋近于可预测的数学分布(高维空间下收敛到 N(0, 1/d) 的高斯分布),与原始数据无关。
这意味着 quantization 的码本(codebook)可以从数学公式直接推导出来,不需要从数据中训练!传统 PQ 需要运行 k-means++ 找聚类中心,TurboQuant 只需要查预计算好的 Lloyd-Max 标量量化表。
整个算法链路是:
图2:3072维向量的召回率对比,TurboQuant 在 4-bit 配置下全面领先
turbovec 在 benchmarks/suite/ 中提供了完整的对比测试,测试数据集包括 GloVe (200d)、OpenAI DBpedia (1536d/3072d)。
x86 平台(Intel Xeon Platinum 8481C,8 vCPU):
ARM 平台(Apple M3 Max):
量化压缩效果(以 1536d 为例):
| 精度 | 原始大小 | TurboQuant 2-bit | 压缩比 |
|---|---|---|---|
| FP32 | 6144 B | 768 B | 8x |
| FP32 | 6144 B | 384 B | 16x |
图3:GloVe 数据集召回率,TurboQuant 在 2-bit 低比特配置下优势最为明显
turbovec 的代码结构非常清晰:
turbovec/ # Rust 核心库
src/codebook.rs # Lloyd-Max 码本预计算
src/encode.rs # 编码流水线
src/search.rs # SIMD 搜索内核
src/rotation.rs # 随机旋转矩阵
src/pack.rs # 位打包/解包
turbovec-python/ # Python bindings (via pyo3 + maturin)
python/ # Python API 层
tests/ # 集成测试
SIMD 内核策略:
Python 集成:原生支持 LangChain、LlamaIndex、Haystack、Agno 等主流 RAG 框架:
pip install turbovec
pip install turbovec[langchain]
pip install turbovec[llama-index]
适用场景:
局限性:
turbovec 代表的不仅是又一个向量索引库,而是 Google TurboQuant 论文从学术到工程的完整闭环。它最令人兴奋的点在于:不需要训练数据,不需要调参,直接数学推导就能拿到接近理论最优的量化效果。这对中小企业来说意义重大——不再需要用 GPU 跑几个小时 k-means,只要几行代码就能压缩向量并开始检索。
目前该项目处于 Alpha 阶段(v0.7.0),但已经支持 Python 3.9-3.14 全版本,且 CI 覆盖了 ARM 和 x86 双平台。随着 RAG 应用持续火热,这类高效量化库的价值会越来越凸显。
参考链接: