RyanCodrai/turbovec
A vector index built on TurboQuant, written in Rust with Python bindings
解决的问题
turbovec 解决了大规模向量搜索带来的高内存和高延迟成本问题。它允许在保持高搜索速度和召回率的同时,将海量语料库(例如 1,000 万个文档)存储在极小的 RAM 占用中(float32 为 31 GB,而本工具仅需 4 GB),从而消除了昂贵的训练阶段或频繁的索引重建需求。
工作原理
它实现了 TurboQuant 算法,这是一种数据无关的量化器,无需单独的训练阶段即可压缩向量。过程包括:
- Normalization: 将向量转换为超球体上的单位方向。
- Random Rotation: 通过乘以随机正交矩阵使坐标分布变得可预测(Beta 分布)。
- Calibration (TQ+): 应用可选的逐坐标偏移和缩放,将经验分位数映射到码本的质心,以获得更好的召回率。
- Lloyd-Max Quantization: 根据预先计算的最佳边界,将坐标分桶到小的整数中(例如,2 位对应 4 个桶,4 位对应 16 个桶)。
- Bit-packing: 将这些整数紧密打包进字节中,实现极高压缩率。
- SIMD Acceleration: 手写的内核(ARM 使用 NEON,x86 使用 AVX-512)直接在压缩数据上执行快速搜索和过滤。
适用对象
专为构建检索增强生成 (RAG) 系统的开发者设计,在这些系统中,隐私、内存效率和低延迟至关重要,特别是那些在物理隔离或本地环境中运行的场景。
亮点
- 无需训练阶段: 在线摄取允许在无需参数调优或重建索引的情况下添加向量。
- 极高压缩率: 与 float32 相比,内存使用量最高可减少 16 倍。
- 高性能: 在 ARM 和 x86 架构上的搜索速度均优于 FAISS IndexPQFastScan。
- 增量持久化:
sync(path)方法仅保存自上次同步以来的更改,确保崩溃安全且快速更新。 - 搜索时过滤: 支持 ID 白名单,并直接在 SIMD 内核中执行,以避免过度获取。
- 框架就绪: 为 LangChain、LlamaIndex、Haystack 和 Agno 提供即插即用的向量存储替代方案。
相关
- Dispatch
- 项目
- 项目
- 项目
- 项目