Outil CLI
facebookresearch/faiss avatar
facebookresearch/faiss

Faiss : indexer et rechercher des vecteurs

facebookresearch/faiss offre une implémentation open source exploitable en conditions réelles avec une structure réutilisable.

40 905 étoiles4 524 forksC++MIT

En bref

De quoi s’agit-il ?
Faiss propose des index CPU et GPU pour la recherche de voisins et le clustering de vecteurs denses, avec des compromis explicites entre vitesse, mémoire et précision.
À qui s’adresse-t-il ?
Le projet convient aux équipes dont le besoin correspond précisément aux fonctions décrites pour faiss. Il convient moins à celles qui attendent un support ou une compatibilité absents du README.
Puis-je l’utiliser commercialement ?
Oui. MIT est une licence permissive : vous pouvez utiliser, modifier et vendre un logiciel qui en dépend, à condition de conserver les mentions de droit d’auteur et de licence.
Est-il encore maintenu ?
Oui. Les derniers commits datent d’il y a 1 jour.
En quel langage est-il écrit ?
Principalement C++, d’après les statistiques de langage de GitHub.

Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 14 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.

ANALYSE OPEN SOURCE APPROFONDIE

Le répertoire benchs n'est pas la bibliothèque

Le README du répertoire benchs décrit un ensemble de scripts de benchmark situés dans le dépôt facebookresearch/faiss. Les métadonnées du dépôt identifient Faiss comme une bibliothèque en C++ pour la recherche de similarité et le clustering de vecteurs denses, avec une page d'accueil à faiss.ai. Les scripts sont autonomes : ils ne dépendent que de Faiss et de données d'entraînement externes qui doivent être placées dans des sous-répertoires. Le README précise aussi que les nombres reproduits, surtout les temps, changent légèrement à cause des modifications de l'implémentation et des machines différentes.

Les résultats d'articles visés par ces scripts

Les scripts reproduisent les résultats de deux articles. Le premier est Polysemous codes de Douze, Jégou et Perronnin, publié à l'ECCV 2016. Le second est Billion-scale similarity search with GPUs de Jeff Johnson, Matthijs Douze et Hervé Jégou, cité dans le README comme arXiv:1702.08734. bench_polysemous_sift1m.py correspond à la figure 3 de l'article Polysemous, tandis que bench_polysemous_1bn.py couvre les expériences sur un milliard de vecteurs de cet article, y compris le tableau 2 et l'annexe. Les scripts GPU visent l'article GPU.

Jeux de données externes et étapes de téléchargement

Aucun jeu de données n'est fourni avec le dépôt. SIFT1M et SIFT1B doivent être téléchargés depuis corpus-texmex.irisa.fr et décompressés dans les sous-répertoires sift1M ou bigann. Les ground truth et requêtes Deep1B proviennent d'un lien Yandex.Disk, tandis que les vecteurs de base et d'apprentissage sont obtenus avec downloadDeep1B.py du dépôt GNOIMI, puis concaténés dans base.fvecs et learn.fvecs. MNIST8m vient de la page infinite MNIST de Léon Bottou. Le README ne donne aucune somme de contrôle pour ces fichiers, donc leur vérification d'intégrité reste à la charge de l'utilisateur.

Exécuter les expériences Polysemous à un milliard

bench_polysemous_1bn.py prend un nom de jeu de données, une clé index_factory valide et des paramètres de recherche. Le README montre un run sur SIFT1000M avec IMI2x12,PQ16 et une grille de nprobe, max_codes et seuils de Hamming générée par expansion d'accolades. Dans ce run documenté, l'entraînement prend environ deux minutes et l'ajout des vecteurs environ 3,1 heures, les deux étant multithreadés. La recherche n'est pas multithreadée. Le résultat du tableau 2 est choisi au point où le pourcentage de comparaisons de codes qui passent le test de Hamming est d'environ 20 %, ce qui correspond à ht=48 dans l'exemple de sortie.

Recherche GPU, clustering et scripts de graphe k-NN

La section GPU du README reproduit les mesures de l'article GPU sur une ou quatre GPU Titan X. bench_gpu_sift1m.py exécute des recherches exactes et approximatives sur SIFT1M. bench_gpu_1bn.py gère SIFT1B et Deep1B avec recherche multi-GPU ; le README documente des options comme -tempmem pour limiter la mémoire temporaire et -altadd pour éviter les débordements de mémoire GPU lors de l'ajout. kmeans_mnist.py effectue le clustering de MNIST8m, et un autre appel de bench_gpu_1bn.py construit un graphe k-NN sur Deep1B. Le README recommande GpuIVFFlat pour les petits jeux de données.

Benchmarks supplémentaires et licence

Outre la reproduction d'articles, le répertoire contient de nombreux benchmarks autonomes pour des composants de Faiss : codecs de quantification, noyaux de distance de Hamming, opérations de tas, variantes HNSW, IVF fastscan, distances par paires, partitionnement, tables de quantificateurs produits et opérations vectorielles. Le README indique que certains peuvent être obsolètes. Le dépôt est sous licence MIT, avec copyright Facebook, Inc. et ses affiliés. La licence autorise l'utilisation, la copie, la modification, la fusion, la publication, la distribution, la sous-licence et la vente de copies, et exclut toute garantie. Le README ne couvre pas l'installation, l'utilisation de l'API, les exigences de pilotes ou le matériel attendu ; ces points restent à vérifier ailleurs.

Tester faiss dans son contexte

Un index IndexFlatL2 puis un script du dossier benchs permettent de comparer distance, temps et mémoire avec les données réellement chargées. Cette séquence relie le comportement annoncé pour faiss aux fichiers et sorties observables. Elle ne permet pas d’inférer une compatibilité ou une garantie que le README ne décrit pas. Notez aussi les dépendances, la version utilisée et les erreurs exactes rencontrées, car elles déterminent la charge d’intégration.

Conclusion éditoriale

Le projet convient aux équipes dont le besoin correspond précisément aux fonctions décrites pour faiss. Il convient moins à celles qui attendent un support ou une compatibilité absents du README. Avant décision, Un index IndexFlatL2 puis un script du dossier benchs permettent de comparer distance, temps et mémoire avec les données réellement chargées.

Sources officielles

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Notes de la communauté

Notes de la communauté