GPUサポート付きのFAISSのインストール

はじめに

FAISS は CUDA で実装された GPU アクセラレーションを備えており、数千万~数億ベクトル規模でも高速に近傍探索できます。2025 年 2 月公開の v1.10.0 以降 では、従来の「Classic GPU 実装」に加えて NVIDIA cuVS ベースの最適化実装 が統合され、Conda パッケージで簡単に切り替えられるようになりました。engineering.fb.com

以下では GPU 対応版 FAISS のインストール手順 を 3 通り(Conda/PyPI バイナリ/ソースビルド)に分けて解説します。環境要件や確認方法も合わせて示すので、用途に応じて選択してください。


1. Conda パッケージ(公式推奨・最も簡単)

対象: Linux x86_64/Windows x86_64、CUDA 11.8 または 12.1 以降
長所: 依存ライブラリ同梱・cuVS 切替えオプション付き
短所: Conda を使わない環境には向かない

bash
# 例:CUDA 12 系で Python 3.12 環境を新規作成 conda create -n faiss_gpu python=3.12 cuda-toolkit=12.2 conda activate faiss_gpu # 安定版 (Classic GPU + cuVS の両方を含む 1.11.0) conda install -c pytorch faiss-gpu
  • 1.10.0 以降faiss-gpu パッケージに faiss-gpu-cuvs モジュールが同梱され、
    FAISS_PREFER_CUVS=1 を環境変数に設定すると cuVS 実装を優先利用できます。engineering.fb.com

  • インストール後、python -c "import faiss, os; print(faiss.get_num_gpus())"
    GPU が認識されているか確認してください。github.com


2. PyPI バイナリホイール(pip 利用・Docker などに便利)

対象: Linux x86_64、CUDA 11.8 / 12.1 以降
長所: Conda 不要・ホイールサイズが小さい
短所: Nvidia ドライバー互換性と CUDA ランタイムの自己管理が必要

CUDA バージョン パッケージ名 インストール例 最低ドライバー
12.1+ faiss-gpu-cu12 pip install faiss-gpu-cu12[fix_cuda] R530 以上
11.8 faiss-gpu-cu11 pip install faiss-gpu-cu11[fix_cuda] R520 以上
  • [fix_cuda] 付きでインストールすると CUDA ランタイムと cuBLAS も PyPI から自動取得されるため、ホストに CUDA Toolkit を入れなくても動作します。pypi.org

  • すでに PyTorch など他の CUDA ライブラリを使っている場合は 同じメジャー版 (11 / 12) を揃えてください。バージョン不一致は RuntimeError: CUDA version mismatch の原因になります。facebook.com


3. ソースからビルド(カスタムアーキテクチャ/ARM Linux など)

対象: CUDA 11.4 以上が入った任意の Linux/WSL2/Mac(CPU ビルドのみ)
長所: アーキテクチャや最適化オプションを細かく指定可能
短所: ビルド時間が長い・依存解決がやや煩雑

  1. 依存関係を用意

    bash
    sudo apt-get install git cmake build-essential libopenblas-dev # CUDA Toolkit と対応ドライバーは公式ガイド通りにインストール
  2. ソース取得 & ビルド

    bash
    git clone https://github.com/facebookresearch/faiss.git cd faiss cmake -B build \ -DFAISS_ENABLE_GPU=ON \ -DFAISS_ENABLE_CUDA=ON \ -DFAISS_ENABLE_CUVS=ON \ # cuVS を使う場合 -DCMAKE_CUDA_ARCHITECTURES="70;80;90" \ -DCMAKE_BUILD_TYPE=Release cmake --build build -j$(nproc)
  3. Python バインディングをインストール

    bash
    pip install ./build/faiss/python

    FAISS_ENABLE_GPU=ON を環境変数に付けて pip install --no-binary :all: faiss-cpu を実行すると、ソースパッケージから GPU 対応ホイールを自動生成することも可能です。pypi.org


4. 動作確認スクリプト(共通)

python
import faiss, numpy as np print("GPUs detected:", faiss.get_num_gpus()) d = 128 xb = np.random.randn(10_000, d).astype('float32') index_cpu = faiss.IndexFlatL2(d) res = faiss.StandardGpuResources() # GPU リソース確保 index_gpu = faiss.index_cpu_to_gpu(res, 0, index_cpu) index_gpu.add(xb) # GPU 上でベクトル追加 D, I = index_gpu.search(xb[:5], k=5) # 近傍検索 print("Top-5 indices for first query:", I[0])

エラーなく結果が得られれば GPU 版の利用準備は完了です。github.com


5. トラブルシューティング

症状 主な原因と対処
ImportError: libfaiss_cu12.so: cannot open shared object file CUDA ランタイム/cuBLAS が PATH / LD_LIBRARY_PATH に入っていない → nvidia-cuda-runtime-cuXXnvidia-cublas-cuXX を pip で追加するか Conda 環境を再作成
RuntimeError: The detected CUDA version (12.1) mismatches ... PyTorch や他のライブラリと CUDA メジャー版が揃っていない → 同じ 11.x / 12.x 系に統一し再インストール
index_cpu_to_gpu() がハングする 古い pip ホイールやドライバーとの相性問題 → Conda 版 1.10+ へ切替え、または最新ドライバーに更新github.com

まとめ

  • 最短で使うなら Conda 版 faiss-gpu

  • Docker / 軽量環境では PyPI faiss-gpu-cu11/12 を pip で導入。

  • 特殊アーキテクチャや独自最適化が必要なら ソースビルド

いずれの方法でも、GPU ドライバーと CUDA の整合性さえ確保すれば、高速なベクトル検索機能をすぐに利用できます。

ChatGPT4o 生成日:2025/06/18