Skip to content
Learni
View all tutorials
Intelligence Artificielle

Comment implémenter FAISS pour la recherche vectorielle en 2026

Introduction

FAISS (Facebook AI Similarity Search) est la bibliothèque de référence pour la recherche de similarité sur vecteurs denses. En 2026, elle reste incontournable pour les systèmes RAG, les moteurs de recommandation et la détection de doublons à grande échelle. Ce tutoriel expert couvre l’installation optimisée, la création d’index avancés (IVF, HNSW), l’accélération GPU, la persistance et les stratégies de production. Chaque étape inclut du code complet et fonctionnel que vous pouvez copier directement.

Prérequis

  • Python 3.10+
  • CUDA 12.4+ et NVIDIA drivers récents (pour GPU)
  • Connaissances solides en numpy et vector embeddings
  • pip et build essentials

Installation optimisée

terminal
pip install numpy faiss-gpu-cu12
python -c "import faiss; print(faiss.__version__)"

L’installation faiss-gpu-cu12 active l’accélération CUDA 12. Vérifiez toujours la compatibilité de votre driver NVIDIA avant installation.

Création d’un index IVF

create_ivf_index.py
import faiss
import numpy as np

d = 768  # dimension des embeddings
nlist = 4096
quantizer = faiss.IndexFlatIP(d)
index = faiss.IndexIVFFlat(quantizer, d, nlist, faiss.METRIC_INNER_PRODUCT)
index.nprobe = 32
print("Index IVF créé avec", index.nlist, "centres")

IndexIVFFlat offre un excellent compromis vitesse/précision. nprobe=32 permet un bon rappel tout en restant rapide en inférence.

Entraînement et ajout de vecteurs

train_add_vectors.py
np.random.seed(42)
xb = np.random.random((500000, d)).astype('float32')
index.train(xb[:100000])
index.add(xb)
print("Vecteurs ajoutés:", index.ntotal)

L’entraînement sur 20 % des données suffit généralement. Toujours normaliser les vecteurs si vous utilisez METRIC_INNER_PRODUCT.

Recherche avec GPU

gpu_search.py
res = faiss.StandardGpuResources()
gpu_index = faiss.index_cpu_to_gpu(res, 0, index)

xq = np.random.random((10, d)).astype('float32')
D, I = gpu_index.search(xq, k=5)
print("Top-5 indices:", I[0])

La conversion CPU→GPU est immédiate et permet des recherches à plus de 100 000 QPS sur un seul A100.

Persistance de l’index

save_load_index.py
faiss.write_index(index, "faiss_ivf.index")
index_loaded = faiss.read_index("faiss_ivf.index")
print("Index chargé:", index_loaded.ntotal)

write_index/read_index est la méthode la plus fiable pour sérialiser. Pour les très gros index, utilisez IndexBinary ou les formats mmap.

Index HNSW pour faible latence

hnsw_index.py
index_hnsw = faiss.IndexHNSWFlat(d, 32)
index_hnsw.hnsw.efConstruction = 200
index_hnsw.add(xb[:100000])
D, I = index_hnsw.search(xq, k=5)
print("Recherche HNSW terminée")

HNSW offre une latence très faible mais consomme plus de mémoire. efConstruction=200 est un bon équilibre précision/vitesse.

Bonnes pratiques

  • Toujours normaliser les vecteurs avant entraînement et recherche
  • Choisir nprobe ou efSearch en fonction du budget latence/rappel
  • Utiliser IndexIDMap pour conserver les identifiants métiers
  • Monitorer la fragmentation mémoire sur GPU
  • Sauvegarder régulièrement les index avec versioning

Erreurs courantes à éviter

  • Oublier d’appeler index.train avant index.add sur les index IVF
  • Utiliser des float64 au lieu de float32 (division par 2 de la vitesse)
  • Négliger la normalisation des vecteurs avec Inner Product
  • Dépasser la VRAM GPU sans basculer sur CPU ou quantisation

Pour aller plus loin

Découvrez nos formations avancées sur les systèmes vectoriels et RAG en production sur learni-group.com/formations.