10M 文档 31GB 压到 4GB,搜索比 FAISS 还快的向量索引
更新于 2026-07-25 · 基于 Google Research TurboQuant (ICLR 2026)
← 返回汇总无训练阶段的向量索引,16× 压缩、搜索快过 FAISS
Rust 向量索引 + Python 绑定,基于 Google Research 的 TurboQuant 算法——data-oblivious 量化器,近最优失真,无单独训练阶段。在线 ingest:加向量即索引,无 train、无参数调优、无重建。手写 NEON/AVX-512BW SIMD 内核。纯本地无托管服务,数据不出机器/VPC。适合内存/延迟/隐私敏感的 RAG 场景,尤其气隙部署。
数据截至 2026-07-25。10M 文档 d=1536:float32 31GB → turbovec 4GB。
float32 存 10M 文档 d=1536 要 31GB。大语料 RAG 内存成本爆炸,中小机器跑不动。
传统 PQ(如 FAISS)需训练码本,语料增长要重建索引,运维复杂、延迟高。
托管向量服务要把数据发云端,气隙/合规场景不可接受;网络往返又加延迟。
旋转之后,分布可知,码本可算
TurboQuant 的核心洞察:每个向量是高维超球面上的一个方向。施加随机旋转后,每个坐标独立服从已知分布(Beta,高维收敛到 Gaussian)——与输入数据无关。既然分布已知,最优分桶可从数学直接算出,无需从数据训练码本。这带来:无 train 步骤、语料增长无需重建、近最优失真(Shannon 下界的 2.7×)。
‖v‖/⟨u,x̂⟩,搜索时乘回——估计器从有偏变无偏,零额外存储、零额外查询成本。is_x86_feature_detected! 按硬件启用 AVX-512/AVX2,无则回退标量传 id allowlist(或 slot bitmask)给 search(),内核直接尊重——总是从允许集返回最多 k 个结果。
min(k, len(allowed)),allowlist 小于 k 时返回恰好 len(allowed) 个,无 padding| 数据集 | bit | R@1 对比 |
|---|---|---|
| OpenAI d=1536 / d=3072 | 2-bit & 4-bit | TurboQuant 领先 0.2–1.9pp;k=8 均达 1.0(k=4 已 ≥0.997) |
| GloVe d=200(低维难题) | 4-bit | TurboQuant 领先 0.9pp |
| GloVe d=200 | 2-bit | 基本打平(差 0.1pp 内),k≈16 起紧贴 FAISS |
100K 向量,k=64。FAISS PQ 子量化器数按 TurboQuant 比特率配(2-bit m=d/4,4-bit m=d/2)。注:选 FAISS IndexPQ 而非论文里的 u8-LUT PQ——FAISS 用更高精度 LUT + k-means++ 训练,是更强的基线。
pip install turbovec,maturin 构建cargo add turbovec,原生 crate.tv / .tvim 文件格式框架 drop-in 替换(同 public surface、同持久化语义、同 retriever/pipeline 接线):
# Python pip install turbovec from turbovec import TurboQuantIndex index = TurboQuantIndex(dim=1536, bit_width=4) index.add(vectors) # 在线 ingest,无 train index.add(more_vectors) # 语料增长无需重建 scores, indices = index.search(query, k=10) index.write("my_index.tv") loaded = TurboQuantIndex.load("my_index.tv") # Rust cargo add turbovec use turbovec::TurboQuantIndex; let mut index = TurboQuantIndex::new(1536, 4)?; index.add(&vectors); let results = index.search(&queries, 10); # 混合检索:外部系统筛候选 → dense rerank allowed = np.array(db.execute("SELECT id FROM docs WHERE tenant=?", (t,)).fetchall(), dtype=np.uint64) scores, ids = idx.search(query, k=10, allowlist=allowed)
cargo build --releasebenchmarks/suite/ 自带脚本 + 数据下载,JSON 结果 + 图表生成理论扎实:失真因子 2.7× 于 Shannon 信息论下界,长度归一化消除 Lloyd-Max 码本对内积估计器的残余偏差。
14.3k Stars 说明「无训练 + 16× 压缩 + 纯本地」的组合击中真实痛点。TurboQuant 论文背书(ICLR 2026)+ 工程化到位(双语言、四框架 drop-in、混合检索 allowlist)构成扎实基座。若能补齐 ANN 图索引路径、扩展分布式,有机会在隐私/边缘 RAG 赛道切开 FAISS/LanceDB 的份额。当下定位精准:内存/延迟/隐私敏感场景的最佳选择之一。