MENU

Faissとは何かMeta製ベクトル類似度検索の定番ライブラリ

Faiss アイキャッチ
Faiss

FaissはMeta(旧Facebook)のAIリサーチ部門であるFAIRが2017年に公開した、C++とPythonバインディングで構成されるベクトル類似度検索ライブラリです。データベースではなくライブラリとして提供される点が独特で、アプリケーション内部に組み込んで使う前提で設計され、研究用途から商用システムまで広く採用されています。本稿ではFaissのインデックス階層、量子化技法、GPU対応の三軸でその姿を整理します。

目次

この記事の目次

  1. インデックスファミリの階層構造
  2. PQ・OPQ・IVFが支える圧縮探索
  3. GPU対応と分散実行
  4. Faissを使う場面と使わない場面
  5. まとめ

インデックスファミリの階層構造

インデックスファミリの階層構造

FaissのインデックスはすべてC++のIndex基底クラスを継承し、IndexFlatL2のような正確探索から、IndexIVFPQのような近似探索、IndexHNSWFlatのようなグラフ系まで、20種類以上の実装が用意されています。index_factory関数に「IVF1024,PQ16」のようなDSL文字列を与えると、クラスタリング段とエンコーディング段を組み合わせた複雑なインデックスを宣言的に構築できる、という設計はFaissならではの強力さです。

学習が必要なインデックスはtrainメソッドで代表ベクトルを使ってクラスタ中心や量子化テーブルを学習し、addで本データを追加します。シリアライズにはwrite_index/read_indexを使い、巨大なインデックスでも単一ファイルで永続化できる手軽さがあります。アプリケーション側はFaissをライブラリとして取り込み、必要なメタデータは別ストレージに保管するのが定石です。

PQ・OPQ・IVFが支える圧縮探索

PQ・OPQ・IVFが支える圧縮探索

FaissがGPUなしでも数億ベクトルを扱える鍵は、Product Quantization(PQ)とInverted File(IVF)を組み合わせた近似探索にあります。PQはベクトルを部分次元に分割し、それぞれを8ビットなどの少数ビットで量子化することでメモリ使用量を桁違いに削減し、IVFはクラスタリングで検索対象を絞り込みます。OPQ(Optimized Product Quantization)は次元の回転を最適化してPQの誤差をさらに下げる手法で、高次元埋め込みでもリコールを保ちやすくします。

近年はIndexBinaryHashIndexLSH、Binary Quantizationを使ったインデックスも追加され、Sentence Transformersのような768次元程度のベクトルから、OpenAIのtext-embedding-3-largeの3072次元のような大次元ベクトルまで幅広く対応できるようになっています。リコール、レイテンシ、メモリの三軸を見ながらインデックス文字列を組み立てる作業がFaissの醍醐味です。

GPU対応と分散実行

GPU対応と分散実行

Faissの大きな差別化要素はGPUインデックスで、StandardGpuResourcesを介してCUDAカーネルに処理を移譲し、数十倍〜数百倍の速度向上を狙えます。IndexFlatL2相当のブルートフォースGPU検索も実装されており、数百万ベクトルなら全件総当たりでもサブミリ秒で応答できるため、ハイブリッド検索の二段目リランクや学習データ生成に重宝します。

分散実行のためのユーティリティとして、複数GPUにシャードを切るためのindex_cpu_to_all_gpusや、クラスタリングを並列実行するClusteringオブジェクトが用意されています。Faiss自体はサーバを持たないため、サービス化する際はFastAPIやgRPCで包む実装を自前で書くか、Faissを内部で利用しているMilvusなどのデータベースを採用する選択肢を取るのが現実的です。

Faissを使う場面と使わない場面

Faissを使う場面と使わない場面

Faissはオフラインの大規模類似度検索、最近傍を使ったクラスタリング、kNN学習データ生成といったバッチ用途で特に強みを発揮します。Pythonバインディングが安定しており、NumPy配列をそのまま渡せるため、研究プロトタイプや機械学習パイプラインへの組み込みもスムーズです。

一方、オンラインでのインクリメンタル更新、ペイロード付きフィルタ検索、マルチテナント運用といった機能はFaiss単体ではカバーできず、MilvusやQdrantのようなデータベース層が必要になります。「データベースとしての機能」と「ライブラリとしての機能」を分けて考え、Faissはあくまでベクトル検索のコアアルゴリズム集として位置づけるのが正しい使い方です。

まとめ

FaissはMeta生まれの定番ライブラリとして、ベクトル類似度検索の世界における事実上の標準実装です。高度な量子化技法とGPU対応を組み合わせて使いこなせば、大規模埋め込みデータの探索を低コストで実現できます。

※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次