FAISS

FAISS: архитектура и типы индексов

Содержание курса

Почему начинаем с FAISS

В предыдущем модуле мы разобрались с тем, как устроены эмбеддинги, познакомились с алгоритмами поиска — IVF, PQ, HNSW — и даже реализовали простой IVF своими руками. Теперь переходим к практике: нам нужно научиться работать с реальными инструментами векторного поиска.

В обзоре решений мы видели три варианта: FAISS, Qdrant и Weaviate. Qdrant и Weaviate — полноценные серверные базы данных. Мы до них дойдём. Но сначала полезно увидеть алгоритмы поиска в чистом виде, без инфраструктурного шума. FAISS ставится одной командой через pip, работает прямо внутри вашего Python-процесса и позволяет сосредоточиться на самом поиске. Это идеальная стартовая точка.

Что такое FAISS

FAISS (Facebook AI Similarity Search) — это библиотека от команды Meta AI для эффективного поиска по векторам. Написана на C++ с Python-обёрткой, что даёт высокую производительность при удобном интерфейсе.

Ключевое отличие от Qdrant и Weaviate: FAISS — это библиотека, которая живёт внутри вашего приложения. Поиск происходит в памяти того же процесса, что и ваш код. Это устраняет любые сетевые задержки и даёт максимальную гибкость в выборе алгоритмов.

Именно поэтому FAISS часто называют «движком поиска», а не «базой данных»: он отвечает за алгоритмическую часть, а всё остальное — хранение метаданных, авторизацию, масштабирование — разработчик строит вокруг него сам.

За что платим этой простотой

У такой архитектуры есть закономерные ограничения. FAISS хранит только векторы. Если нужно к каждому вектору прикрепить текст документа, ссылку, дату или любые другие метаданные — это придётся организовать самостоятельно: хранить в отдельной структуре или базе данных и связывать по индексу после поиска.

Фильтрации по метаданным «из коробки» нет. В Qdrant можно написать запрос вида «найди похожие документы с тегом python, созданные после января 2025» — и система обработает это внутри. В FAISS нужно либо строить несколько отдельных индексов для разных групп данных, либо делать поиск с запасом и фильтровать результаты вручную.

Встроенного горизонтального масштабирования тоже нет. Если данные не помещаются на одну машину — нужно самостоятельно реализовать шардирование: разбить базу на части, держать отдельные индексы, объединять результаты.

GPU: возможности и ограничения по платформам

Одно из сильных преимуществ FAISS — поддержка GPU-ускорения через CUDA. На хорошей видеокарте поиск, занимавший 100 мс на CPU, может выполняться за 5–10 мс. Это особенно важно при обработке больших батчей запросов.

Здесь есть важный нюанс по платформам. faiss-gpu нативно работает только на Linux — там он устанавливается стандартным pip install faiss-gpu и сразу готов к работе. На Windows нативной поддержки нет: нужно либо запускать через Docker-контейнер с Linux, либо через WSL (Windows Subsystem for Linux).

На практике это не такая большая проблема: рабочие серверы почти всегда работают на Linux, так что в продакшене всё будет как надо. Для локальной разработки на Windows проще поставить faiss-cpu — скорости CPU вполне достаточно для отладки и проверки логики. Когда придёт время деплоить на сервер, можно будет перенести на gpu.

# CPU-версия: работает везде — Windows, macOS, Linux
pip install -U faiss-cpu==1.13.2

# GPU-версия: Linux нативно. рекомендуется стаить через conda (Windows — только через Docker/WSL)
$ conda install -c pytorch -c nvidia -c conda-forge faiss-gpu=1.13.2

# GPU-версия с NVIDIA cuVS
$ conda install -c pytorch -c nvidia -c rapidsai -c conda-forge libnvjitlink faiss-gpu-cuvs=1.13.2

На следующем шаге разберём, какие именно типы индексов предоставляет FAISS — это важно понять до того, как писать первые строки кода.

Начать заново?

Помощник начнёт новый диалог по этой задаче. Текущая переписка останется в истории до конца срока хранения.

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

Переписка и фото хранятся 90 дней после последнего принятого сообщения. Преподаватель получит доступ к диалогу, когда вы попросите его помочь.

Проверка решения остаётся отдельным действием.

FAISS: архитектура и типы индексов — Vector DB & RAG Developer — Latorn