Technologie

Statut éditorial : En attente de relecture

FAISS

Une bibliothèque C++ avec interface Python pour indexer et rechercher efficacement des vecteurs denses, sur CPU ou GPU.

Classification de la technologie

Type

  • Intelligence artificielle

Technologie

  • FAISS

En bref

FAISS, pour *Facebook AI Similarity Search*, est une bibliothèque consacrée à la recherche de voisins proches et au regroupement de vecteurs denses. Son cœur est écrit en C++ et une interface Python permet de l’utiliser dans les pipelines de données et de machine learning. Certaines implémentations exploitent les GPU.

FAISS est un moteur d’indexation, pas une base de données complète. Il ne fournit pas à lui seul une API multi-utilisateur, une gestion métier des documents, des sauvegardes orchestrées, des droits d’accès ni un système général de filtres.

Comment fonctionne une recherche ?

Un modèle d’embeddings transforme chaque document en vecteur de dimension fixe. FAISS construit un index à partir de ces vecteurs. Une requête est encodée avec le même modèle, puis l’index renvoie les identifiants des vecteurs les plus proches et leurs distances.

import faiss
import numpy as np

dimension = 384
index = faiss.IndexFlatIP(dimension)

documents = np.random.random((1000, dimension)).astype("float32")
faiss.normalize_L2(documents)
index.add(documents)

queries = np.random.random((1, dimension)).astype("float32")
faiss.normalize_L2(queries)
scores, ids = index.search(queries, k=5)

Avec des vecteurs normalisés, le produit scalaire peut servir à classer selon une proximité équivalente à la similarité cosinus. Le choix de la métrique doit correspondre à l’entraînement du modèle d’embeddings.

Recherche exacte ou approximative

Un index plat compare la requête à tous les vecteurs. Il fournit une référence exacte et simple, souvent suffisante pour un petit corpus. À grande échelle, ce coût devient trop élevé.

Les index approximatifs réduisent le temps ou la mémoire en acceptant de manquer parfois un voisin pertinent. FAISS propose notamment des familles IVF, HNSW et des techniques de quantification de produit. Le réglage recherche un compromis entre :

Il n’existe pas d’index universellement meilleur. Commencez par un index exact sur un échantillon, puis utilisez-le comme vérité de comparaison pour mesurer le rappel d’un index approximatif.

FAISS dans un pipeline RAG

FAISS peut assurer la partie « retrouver les passages proches ». L’application doit encore gérer le découpage des documents, les métadonnées, le lien entre un identifiant et son texte, les mises à jour, les suppressions et la préparation du contexte envoyé au modèle.

Une architecture simple conserve les textes et métadonnées dans un stockage séparé, et FAISS maintient l’index des vecteurs avec des identifiants stables. Sauvegardez ensemble l’index, la table de correspondance et les informations du modèle d’embeddings.

CPU, GPU et mémoire

Les index CPU conviennent à de nombreux prototypes et services de taille modérée. Les GPU peuvent accélérer la construction ou les recherches par lots, mais ajoutent des contraintes de transfert mémoire, de capacité et de déploiement.

La dimension, le nombre de vecteurs et leur précision déterminent une grande partie de la mémoire brute. À cela s’ajoutent les structures de l’index. Mesurez sur des données proches du volume réel plutôt que d’extrapoler uniquement depuis quelques milliers de documents.

Points de vigilance

Quand choisir FAISS ?

Choisissez FAISS pour un composant embarqué, un traitement hors ligne, une expérimentation algorithmique ou un service maîtrisé par une équipe qui veut contrôler finement l’index.

Une base vectorielle ou PostgreSQL avec pgvector sera souvent plus simple si vous avez besoin d’une API distante, de transactions, de filtres riches, d’accès concurrents et d’une exploitation standardisée.

À retenir

FAISS est une boîte à outils performante pour la recherche vectorielle. Sa puissance vient du choix d’index et du contrôle des compromis ; son usage en production exige de construire autour de lui les fonctions qu’une base de données fournit habituellement.

État des informations
Non vérifié
Dernière vérification
Pas encore vérifiée

Sources utilisées