
TurboVec 提供 Python 绑定,底层采用 Google Research 的TurboQuant算法。这是一种数据无关的量化器,具有接近最优的失真度,且无需单独的训练阶段。
核心特性
在线摄入:添加向量即刻完成索引,无需训练、参数调整或随着语料库增长重建索引。
快速 SIMD 搜索:通过手写内核(ARM NEON SDOT/SMMLA、x86 AVX-512 VNNI 等),在所有测量配置中均击败 FAISS IndexPQFastScan。在两种架构的八个单元格中,4-bit 平均快 3.4 倍,2-bit 快 23%。
增量保存:sync ( path ) 仅持久化自上次同步以来的变化部分,实现任意字节级别的崩溃安全。删除或小追加操作仅需毫秒级时间。
搜索时过滤:支持向 search ( ) 传递 ID 白名单或槽位位掩码,内核直接遵守,确保从允许集中获得最多 k 个结果,不影响召回率。
纯本地运行:无托管服务,数据不离开机器或 VPC,可配合开源嵌入模型构建物理隔离的 RAG 栈。
多语言集成与兼容性
TurboVec 支持 Python 和 Rust 原生集成,并可作为 LangChain、LlamaIndex、Haystack 和 Agno 等框架中内存向量存储的直接替换项,只需更换导入语句即可保持管道不变。
Python 示例:
from turbovec import TurboQuantIndexindex = TurboQuantIndex ( dim=1536, bit_width=4 ) index.add ( vectors ) scores, indices = index.search ( query, k=10 )
对于需要稳定 ID 及删除操作的场景,可使用 IdMapIndex,支持 O ( 1 ) 复杂度的按 ID 删除。
混合检索与过滤机制
TurboVec 支持将搜索结果限制在由 SQL、BM25 或 ACL 等外部系统生成的候选集内。过滤发生在 SIMD 内核内部,粒度为 32 个向量块:无允许槽位的块会被短路跳过,已评分块内的非允许槽位在堆插入时被丢弃。这种机制避免了支付不必要的 SIMD 成本,输出长度为 min ( k, n_allowed ) 。
性能表现
召回率:在 OpenAI d=1536 和 d=3072 数据集上,校准后的 TurboQuant ( TQ+ ) 在多数配置下的 R@1 指标优于 FAISS IndexPQ。在 GloVe d=200 低维场景下,TQ+ 在 2-bit 和 4-bit 宽度下均领先或持平。
搜索速度:基准测试(10 万向量,k=64)显示:
ARM 架构 ( Google Axion ) :4-bit 平均快 3.5 倍,2-bit 快 26%。
x86 架构 ( Intel Sapphire Rapids ) :4-bit 平均快 3.4 倍,2-bit 快 20%。
插入与删除:单次 add ( ) 耗时 6.3 – 19.7 微秒,比 FAISS 快 7.6 – 13.9 倍。IdMapIndex.remove ( id ) 采用 O ( 1 ) 交换弹出,每操作耗时 0.44 – 1.37 微秒,远优于 FAISS 在大规模数据下的秒级删除成本。
技术原理
TurboQuant 利用随机旋转使向量坐标遵循已知分布(Beta 分布 / 高斯分布),随后进行以下处理:
归一化与旋转:剥离向量长度,乘以随机正交矩阵,使坐标分布可预测。
逐坐标校准 ( TQ+ ) :为每个坐标拟合偏移和缩放,将经验分位数映射到码本质心,无需重新训练。
Lloyd-Max 标量量化:基于数学计算而非数据训练,确定最小化均方误差的分桶边界。
位打包:将坐标紧密打包,1536 维向量从 6144 字节压缩至 384 字节(2-bit),实现 16 倍压缩。
长度重归一化评分:编码时计算标量校正因子,消除量化带来的点积估计偏差,零搜索时成本。
搜索过程中,查询向量被旋转至同一域,直接与码本值进行 SIMD 加速评分,无需解压数据库向量。
【星途科讯 图文丨周鑫雨 首发于 ZAKER 科技,转载请注明出处】