Об этом проекте

Faiss — это библиотека для эффективного поиска по сходству и кластеризации плотных векторов, разработанная в основном в группе Fundamental AI Research компании Meta. Предполагается, что объекты представлены в виде векторов, идентифицируемых целыми числами, и сравниваются с использованием расстояния L2 (евклидова) или скалярных произведений; косинусное сходство поддерживается через скалярные произведения на нормализованных векторах. Библиотека содержит алгоритмы для поиска в наборах векторов любого размера, включая наборы, которые могут не помещаться в оперативной памяти. Она также включает вспомогательный код для оценки и настройки параметров. Faiss написан на C++ с полными обёртками для Python/numpy, а некоторые из наиболее полезных алгоритмов реализованы на GPU. Типы индексов варьируются от простых базовых методов точного поиска до структур, обеспечивающих компромисс между временем поиска, качеством поиска, памятью на вектор индекса, временем обучения, временем добавления и необходимостью во внешних данных для неконтролируемого обучения. Методы, основанные на бинарных векторах и компактных квантованных кодах, используют только сжатое представление и не требуют хранения исходных векторов, обычно ценой менее точного поиска, но с возможностью масштабирования до миллиардов векторов в основной памяти на одном сервере. Другие методы, такие как HNSW и NSG, добавляют структуру индекса поверх исходных векторов для повышения эффективности поиска. Реализация для GPU принимает входные данные как из памяти CPU, так и из памяти GPU. На сервере с GPU индексы GPU можно использовать в качестве прямой замены индексов CPU (например, заменив IndexFlatL2 на GpuIndexFlatL2); копирование в память GPU и обратно выполняется автоматически. Результаты получаются быстрее, когда и входные, и выходные данные остаются в памяти GPU. Поддерживается использование одного и нескольких GPU. Установка: предварительно скомпилированные библиотеки доступны для Anaconda в Python (faiss-cpu, faiss-gpu, faiss-gpu-cuvs). Библиотека в основном реализована на C++; единственная зависимость — реализация BLAS. Опциональная поддержка GPU обеспечивается через CUDA или AMD ROCm, а интерфейс Python является опциональным. Также можно опционально включить бэкенд-реализации GPU от NVIDIA cuVS. Компилируется с помощью cmake; подробности см. в INSTALL.md. Точки входа в документацию включают вики-проект (с руководством для начинающих, FAQ и разделом по устранению неполадок), документацию doxygen на faiss.ai с информацией по каждому классу, извлечённой из комментариев в коде, и README-файлы бенчмарков для воспроизведения результатов исследовательских работ, таких как Polysemous codes, Billion-scale similarity search with GPUs и Link and code. Faiss распространяется под лицензией MIT. Публичное обсуждение ведётся в GitHub Discussions, а страница issues отслеживается на предмет сообщений об ошибках и вопросов.