
Turbovec:把 10 亿级向量搜索塞进内存的开源索引,比 FAISS 还快
Turbovec 是 Google TurboQuant 算法的 Rust 实现:1000 万文档的向量索引从 31GB 压缩到 4GB,搜索速度平均比 FAISS 快 3.4 倍(4-bit),无需训练、支持在线增量添加。
原文来源:GitHub — RyanCodrai/turbovec — 基于 Google TurboQuant 算法的 Rust 向量索引:量化后内存占用压缩到 1/8,搜索速度在多数配置下反超 FAISS。
做 RAG 的人最头疼的问题是什么?向量索引太吃内存。1000 万个文档的 embedding,用 float32 存要 31GB 内存,小机器根本扛不住。Turbovec 这个刚发布 1.0.0 的开源项目给出的答案是:同样的数据,压到 4GB,而且搜索更快。它在 GitHub 上已经拿到了 14.9k stars。
它解决什么问题
Turbovec 是 Google Research 的 TurboQuant 算法(ICLR 2026)的 Rust 实现,附带 Python 绑定。TurboQuant 是一种"数据无关"的量化器——它不需要像 FAISS 的 PQ(乘积量化)那样先跑一个训练阶段来学习码本,添加向量时直接索引,没有参数调优,语料增长也不需要重建索引。
对实际使用来说,这意味着两件事:
一是内存。 1000 万向量 × 1536 维 × 4 字节 float32 = 约 31GB。用 4-bit 量化后约 4GB,压缩了约 8 倍。embedding 越大、语料越多,省得越明显。在很多场景下,这直接决定了你的 RAG 服务是跑在一台 8GB 内存的小 VPS 上,还是必须租 64GB 的高配机器。
二是没有训练步骤。 FAISS 的 IndexIVFPQ 用之前要拿一批数据训码本,训完才能 add。Turbovec 免训练、在线添加——向量进来就索引好,不需要"准备阶段"。
—— 广告 ——
性能:手写 SIMD 内核的胜利
Turbovec 的搜索内核全是手写的 SIMD 汇编级优化:ARM 上用 NEON SDOT/SMMLA 指令,x86 上用 AVX-512 VNNI 和 vpermb 指令,另有 AVX2 和纯标量回退路径兜底老 CPU。
按项目 README 的基准数据,在 8 组测试配置(不同维度/位宽的交叉)里,4-bit 量化下平均比 FAISS 的 IndexPQFastScan 快 3.4 倍,2-bit 下平均快 23%。x86 上 2-bit 的搜索略落后于 FAISS(最明显的是 d=1536 单线程约慢 8%),但 4-bit 全面领先。
细节上它也做了不少工程:比如 x86-64 基线降到 v2 让老 CPU 能跑标量回退,AVX-512/AVX2 内核用 #[target_feature] 门控在运行时调度;ARM 上 2-bit 时 tile floor 从 512 提到 1024(因为字节数减半后 L2 命中性更好)。这些"hill-climb"优化迭代有完整的基准日志记录在 benchmarks/hillclimb/ 里——50 个假设、35 次探针,每个都记录了机制。
几个值得一提的设计
增量保存。 sync(path) 只持久化上次同步以来变化的部分,每次调用一次 fsync,崩溃时任意字节处都安全。删除或小量追加只需毫秒级,无论索引多大。这对"持续写入"的 RAG 应用很友好——不用每次全量 dump。
搜索时过滤。 search() 支持传 id 白名单(或槽位掩码),SIMD 内核直接在 32 向量块粒度上跳过不允许的块。混合检索场景(先用 SQL/BM25 粗筛候选,再做向量精排)可以省掉大部分 SIMD 计算,而不是先算完再丢弃。
框架集成。 LangChain、LlamaIndex、Haystack、Agno 都有 drop-in 替换:pip install turbovec[langchain] 就能替换 langchain_core.vectorstores.InMemoryVectorStore,接口和持久化语义一致,改个 import 就行。
怎么用
Python 端用法很直白:
from turbovec import TurboQuantIndex
index = TurboQuantIndex(dim=1536, bit_width=4)
index.add(vectors)
index.add(more_vectors)
scores, indices = index.search(query, k=10)
index.write("my_index.tv")
loaded = TurboQuantIndex.load("my_index.tv")需要稳定的外部 ID(删除后仍保持)时用 IdMapIndex,支持 add_with_ids 和 O(1) 的 remove。注意输入必须是 float32 的二维数组,其他 dtype 会被直接拒绝而不是悄悄转换。
索引文件格式是自有的 v7 版本,1.0.0 承诺向后兼容——这个版本写出的文件,未来版本还能读。旧的 v5/v6 文件可以用内置转换器迁移。
适合谁,不适合谁
适合:想在本地或自有 VPS 上跑 RAG 的独立开发者——内存敏感、要离线运行、需要把数据留在自己手里;以及做混合检索(SQL + 向量)的应用。它完全本地化,不依赖托管服务,数据不出机器,配合开源 embedding 模型可以搭一套完全离线的 RAG 栈。
不太适合:需要分布式、多副本、横向扩容的百万级 QPS 场景——Turbovec 是单机库,不是分布式系统,这类需求还是得看 Milvus、Qdrant 这类完整服务。另外它目前核心是 HNSW 之外的"暴力搜索+量化"路线(类似 FAISS 的 PQ FastScan),召回率与 ANN 图索引的取舍要看具体数据。
1.0.0 刚在 2026 年 8 月 18 日发布,Rust crate 和 Python 包版本对齐,MIT 协议。如果正在做 RAG 且被内存和速度困扰,这个项目值得放进基准测试里跑一跑——毕竟压缩 8 倍还更快的机会,不是每天都有。
© 2026 四月
原文链接:https://www.aprilzz.com/tools/turbovec-rust-vector-search
相关文章
Woxi:用 Rust 重写 Mathematica,743 星的开源 Wolfram Language 解释器
Woxi 是一个用 Rust 实现的 Wolfram Language 解释器,可替代每年上千美元的 Mathematica:支持 CLI 脚本、Jupyter 内核、浏览器端 WebAssembly,还能直接运行 .nb 笔记本文件,启动比 WolframScript 快得多。
Iroh 1.0 发布:拨号密钥,而非 IP 地址
Iroh 是一个让设备可通过密码学密钥寻址的网络库,经过 65 个版本的迭代后发布 1.0 稳定版,已超过 2 亿个端点在公共中继上创建。
Agent Desktop:AI Agent 的跨平台桌面自动化 CLI 开源工具
一个基于 Rust 构建的桌面自动化 CLI,让 AI Agent 通过操作系统无障碍树操控任意应用,比截图方案快 10 倍且节省 78-96% 的 token