turbovec:TurboQuant に基づく Rust ベクトルインデックス
TurboQuant 上に構築されたベクトル インデックス。Python バインディングを使用して Rust で書かれています。
ひと目でわかる
- これは何?
- README が turbovec の API、増分同期、フィルタ検索、FAISS 比較をどう説明しているか。
- 誰に向いている?
- README は具体的なアルゴリズム説明、再現可能なベンチマークスクリプト、明確な API 例を提供しているが、性能数値はプロジェクト自身の主張である。 turbovecはベクトル検索の実装を既存サービスへ足す前に、RustとPythonの境界を確認する対象です。
- 商用利用できる?
- できます。MIT は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
- 今もメンテナンスされている?
- されています。最後のコミットは 2 日前です。
- 何の言語で書かれている?
- 主に Python です(GitHub の言語統計による)。
回答はプロジェクトの GitHub データ(最終同期:2026年9月15日)と当サイトの分析に基づくもので、法的助言ではありません。
オープンソース詳細解説
turbovec: README 冒頭の容量に関する主張
README は具体的な比較から始まる。1000 万件のドキュメントコーパスは float32 では 31 GB の RAM を使うが、turbovec では 4 GB に収まり、FAISS より速く検索できるという。これはプロジェクト自身の主張であり、リポジトリの内容だけから独立に検証できるものではない。リポジトリメタデータは turbovec が Rust 製のベクトルインデックスで Python バインディングを持つこと、README は Google Research の TurboQuant、すなわち学習フェーズを必要としないデータ非依存量子化器を実装していると述べる。リポジトリメタデータはスター 14629、フォーク 1303、オープンイシュー 63 を示すが、これらはリポジトリの活動を表す数字であり、正しさを示すものではない。
turbovec: Python と Rust の入り口
README には両方のインターフェースの実行可能な例がある。Python では `pip install turbovec` の後、`TurboQuantIndex(dim=1536, bit_width=4)` を使う。`add` は 2 次元 float32 配列のみを受け付け、他の dtype は拒否されるため、呼び出し側は `np.asarray(x, dtype=np.float32)` で変換する必要がある。`search(query, k)` はスコアとインデックスを返す。`IdMapIndex` は安定した外部 ID を提供し、`add_with_ids` をサポートし、`remove(id)` は O(1) と主張されている。`.tvim` ファイルで永続化する。Rust では `cargo add turbovec` の後、`TurboQuantIndex::new(1536, 4)` を使い、追加、検索、書き込み、読み込みの流れは同じ。README は完全な API リファレンスを `docs/api.md` に委ねているが、README 自体には全 API は載っていない。
turbovec: 増分保存とフィルタ検索
永続化モデルは 2 層ある。`sync(path)` は前回の同期以降に変更された部分だけを書き込み、呼び出しごとに 1 回の fsync を行い、README によれば任意のバイト位置でクラッシュセーフである。削除や小さな追加は大きなインデックスでもミリ秒単位で済む。`write` と `load` はファイル全体のスナップショット用。検索は外部 ID の許可リストまたはスロットビットマスクで制限できる。SIMD カーネルは 32 ベクトルのブロック単位で処理し、許可スロットがないブロックはスコアリング前にスキップされ、スコアリング対象ブロック内の許可されていないスロットはヒープ挿入時に破棄される。結果の長さは `min(k, n_allowed)` で、`n_allowed` は重複を除いた許可ベクトル数。README は LangChain、LlamaIndex、Haystack、Agno のインメモリストア置き換えも挙げており、`pip install turbovec[langchain]` のようなエクストラで導入する。
turbovec: 量子化パイプライン
README はアルゴリズムを 6 段階で説明する。ベクトルを単位方向に正規化する。共通のランダム回転により、各座標はベータ分布に従い、高次元ではガウス分布に収束する。任意の TQ+ キャリブレーションは座標ごとにシフトとスケールをフィットし、README によれば約 1024 行のサンプルで十分。`calibrate(sample)` でキャリブレーションが確定し、以降の add はそれを再利用する。Lloyd-Max コードブックはデータではなく分布から導出され、2 ビットでは 4 バケット、4 ビットでは 16 バケットになる。座標はビットパックされ、1536 次元ベクトルは 2 ビットで 6144 バイトから 384 バイトに縮む。長さ再正規化スコアリングはベクトルごとに 1 スカラーを保存し、内積の下方バイアスを補正する。検索時はクエリを 1 回回転させ、コードブック値に対して直接スコアリングする。ARM では NEON、x86 では AVX-512BW を使い、AVX2 とスカラーにフォールバックする。
turbovec: ベンチマーク数値が示すもの
README は複数のセルで FAISS との比較を報告している。検索速度では ARM(GCP c4a-standard-8、Google Axion)で TurboQuant はすべての構成で FAISS FastScan より 19-31% 速い。x86(Intel Xeon Platinum 8481C)では 4 ビット構成で最大約 5% リードし、2 ビットでは遅れる。最も顕著なのは d=1536 シングルスレッドで約 8%。再現率は FAISS IndexPQ をベースラインとし、OpenAI d=1536 と d=3072 では R@1 で 0.4-3.1 ポイント先行し、k=8 で両方とも 1.0 に達する。GloVe d=200 では 4 ビットで 1.4 ポイント、2 ビットで 0.5 ポイント先行。挿入、削除、保存/読み込みのベンチマークも文書化され、JSON 結果ファイルへのリンクがある。これらはプロジェクトが報告した数値であり、本記事で独立に検証したわけではない。
turbovec: ビルド、ベンチマーク、ライセンス
Python のビルドは maturin を使う。Rust は `cargo build --release`。すべての x86_64 ビルドは `x86-64-v2` をベースラインとし、AVX-512 と AVX2 カーネルは `#[target_feature]` でゲートされ、実行時に選択される。これらを持たない CPU はスカラーフォールバックを使う。ベンチマークスクリプトは `benchmarks/suite/` にあり、結果は `benchmarks/results/` の JSON に出力され、チャートは `benchmarks/create_diagrams.py` で再生成できる。MIT ライセンスは使用、コピー、修正、マージ、公開、配布、サブライセンス、販売を許可し、ソフトウェアは'現状のまま'保証なしで提供されるとしている。ライセンス文はセキュリティ態勢、サポート、本番対応については何も述べていない。
turbovecはベクトル検索の実装を既存サービスへ足す前に、RustとPythonの境界を確認する対象です。READMEが示すmaturin、cargo build --release、benchmarks/suite/、benchmarks/results/の関係をたどり、Pythonパッケージの生成物とRustバイナリの版をそろえます。x86-64-v2を基準にし、AVX2とAVX-512を実行時選択、非対応CPUではスカラーへ戻すという説明は、配布先CPUの確認を要求します。ベンチマークJSONが自分のデータを代表するとは限らないため、結果の保存場所と入力条件を分けて読んでください。
編集部の結論
README は具体的なアルゴリズム説明、再現可能なベンチマークスクリプト、明確な API 例を提供しているが、性能数値はプロジェクト自身の主張である。 turbovecはベクトル検索の実装を既存サービスへ足す前に、RustとPythonの境界を確認する対象です。READMEが示すmaturin、cargo build --release、benchmarks/suite/、benchmarks/results/の関係をたどり、Pythonパッケージの生成物とRustバイナリの版をそろえます。x86-64-v2を基準にし、AVX2とAVX-512を実行時選択、非対応CPUではスカラーへ戻すという説明は、配布先CPUの確認を要求します。ベンチマークJSONが自分のデータを代表するとは限らないため、結果の保存場所と入力条件を分けて読んでください。
コミュニティノート