Полное руководство для студентов | 2024-2025
Spotify выпускает Annoy (первая популярная ANN библиотека)
Публикация алгоритма HNSW (Malkov & Yashunin, arXiv:1603.09320)
Meta FAIR выпускает FAISS с GPU поддержкой
Spotify начинает эксперименты с hnswlib
Spotify анонсирует Voyager (замена Annoy на HNSW)
FAISS 1.10 интегрирует NVIDIA cuVS для ускорения
Meta публикует данные о ×8.1 ускорении с cuVS
Представьте, что у вас есть библиотека с миллионом книг, но каталог построен не по алфавиту, а по "смыслу" - похожие по содержанию книги стоят рядом. Векторный поиск работает похожим образом.
поиск релевантной информации в базе знаний
рекомендации похожих треков
поиск похожих изображений
"товары, похожие на этот"
RAG (Retrieval Augmented Generation) — это архитектурный подход, который объединяет возможности поиска релевантной информации и генерации ответов с помощью больших языковых моделей.
Модель может работать с самой свежей информацией без переобучения
Ответы основаны на конкретных документах, а не на памяти модели
Можно добавлять новые документы без изменения архитектуры
Можно проследить источник информации для каждого ответа
Суть простыми словами: Как большой ящик с инструментами - есть молоток для одних задач, отвертка для других. FAISS предлагает разные "инструменты" для разных случаев.
Суть простыми словами: Как GPS-навигатор с разными "слоями" дорог - сначала едем по автостраде (верхние слои), потом по городским улицам (нижние слои).
(Intel Xeon E5-2680 v2, 20 потоков, 2018):
Источник: FAISS Wiki - Indexing 1M vectors
Суть простыми словами: Как игра "20 вопросов" - строим много деревьев с вопросами "левее/правее этой линии?" и находим ответ за несколько шагов.
Сценарий | FAISS | HNSW | Annoy |
---|---|---|---|
Миллиарды векторов + GPU | ✅ Лучший выбор | ❌ Только CPU | ❌ Устарел |
Высокая точность на CPU | ✅ Хорош | ✅ Идеален | ⚠️ Средне |
Быстрый старт приложения | ⚠️ Медленнее | ⚠️ Средне | ✅ Отлично |
Динамические обновления | ✅ Да | ✅ Да | ❌ Только rebuild |
Память критична | ✅ IVFPQ сжатие | ⚠️ Настройка M | ✅ mmap |
# Актуально для FAISS 1.10+ с cuVS поддержкой
import faiss
import numpy as np
# Параметры на основе проверенных рекомендаций
d, nb = 128, 1_000_000
data = np.random.randn(nb, d).astype('float32')
# HNSW индекс (параметры из SIFT1M бенчмарков)
M = 32 # диапазон 16-64
ef_construction = 200 # диапазон 100-500
ef_search = 128 # настройка runtime 50-500
# Создание и настройка индекса
index = faiss.IndexHNSWFlat(d, M)
index.hnsw.efConstruction = ef_construction
index.add(data)
# Поиск с настройкой точности
index.hnsw.efSearch = ef_search
D, I = index.search(queries, k=10)
# Сохранение (совместимо между версиями)
faiss.write_index(index, "modern_hnsw.index")
# Проверьте наличие cuVS: pip install faiss-gpu-cuvs
if faiss.get_num_gpus() > 0:
# GPU IVFPQ для больших датасетов
quantizer = faiss.IndexFlatL2(d)
nlist = 4096 # диапазон 100-100000
m = 32 # диапазон 8-64
nbits = 8 # обычно 4-8
# Создание GPU индекса
gpu_index = faiss.IndexIVFPQ(quantizer, d, nlist, m, nbits)
gpu_index = faiss.index_cpu_to_all_gpus(gpu_index)
# Тренировка (критично для качества)
gpu_index.train(data[:100000]) # минимум 1000×nlist
gpu_index.add(data)
# Настройка поиска
gpu_index.nprobe = 64 # диапазон 1-2048