このプロジェクトについて

turbovecはRustで実装され、Pythonにバインディングを通じて公開されるベクトルインデックスです。Google ResearchのTurboQuantアルゴリズムを基盤としており、これは正規化、固定ランダム回転、分布ベースのLloyd-Maxスカラー量子化、ビットパッキング、長さ再正規化内積スコアリングを用いるデータ非依存の量子化アプローチです。このプロジェクトは、メモリ制約があり低レイテンシが求められるローカルベクトル検索を対象としており、マネージドサービスは必要ありません。 主要なTurboQuantIndexは、次元とビット幅を指定して作成され、2ビットおよび4ビットのインデックス作成が文書化されています。ベクトルは、個別のトレーニングステップ、パラメータ調整フェーズ、またはインデックス再構築を必要とせずに、インクリメンタルに追加されます。Pythonの入力にはfloat32のNumPy配列を使用します。他のdtypeは暗黙的に変換されることなく拒否されます。APIは、add、search、write、load、syncの各操作を提供します。searchは、要求されたk個の最近傍結果に対するスコアとインデックスを返します。 IdMapIndexは、安定したuint64外部ID、add_with_ids、および文書に従ったO(1)のIDによる削除を追加します。これは、同じファイル全体の書き込み/読み込みワークフローとインクリメンタル同期永続化をサポートします。syncメソッドは、前回の同期以降の変更のみを永続化し、呼び出しごとに1回のfsyncを使用し、インデックス全体を書き換えることなく小さな追加や削除を可能にすると説明されています。完全なスナップショットには、writeとloadが引き続き利用可能です。 フィルタリングまたはハイブリッド検索は、searchに渡されるID許可リストまたはスロットビットマスクを通じてサポートされます。許可リストは、SQL、BM25、アクセス制御ロジック、または時間フィルターなどの外部システムから取得できます。READMEには、フィルタリングはSIMD検索カーネル内部で適用され、許可されたベクトルがないブロックはスキップされ、結果数はmin(k, 許可された個別ベクトルの数)になると記載されています。 検索には、手書きのSIMDカーネルとランタイム機能選択が使用されます。文書化されたターゲットには、ARM NEON SDOT/SMMLA、x86 AVX-512 VNNIおよびvpermb、さらにAVX2およびスカラーフォールバックが含まれます。Rustビルドはx86-64-v2ベースラインを使用し、対応ハードウェアでは新しいカーネルを有効にします。マルチスレッドは、説明されているベンチマーク構成ではRayonを通じて提供されます。 オプションのTQ+キャリブレーションステップでは、インデックス作成前に代表的なサンプルから座標ごとのシフト値とスケール値を適合させることができます。READMEでは、これにより有限次元または低ビット設定、特にGloVeスタイルの埋め込みにおいて再現率が向上し、その後の追加でも再利用可能であると説明されています。キャリブレーションされていないインデックスは、通常のTurboQuantを使用します。 Pythonのインストールはpipを通じて、Rustの使用はcargo add turbovecを通じて可能です。このプロジェクトは、LangChain、LlamaIndex、Haystack、Agno向けのオプション統合を文書化しており、それらのインメモリまたはリファレンスベクトルストアのドロップイン代替として位置づけられています。これらの統合は、オプションのパッケージエクストラを通じてインストールされます。 リポジトリには、turbovecとFAISS IndexPQFastScanおよびIndexPQ構成を比較するプロジェクト実行ベンチマークが含まれています。READMEには、テストされたARMおよびx86構成において、より低いメモリ使用量、より高速な測定検索、挿入および削除レイテンシの測定、再現率チャート、圧縮結果、保存/読み込み時間が報告されています。これらは提供されたベンチマーク結果であり、独立した第三者による測定ではありません。GloVeおよびOpenAI埋め込みデータセットのダウンロード、再現率/速度/圧縮スイートの実行、JSON結果の保存、チャートの再生成を行うスクリプトが、ベンチマークディレクトリに含まれています。