Введение в векторный поиск и его значение
Векторный поиск является основой инфраструктуры искусственного интеллекта, обеспечивая работу множества функций от обогащённой генерации (RAG) до агентских навыков и долгосрочной памяти. С растущим спросом на индексацию больших наборов данных возникает необходимость в оптимизации хранения для экономии средств без потери качества.
Анатомия затрат на хранение в векторных базах данных
Чтобы понять, как оптимизировать индекс, необходимо рассмотреть два основных фактора, влияющих на затраты: точность и размерность.
Точность
Вектор обычно представлен массивом 32-битных чисел (Float32), требующих 4 байта памяти каждое. Снижение точности может сократить требуемое хранилище.
Размерность
Чем выше размерность, тем больше семантической информации может содержать модель. Современные модели обычно выдают векторы с размерностью 768 или 1024.
В производственной среде для векторов с размерностью 1024 требуется:
- Базовый размер вектора: 1024 * 4 байта = 4 КБ на вектор.
- Высокая доступность: репликация в 3 раза увеличивает требуемую память до 12 КБ на вектор.
При переходе от прототипа к миллионам документов инфраструктурные требования резко возрастают. Например, для 100 миллионов векторов требуется около 1,2 ТБ ОЗУ, что при стоимости $5 за ГБ/месяц обходится в $6000 в месяц.
Методы оптимизации: Квантование и Вложения Матрешек
Квантование
Квантование снижает пространство, требуемое для хранения вектора, за счёт уменьшения точности. Основные типы квантования:
- Скалярное квантование: уменьшает точность с Float32 до Int8, сокращая объём хранения в 4 раза.
- Бинарное квантование: конвертирует вектора в 1 бит, сокращая объём хранения в 32 раза, но снижая качество извлечения.
- Продуктное квантование: делит вектор на части и использует центроиды для уменьшения объёма данных.
Вложения Матрешек (MRL)
Вложения Матрешек уменьшают размерность вектора, сохраняя ключевую информацию в первых измерениях. Это позволяет уменьшить размерность до 64 при минимальной потере качества, сокращая объём хранения в 16 раз.
Эксперимент и результаты оптимизации
Для демонстрации применены методы на базе данных с 100,000 документами, используя FAISS и индекс HNSW.
| Матрешка/Квантование | Нет квантования (f32) | Скалярное (int8) | Бинарное (1-бит) |
|---|---|---|---|
| 384 (Оригинал) | 172.44 MB | 62.58 MB (63.7% сохранено) | 30.54 MB (82.3% сохранено) |
| 256 (MRL) | 123.62 MB (28.3% сохранено) | 50.38 MB (70.8% сохранено) | 29.01 MB (83.2% сохранено) |
| 128 (MRL) | 74.79 MB (56.6% сохранено) | 38.17 MB (77.9% сохранено) | 27.49 MB (84.1% сохранено) |
| 64 (MRL) | 50.37 MB (70.8% сохранено) | 32.06 MB (81.4% сохранено) | 26.72 MB (84.5% сохранено) |
Наши данные показывают, что сочетание методов дает значительную экономию в пространстве хранения.
Торговля точностью: что мы теряем?
Анализируем влияние квантования и уменьшения размерности на качество извлечения.
| Размерность | Тип | Recall@10 | MRR@10 |
|---|---|---|---|
| 384 | Нет квантования (f32) | 0.481 | 0.367 |
| Скалярное (int8) | 0.474 | 0.357 | |
| Бинарное (1-бит) | 0.391 | 0.291 |
Скалярное квантование сохраняет высокую точность извлечения, минимально уступая оригиналу, в то время как бинарное квантование существенно снижает качество.
Заключение
При масштабировании векторной базы данных на миллиарды векторов затраты на инфраструктуру становятся значительным фактором. Применение квантования и MRL позволяет существенно сократить эти затраты без значимых потерь в качестве извлечения.

