Проблема масштабируемости и стоимости RAM
Векторный поиск стал критическим компонентом инфраструктуры AI, обеспечивая работу RAG, семантического поиска и агентов. Однако по мере роста индексов от миллионов до сотен миллионов или миллиардов записей, хранение полных индексов в RAM приводит к экспоненциальному росту затрат. Для крупных баз данных ежемесячные расходы на память могут достигать тысяч долларов, а алгоритмы вроде HNSW становятся узким местом из-за высоких требований к пропускной способности памяти.
In-Memory решения: HNSW и их ограничения
HNSW (Hierarchical Navigable Small World) — самый популярный алгоритм, использующий многоуровневый граф. Он обеспечивает экстремально низкую задержку при поиске, так как весь индекс находится в оперативной памяти. Однако эта архитектура не оптимизирована для дискового ввода-вывода (I/O). При попытке перенести HNSW на диск возникают случайные операции чтения, что увеличивает задержку с миллисекунд до сотен миллисекунд. Кроме того, для экономии памяти часто применяется квантование, что снижает качество поиска.
On-Disk решения: SPANN и DiskANN
Для борьбы с ограничениями RAM разработаны алгоритмы, минимизирующие использование памяти за счет использования диска:
- SPANN: Использует методологию инвертированного индекса (IVF). Центроиды кластеров хранятся в RAM, а сами векторы — на диске. Ключевое преимущество: векторы одного кластера хранятся последовательно, что позволяет загружать их блоками, избегая случайного доступа к диску.
- DiskANN: Использует однослойный граф Vamana. Он хранит квантованные векторы и граф в RAM, а полноразрядные векторы считывает с диска только для посещенных точек. Это минимизирует количество случайных операций чтения, необходимых для поиска топ-k результатов.
Сравнительный анализ подходов
Выбор между алгоритмами зависит от масштаба данных и требований к задержке. Ниже приведено сравнение ключевых характеристик:
| Характеристика | HNSW (In-Memory) | SPANN (On-Disk) | DiskANN (On-Disk) |
|---|---|---|---|
| Основная структура | Многоуровневый граф | Инвертированный индекс (IVF) + центроиды | Однослойный граф (Vamana) |
| Хранение данных | Полностью в RAM | Центроиды в RAM, векторы на диске | Квантованные данные в RAM, полные векторы на диске |
| Тип доступа к диску | Случайный (Random I/O) — плохо масштабируется | Последовательный (Sequential I/O) — эффективно | Минимизированный случайный доступ |
| Идеальный масштаб | Малый/Средний (до сотен млн) | Очень большой (миллиарды записей) | Большой/Очень большой |
| Примеры реализаций | Qdrant, Milvus, pgvector, Weaviate | Turbopuffer, Chroma DB (cloud) | Microsoft Research, Azure AI Search |
Вывод: когда что выбирать?
Если ваш индекс не превышает несколько сотен миллионов векторов и критична минимальная задержка, HNSW остается золотым стандартом. Однако при работе с миллиардами записей или при жестком ограничении бюджета на инфраструктуру, переход на on-disk решения, такие как SPANN или DiskANN, позволяет существенно снизить затраты на RAM, сохраняя приемлемую скорость поиска за счет оптимизации дискового ввода-вывода.
Источник: Towards Data Science ↗
