Что могут векторные СУБД — open source инструменты & облако
Разработка систем искусственного интеллекта и обучение моделей подразумевает взаимодействие с огромными сводами неструктурированных данных — например, текстом и изображениями. Решать эту задачу помогают векторные БД. Они работают с так называемыми векторными представлениями (эмбеддингами), имеют продвинутые алгоритмы индексирования и особенно эффективны для реализации поиска по сходству.
Учитывая популярность темы машинного обучения, новые векторные СУБД появляются чуть ли не каждый день. Мы сделали подборку open source решений, о которых мало рассказывали на Хабре: от крупных проектов вроде Qdrant до малоизвестных продуктов.
Векторные базы данных можно развернуть в облаке, обеспечивая мощную инфраструктуру, которая значительно улучшает управление крупномасштабными и сложными данными. На виртуальную инфраструктуру MWS сейчас действует скидка 50%.
Epsilla
Это — векторная СУБД, которую распространяют по лицензии GPL-3.0. Можно сказать, что под капотом находится классическая система управления базами данных с таблицами и полями, а векторы представляют собой лишь отдельный их тип. Epsilla имеет богатую экосистему интеграций, включая LangChain и LlamaIndex.
Большинство векторных СУБД для поиска ближайших соседей применяют структуру под названием иерархический маленький мир (HNSW). Однако производительность этого метода стремительно снижается, если целевая точность превышает 95%. По словам разработчиков Epsilla, причина кроется в том, что HNSW не задействует в полной мере вычислительные ресурсы многоядерных процессоров. Чтобы обойти это ограничение, инженеры реализовали алгоритм индексации SpeedANN на базе параллельного обхода графов. Бенчмарки показывают, что пропускная способность Epsilla на реальной нагрузке превышает возможности других СУБД почти в пять раз (при целевом уровне точности 95–99%).
В целом проект Epsilla довольно молодой, поэтому новым пользователям может не хватить имеющейся функциональности. Хотя авторы постепенно расширяют его возможности. Примерно год назад один из авторов Epsilla отметил, что СУБД поддерживает только плотные (dense) векторы, но они планируют добавить поддержку разреженных (sparse) векторов. Что интересно, Epsilla имеет экспериментальную функцию, которая позволяет работать с инструментом как с python-библиотекой (без docker-образов). Вот пример кода, который приводят разработчики:
import epsilla
epsilla.load_db(db_name="db", db_path="/data/epsilla")
epsilla.use_db(db_name="db")
epsilla.create_table(
table_name="MyTable",
table_fields=[
{"name": "ID", "dataType": "INT", "primaryKey": True},
{"name": "Doc", "dataType": "STRING"},
{"name": "EmbeddingEuclidean", "dataType": "VECTOR_FLOAT", "dimensions": 4, "metricType": "EUCLIDEAN"}
]
)
epsilla.insert(
table_name="MyTable",
records=[
{"ID": 1, "Doc": "Berlin", "EmbeddingEuclidean": [0.05, 0.61, 0.76, 0.74]},
{"ID": 2, "Doc": "London", "EmbeddingEuclidean": [0.19, 0.81, 0.75, 0.11]},
{"ID": 3, "Doc": "Moscow", "EmbeddingEuclidean": [0.36, 0.55, 0.47, 0.94]}
]
)
(code, response) = epsilla.query(
table_name="MyTable",
query_field="EmbeddingEuclidean",
response_fields=["ID", "Doc", "EmbeddingEuclidean"],
query_vector=[0.35, 0.55, 0.47, 0.94],
filter="ID < 6",
limit=10,
with_distance=True
)
print(code, response)
Заметим, что разработчики предлагают облачную платформу по модели RAG-as-a-Service. RAG, или Retrieval Augmented Generation, — это подход к работе с большими языковыми моделями, когда система автоматически «прикрепляет» к запросу пользователя дополнительный контекст из внешних источников, чтобы LLM могла сгенерировать наиболее полный ответ. По сути, облако предоставляет исчерпывающий инструментарий для управления всем жизненным циклом LLM-приложений: от разработки и тестирования до деплоя.
MyScale
Это — SQL-совместимая система управления базами данных. Она заточена под разработку моделей машинного обучения промышленного уровня и предлагает возможности быстрого векторного и текстового поиска. Так, даже плохо знакомые с особенностями векторных БД разработчики, могут быстро приступить к делу. В то же время MyScale поддерживает SDK для интеграции с Python, Node.js, Go, JDBS.
В основу СУБД положена система ClickHouse. Авторы объясняют свой выбор наличием продвинутых механизмов сжатия и поддержкой SIMD-команд. Начать работу с MyScale можно с помощью образов Docker — инструкции опубликованы в репозитории на GitHub. Там же есть ссылкана официальную документацию. В ней разработчики рассказывают и показывают, как формировать SQL-таблицы с векторным индексом и производить векторный поиск. Например, вот так можно создать таблицу с векторным столбцом:
CREATE TABLE default.wiki_abstract
(
`id` UInt64,
`body` String,
`title` String,
`url` String,
`body_vector` Array(Float32),
CONSTRAINT check_length CHECK length(body_vector) = 384
)
ENGINE = MergeTree
ORDER BY id;
MyScale использует алгоритмы поиска ближайшего соседа ScaNN, HNSW, IVF, что позволяет достигнуть полноты в 95–99% в зависимости от параметров поиска.
Qdrant
Это — универсальная векторная СУБД и API-сервис для работы с векторами высокой размерности. Qdrant написана на Rust, что позволяет системе работать быстро даже при серьезной нагрузке. Qdrant использует собственный алгоритм HNSW и поддерживает следующие типы метрик: скалярное произведение, евклидово и манхэттенское расстояния, а также косинусное сходство. Помимо этого, система имеет расширенную фильтрацию, что упрощает работу с фасетным и семантическим поиском. К основным конкурентам своего проекта авторы относят Milvus, Pinecone и голландскую Weaviate.
СУБД поддерживает интеграцию с Langchain, LlamaIndex, Apache Spark, Apache Airflow и другими фреймворками. Авторы Qdrant предоставляют возможность протестировать функциональность в демопроектах. Можно оценить семантический поиск по тексту, поиск по похожим изображениям и классификацию (на примере e-commerce продуктов).
Те, кто уже протестировал эту векторную СУБД, отметили легкость установке и простоту в работе. Среди пользователей Qdrant есть и крупный бизнес — например, консалтинговое агентство Deloitte. Проект новый и активно развивается, поэтому привлекает внимание инвесторов. В январе 2024 года разработчики Qdrant получили финансирование в размере $28 млн, а общая сумма полученных ими средств составила $40 млн.
Но чтобы начать работу с Qdrant, амбициозные планы не нужны — достаточно воспользоваться Docker и GRPC. Стоит заметить, что API GRPC для Qdrant находится в стадии разработки и по умолчанию отключен в продакшене (API GRPC предназначен только для тестирования и внутреннего использования).
Milvus
Выпущенная в 2019 году СУБД Milvus представляет собой гибкую платформу для анализа неструктурированных данных. Примерами сценариев могут быть: поиск по сходству изображений, видео, аудио и даже классификация последовательности ДНК. Большинство векторных индексов, поддерживаемых Milvus, используют методы приближенного поиска ближайших соседей (ANNS), среди которых HNSW, FLAT, SCANN и DiskANN.
Функциональность инструмента настолько полная, что команда Qdrant считает Milvus главным конкурентом в сфере векторных СУБД. Как и в случае Qdrant, в репозитории можно найти различные демки — например, поиск изображений, чат-боты и даже молекулярный поиск.
Одним из компонентов вычислительного стека является движок Knowhere. Он позволяет реализовать горизонтальное масштабирование, кэширование, репликацию, аварийное переключение. Начать работу с Milvus можно с помощью Docker и Kubernetes. Также СУБД предоставляет версию Milvus Lite, которая работает на всех устройствах (ноутбуки, планшеты, мобильные телефоны).
ObjectBox 4.0
ObjectBox — это легковесная СУБД, разработанная специально для мобильных и встроенных устройств. У системы минимальные технические требования, поэтому её можно развернуть даже на Raspberry Pi. В то же время СУБД занимает всего несколько мегабайт памяти (двоичный файл целиком весит около 3 МБ).
Версия 4.0 стала первой, в которую добавили векторную функциональность. Она доступна для языков Python, Java, C и Dart.
Заключение
Среди наиболее известных алгоритмов векторного поиска можно выделить иерархический маленький мир (HNSW), инвертированный индекс (IVF) и DiskANN. Некоторые вендоры уже предлагают такую функциональность в своих СУБД. Но на рынке также существует множество продуктов с открытым исходным кодом, которые доступны бесплатно и позволяют кастомизировать базу данных в соответствии с вашими потребностями.
Векторные базы данных остаются горячей темой на рынке ИТ в силу бурного развития систем искусственного интеллекта и не только. Крупные игроки формируют необходимую инфраструктуру для работы с LLM, а малые компании и стартапы запускают автоматизированные сервисы на их основе.
Эластичность облака отвечает требованиям векторных БД, которым часто приходится справляться с меняющимися рабочими нагрузками и быстро растущими объемами данных. Способность облака динамически распределять ресурсы гарантирует эффективное масштабирование без необходимости значительных первоначальных инвестиций в физическую инфраструктуру.