RyanCodrai/turbovec
A vector index built on TurboQuant, written in Rust with Python bindings
解決する課題
ベクトルデータベースは、高次元の埋め込みを保存するために膨大な量のRAMを必要とすることがよくあります(例:1,000万個のドキュメントに対して31 GB)。Turbovecは、高度な量子化を使用してこれらのベクトルを圧縮することで、高い検索速度と再現率を維持しながら、メモリ使用量を最大16倍削減することでこの問題を解決します。
仕組み
Rustで構築され、Pythonバインディングを備えたこのエンジンは、TurboQuantアルゴリズムを使用して、別途トレーニングフェーズなしでベクトルを圧縮します。以下のステップで行われます:
- Normalization: ベクトルの長さを取り除き、別途保存します。
- Random Rotation: ランダムな直交行列を適用し、座標が予測可能な分布に従うようにします。
- Calibration (TQ+): スカラーをデータの経験的分布に適合させ、再トレーニングなしでの量子化を可能にします。
- Lloyd-Max Quantization: 事前計算された最適なバケットを使用して、座標を2ビットまたは4ビットの整数に圧縮します。
- SIMD Search: 手書きのSIMDカーネル(x86用AVX-512/AVX2、ARM用NEON)を使用して、完全な展開なしに圧縮されたベクトルを直接スコアリングします。
対象ユーザー
メモリ効率、低レイテンシ、およびデータプライバシー(ローカル/エアギャップ実行)が極めて重要となる、Retrieval-Augmented Generation (RAG) アプリケーションを構築する開発者向けに設計されています。
ハイライト
- 極限の圧縮: 2ビット量子化を使用して、1536次元のベクトルを6,144バイトから384バイトに削減します。
- トレーニング不要: ベクトルを即座にインデックス化できるオンラインインジェクションをサポートしており、別途トレーニングや再構築のステップは必要ありません。
- 高いパフォーマンス: ARMではFAISSを凌駕し、x86では様々な構成においてFAISSと同等以上の性能を発揮します。
- フレームワーク対応: LangChain、LlamaIndex、Haystack、およびAgnoのドロップイン・リプレイスメント(そのまま置き換え可能)を提供します。