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
- 專案
- 專案
- 專案
- 專案