RyanCodrai/turbovec

A vector index built on TurboQuant, written in Rust with Python bindings

解决的问题

turbovec 解决了大规模向量搜索带来的高内存和高延迟成本问题。它允许在保持高搜索速度和召回率的同时,将海量语料库(例如 1,000 万个文档)存储在极小的 RAM 占用中(float32 为 31 GB,而本工具仅需 4 GB),从而消除了昂贵的训练阶段或频繁的索引重建需求。

工作原理

它实现了 TurboQuant 算法,这是一种数据无关的量化器,无需单独的训练阶段即可压缩向量。过程包括:

  1. Normalization: 将向量转换为超球体上的单位方向。
  2. Random Rotation: 通过乘以随机正交矩阵使坐标分布变得可预测(Beta 分布)。
  3. Calibration (TQ+): 应用可选的逐坐标偏移和缩放,将经验分位数映射到码本的质心,以获得更好的召回率。
  4. Lloyd-Max Quantization: 根据预先计算的最佳边界,将坐标分桶到小的整数中(例如,2 位对应 4 个桶,4 位对应 16 个桶)。
  5. Bit-packing: 将这些整数紧密打包进字节中,实现极高压缩率。
  6. SIMD Acceleration: 手写的内核(ARM 使用 NEON,x86 使用 AVX-512)直接在压缩数据上执行快速搜索和过滤。

适用对象

专为构建检索增强生成 (RAG) 系统的开发者设计,在这些系统中,隐私、内存效率和低延迟至关重要,特别是那些在物理隔离或本地环境中运行的场景。

亮点

  • 无需训练阶段: 在线摄取允许在无需参数调优或重建索引的情况下添加向量。
  • 极高压缩率: 与 float32 相比,内存使用量最高可减少 16 倍。
  • 高性能: 在 ARM 和 x86 架构上的搜索速度均优于 FAISS IndexPQFastScan。
  • 增量持久化: sync(path) 方法仅保存自上次同步以来的更改,确保崩溃安全且快速更新。
  • 搜索时过滤: 支持 ID 白名单,并直接在 SIMD 内核中执行,以避免过度获取。
  • 框架就绪: 为 LangChain、LlamaIndex、Haystack 和 Agno 提供即插即用的向量存储替代方案。

相关

  • Dispatch
  • 项目
  • 项目
  • 项目
  • 项目