FAISS est une bibliothèque pour une recherche et un regroupement de similitudes efficaces de vecteurs denses. Il contient des algorithmes qui recherchent dans des ensembles de vecteurs de n'importe quelle taille, jusqu'à ceux qui ne rentrent peut-être pas dans la RAM. Il contient également du code de support pour l'évaluation et le réglage des paramètres. Faish est écrit en C ++ avec des emballages complets pour Python / Numpy. Certains des algorithmes les plus utiles sont implémentés sur le GPU. Il est développé principalement dans le groupe de recherche fondamental de l'IA fondamental de META.
Voir Changelog.md pour des informations détaillées sur les dernières fonctionnalités.
FAISS contient plusieurs méthodes de recherche de similitude. Il suppose que les instances sont représentées comme des vecteurs et sont identifiées par un entier, et que les vecteurs peuvent être comparés aux distances L2 (euclidiennes) ou à des produits DOT. Les vecteurs similaires à un vecteur de requête sont ceux qui ont la distance L2 la plus basse ou le produit à points le plus élevé avec le vecteur de requête. Il prend également en charge la similitude du cosinus, car il s'agit d'un produit DOT sur des vecteurs normalisés.
Certaines des méthodes, comme celles basées sur des vecteurs binaires et des codes de quantification compacts, utilisent uniquement une représentation comprimée des vecteurs et ne nécessitent pas de conserver les vecteurs d'origine. Cela se fait généralement au prix d'une recherche moins précise, mais ces méthodes peuvent passer à des milliards de vecteurs en mémoire principale sur un seul serveur. D'autres méthodes, comme HNSW et NSG, ajoutent une structure d'indexation au-dessus des vecteurs bruts pour rendre la recherche plus efficace.
L'implémentation GPU peut accepter les entrées de la mémoire CPU ou GPU. Sur un serveur avec GPUS, les index GPU peuvent être utilisés un remplacement de dépôt pour les index du CPU (par exemple, remplacer IndexFlatL2
par GpuIndexFlatL2
) et les copies de / depuis la mémoire GPU sont gérées automatiquement. Les résultats seront plus rapides, cependant, si les entrées et les sorties restent résidentes sur le GPU. L'utilisation unique et multi-GPU est prise en charge.
Faiss est livré avec des bibliothèques précompilées pour Anaconda à Python, voir FAISS-CPU et FAISS-GPU. La bibliothèque est principalement implémentée en C ++, la seule dépendance est une implémentation BLAS. La prise en charge en option du GPU est fournie via CUDA ou AMD ROCM, et l'interface Python est également facultative. Il compile avec Cmake. Voir install.md pour plus de détails.
FAISS est construit autour d'un type d'index qui stocke un ensemble de vecteurs, et offre une fonction pour rechercher la comparaison de vecteurs de produit L2 et / ou DOT. Certains types d'index sont des lignes de base simples, telles que la recherche exacte. La plupart des structures d'indexation disponibles correspondent à divers compromis par rapport à
L'implémentation GPU en option fournit ce qui est probable (en mars 2017) la mise en œuvre de recherche de voisinage la plus rapide et la plus rapide (domaine compressé) pour les vecteurs de haute dimension, les K-Means de Lloyd les plus rapides et le petit algorithme de sélection K plus rapide connu. L'implémentation est détaillée ici.
Voici les points d'entrée pour la documentation:
Les principaux auteurs de Faiss sont:
Références à citer lorsque vous utilisez Faish dans un document de recherche:
@article{douze2024faiss,
title={The Faiss library},
author={Matthijs Douze and Alexandr Guzhva and Chengqi Deng and Jeff Johnson and Gergely Szilvasy and Pierre-Emmanuel Mazaré and Maria Lomeli and Lucas Hosseini and Hervé Jégou},
year={2024},
eprint={2401.08281},
archivePrefix={arXiv},
primaryClass={cs.LG}
}
Pour la version GPU de FAIS, veuillez citer:
@article{johnson2019billion,
title={Billion-scale similarity search with {GPUs}},
author={Johnson, Jeff and Douze, Matthijs and J{'e}gou, Herv{'e}},
journal={IEEE Transactions on Big Data},
volume={7},
number={3},
pages={535--547},
year={2019},
publisher={IEEE}
}
Pour une discussion publique sur Faish ou pour les questions, il y a un groupe Facebook sur https://www.facebook.com/groups/faissers/
Nous surveillons la page des problèmes du référentiel. Vous pouvez signaler des bogues, poser des questions, etc.
FAISS est sous licence MIT, reportez-vous au fichier de licence dans le répertoire de niveau supérieur.
Copyright © Meta Platforms, Inc.