turbovec - 谷歌开源的向量索引新算法
来源:互联网
时间:2026-06-17 14:42:09
turbovec是什么
先说个有意思的:Google 搞了个 TurboQuant 算法,但 Google 自己没开源——反而是社区用 Rust 把它实现了,还附带了 Python 绑定,这就是 turbovec。说白了,它是一个面向 RAG 场景的高性能向量索引库,目标很明确:在不需要花里胡哨训练步骤的前提下,把大向量快速压进内存,还能飞快地查。
具体来说,它采用数据无关的量化策略,意味着无需训练阶段,就能把 1000 万条 float32 向量从 31GB 压缩到大约 4GB。而且它在 ARM 和 x86 平台上都用手写的 SIMD 内核,搜索速度比 FAISS 还要快。更贴心的是,它支持搜索时过滤、持久化,主流框架(LangChain、LlamaIndex 这些)基本都能即插即用。
turbovec的主要功能
- :添加向量的时候自动完成索引,不需要训练步骤、参数调优,语料库再增长也不用重建,省心。
在线摄入索引
- :手写的 NEON(ARM)和 A VX-512BW(x86)内核,搜索速度比 FAISS IndexPQFastScan 还要快一截。
快速 SIMD 搜索
- :支持传入 ID 白名单或槽位位掩码,过滤逻辑直接在 SIMD 内核内部短路,不用先捞一堆数据再过滤,效率很高。
搜索时过滤
- :通过
稳定外部 ID 与删除
IdMapIndex支持自定义 uint64 外部 ID,删除操作 O(1) 时间复杂度,管理起来很顺手。 - :
索引持久化
write保存到磁盘,load快速恢复,不用重新编码,启动飞快。 - :官方集成了 LangChain、LlamaIndex、Haystack、Agno,改几行 import 就能替换原有向量存储。
框架即插即用
- :不依赖任何托管服务,数据完全不离开本地机器或 VPC,可以构建完全离线的 RAG 栈。
纯本地运行
turbovec的技术原理
它的量化流程并不复杂,但每一步都挺精妙:
- :先把每个向量的长度(范数)剥离出来单独存储,剩下的部分就成了单位超球面上的方向向量。
归一化
- :用一个随机正交矩阵旋转所有向量,这样一来每个坐标都独立服从可预测的 Beta 分布,而且跟原始数据的内容无关——这就给后续量化提供了稳定的“假设前提”。
随机正交旋转
- :首次添加向量时,对每个坐标按照 5%/95% 分位数做缩放和平移校准,把经验分布映射到标准 Beta 边缘分布;后面加入的向量直接复用校准参数,不再需要重新训练。
TQ+ 自适应校准
- :基于已知的分布,预计算最优的量化桶边界和质心,失真度接近信息论下界的 2.7 倍,已经很逼近理论极限了。
Lloyd-Max 标量量化
- :每个坐标压缩成小整数然后紧密打包,1536 维向量从 6144 字节降到 384 字节,压缩比 16 倍。
位打包
- :编码时额外算一个尺度因子,搜索时乘回去,消除量化导致的系统性内积低估——把有偏估计器修正为无偏,召回率又能再上一层楼。
长度重归一化评分
如何使用turbovec
上手很直接,基本就是三步走:安装、创建索引、增删查。具体操作了解一下:
- :执行
安装库
pip install turbovec,Python 绑定就搞定了。 - :实例化
创建索引
TurboQuantIndex(dim=1536, bit_width=4),指定维度和量化位数(比如 2-bit 或 4-bit)。 - :调用
添加向量
index.add(vectors)批量入库,系统自动搞定旋转、校准和量化,什么都不用管。 - :调用
执行搜索
index.search(query, k=10)获取 Top-K 相似度分数和索引。 - :用
持久化存储
index.write("my_index.tv")保存索引,之后用TurboQuantIndex.load恢复,速度很快。 - :改用
外部 ID 管理
IdMapIndex实现add_with_ids和 O(1) 删除,适合需要外部标识的场景。 - :先用 SQL/BM25 等系统粗筛候选 ID,再把白名单传给
混合检索
allowlist做稠密精排——这种组合拳在复杂业务里特别实用。
turbovec的项目地址
- :https://pypi.org/project/turbovec/
项目官网
- :https://github.com/RyanCodrai/turbovec
GitHub仓库
turbovec的同类竞品对比
既然提到了 FAISS,那就把两者放在一起看看。以下是从几个关键维度做的对比:
- :turbovec 无需训练,在线即用;FAISS IndexPQFastScan 需要 k-means 训练码本。
量化训练
- :turbovec 可达到 16x(2-bit)或 8x(4-bit);FAISS 类似,但依赖训练质量。
压缩率
- :turbovec 比 FastScan 快 10–19%;FAISS 为基准。
ARM 搜索速度
- :turbovec 在 4-bit 下明显胜出,2-bit 接近基准,而 2-bit VBMI 有优势。
x86 搜索速度
- :turbovec 在 SIMD 内核内短路,零召回损失;FAISS 先算后滤,存在过度抓取。
搜索时过滤
- :两者都是纯本地嵌入式库。
部署形态
- :turbovec 官方支持 LangChain 等 4 个框架;FAISS 社区支持更广泛。
框架集成
- :turbovec 经过 TQ+ 校准后,召回持平或领先基准。
低维召回
turbovec的应用场景
结合它的特性,最适合以下场景:
- :中小团队或本地部署,需要在有限内存中索引千万级文档——1000 万向量从 31GB 降到 4GB,效果立竿见影。
内存敏感型 RAG
- :对向量检索延迟要求苛刻的线上 RAG、推荐或搜索系统,SIMD 加速能提供稳定优势。
低延迟在线服务
- :数据不能上传第三方或出境的政企、金融场景,纯本地运行,无需操心托管服务。
隐私优先架构
- :ARM 优化做得很好,适合在手机、IoT 设备或嵌入式硬件上做向量检索。
边缘与移动端
- :先用 SQL / BM25 / 权限系统粗筛候选 ID,再用
混合检索系统
allowlist做稠密向量精排,这一套组合拳在大型系统中非常常见。