Turbovec: 使用 Google TurboQuant 的高效能向量搜尋
Turbovec 是一個使用 Rust 編寫並提供 Python 綁定的高效能向量索引,它實作了 Google Research 的 TurboQuant 演算法。它能實現大規模的記憶體縮減——與 float32 需要 31 GB 相比,將 1000 萬份文件的語料庫僅需 4 GB 的 RAM 即可容納——同時提供超越 FAISS IndexPQFastScan 的搜尋速度。
核心技術優勢
Turbovec 提供了一種與數據無關的量化方法,消除了對獨立訓練階段的需求,使其適用於語料庫隨時間增長的動態環境。
記憶體效率與壓縮
Turbovec 透過將向量精度降低至 2-bit 或 4-bit 表示法來實現顯著的壓縮。對於一個 1536 維度的向量,這將佔用空間從 6,144 bytes (FP32) 減少到 384 bytes (2-bit),代表了 16 倍的壓縮率。
搜尋效能
Turbovec 利用手寫的 SIMD 核心來最大化不同 CPU 架構下的吞吐量:
- ARM: 使用 NEON SDOT/SMMLA 點積核心來直接對向量主導佈局進行評分。
- x86: 採用 AVX-512 VNNI 和
vpermb進行高速查找與累加。
基準測試顯示,Turbovec 在所有測量的配置中都擊敗了 FAISS IndexPQFastScan,在兩種架構下,4-bit 平均提升了 3.4 倍速度,2-bit 平均提升了 23%。
線上攝取與持久化
與許多乘積量化 (PQ) 實作不同,Turbovec 支援無需訓練步驟、參數調整或索引重建的線上攝取。它具有透過 sync(path) 進行增量儲存的機制,該機制僅持久化已變動的數據,並在每次呼叫時使用單次 fsync,確保了崩潰安全性以及無論索引大小如何,新增或刪除操作皆具備毫秒級的延遲。
TurboQuant 如何運作
Turbovec 實作了一個多階段流水線,在維持檢索精度的同時,壓縮超球體上的高維方向。
- 正規化 (Normalization): 剝離每個向量的長度 (norm) 並將其儲存為單個 float,將向量轉換為單位方向。
- 隨機旋轉 (Random Rotation): 向量會乘以一個隨機的正交矩陣。這確保了無論原始數據分佈如何,每個座標都會獨立地遵循可預測的 Beta 分佈(在高維度下收斂至高斯分佈)。
- 每座標校準 (TQ+): 為了處理有限維度的漂移,TQ+ 擬合一個偏移量與縮放比例,將經驗分位數映射到碼本 (codebook) 最外層的質心。這僅需使用少量具代表性的樣本 (~1024 rows) 執行一次。
- Lloyd-Max 純量量化: 因為分佈是已知的,所以使用 Lloyd-Max 演算法預先計算最佳的桶邊界與質心,以最小化均方誤差。
- 位元封裝 (Bit-packing): 座標被轉換為小的整數 (0-3 對於 2-bit,0-15 對於 4-bit) 並緊密地封裝成 bytes。
- 長度重新正規化評分 (Length-renormalized Scoring): 為了修正量化造成的系統性內積低估,Turbovec 儲存了每個向量的修正純量 (
||v|| / ⟨u, x²⟩)。搜尋核心在進行堆疊插入 (heap insertion) 之前會應用此純量,以在不增加搜尋時間儲存成本的情況下消除偏差。
整合與使用
Turbovec 被設計為熱插拔式替換方案,可用於熱門 AI 框架中的記憶體內向量儲存器:
- LangChain: 透過
pip install turbovec[langchain]替換InMemoryVectorStore。 - LlamaIndex: 透過
pip install turbovec[llama-index]替환SimpleVectorStore。 - Haystack: 透過
pip install turbovec[haystack]替換InMemoryDocumentStore。 - Agno: 透過
pip install turbovec[agno]替換LanceDb。
混合檢索
Turbovec 支援透過 allowlist (或 slot bitmask) 在搜尋時進行過濾。SIMD 核心會在 32 個向量的粒度下,對沒有允許的插槽 (slots) 的區塊進行短路處理,避免了對最終將被捨棄的向量進行評分的成本。這確保了選擇性過濾器不會產生全索引掃描的完整 SIMD 成本。
社群洞察與反對意見
雖然技術基準測試的結果令人印象深刻,但社群對於該專案的起源以及向量搜尋的廣泛領域提出了幾點看法:
- 學術爭議: 一些使用者指出 OpenReview 上的評論與外部文章,指控原始 TurboQuant 論文存在學術不端行為,並暗示與之前的研究如 RaBitQ 有重疊。
- Baseline 比較: 一些批評者認為 FAISS 是現代向量索引基準測試中不再是尖端技術 (SoTA) 的基準。
- Alternative Approaches (替代方案): 討論中強調了 Matryoshka embeddings 或微調過的嵌入模型 (將維度降低至 --- 64) 也可以實現顯著的記憶體節省,這引發了關於量化是否總是每種流水線的最佳路徑之問題。
Sources
相關
- 專案
- 專案
- 專案
- Dispatch
- 專案