На фоне развития генеративных и больших языковых моделей набирают обороты векторные базы данных. В прошлый раз в блоге beeline cloud мы обсудили, насколько этот тренд устойчив, а также предложили несколько книг для желающих погрузиться в тему. Сегодня же мы собрали компактную тематическую подборку открытых СУБД и поисковых движков, способных помочь в разработке систем ИИ. Обсуждаем такие инструменты, как Lantern, LanceDB, CozoDB, ArcadeDB, Dart Vector DB, Marqo и Orama.
Lantern
Пойдем по порядку, Lantern — это векторное расширение для PostgreSQL, заточенное под проектирование систем ИИ. С его помощью можно генерировать эмбеддинги и выполнять векторный поиск. Lantern разработан на высокопроизводительном движке usearch, который использует подход под названием «иерархический маленький мир» (HNSW). Он ускоряет работу алгоритмов нечеткого поиска (также известных как «поиск по сходству») за счет своей структуры. Каждый её слой представляет собой граф. На нулевом слое представлены все объекты, а на последующих — все меньшие выборки. При поиске алгоритм выбирает вершину в графе верхнего слоя, быстро находит близких к запросу кандидатов, а затем возобновляет поиск по ним на других слоях.
Что интересно, Lantern позволяет формировать индексы за пределами основной базы данных, а затем импортировать их в виде файлов. Таким образом, БД не перегружается во время индексации, что увеличивает общую производительность. В то же время расширение вводит новый тип индексов для векторных столбцов — lantern_hnsw, который ускоряет работу SQL-оператора ORDER BY…LIMIT.
Lantern поддерживает несколько функций расстояния и имеет два режима:
lantern.pgvector_compat=TRUE. Он назначается по умолчанию и предлагает разработчику выбрать функцию самостоятельно: евклидово расстояние (<->), косинусное расстояние (<=>), расстояние Хэмминга (<+>);
lantern.pgvector_compat=FALSE. В этом случае инструмент автоматически подберет функцию расстояния для поиска.
В целом разработчики позиционируют Lantern как альтернативу pgvector. Это — расширение, которое добавляет векторный поиск в Postgres. Но утверждают, что их продукт генерирует индексы быстрее и точнее. Например, индексация массива данных sift заняла у Lantern восемь минут, а у pgvector — почти час.
Здесь стоит заметить, что некоторые резиденты Hacker News выразили сомнения относительно результатов сравнения. По их мнению, высокие показатели — это, в первую очередь, заслуга usearch, а не авторов Lantern. С другой стороны, независимая оценка подтвердила, что Lantern действительно формирует индексы как минимум в два раза быстрее (хотя pgvector по-прежнему демонстрирует более низкое время отклика).
В любом случае проект продолжает развиваться. Разработчики планируют внедрить аппаратное CPU-ускорение для обработки запросов, автоматический подбор индекса, поддержку контроля версий и возможность проводит А/В-тестирование эмбеддингов.
LanceDB
Векторная СУБД, основанная на столбчатом формате памяти Lance и предназначенная для разработки высокопроизводительных систем ИИ. Исходный код написан на языке Rust и распространяется под открытой лицензией Apache-2.0.
LanceDB совместима с экосистемами LangChain и LlamaIndex, а также с популярными фреймворками PyTorch и TensorFlow. В то же время СУБД поддерживает векторный и полнотекстовый поиски, а также технологию zero-copy. Она описывает операции, в ходе которых процессор не копирует данные из одной области памяти в другую, а работает с кэшем или прямым доступом к памяти.
Отличительная черта LanceDB — поддержка GPU-ускорения. Разработчики СУБД провели серию бенчмарков и утверждают, что технология позволяет ускорить индексацию в 20–26 раз, по сравнению с обработкой данных на центральном процессоре.
Резиденты Hacker News проявили интерес к LanceDB, хотя и выразили сомнение в необходимости специализированной СУБД для разработки высокопроизводительных систем ИИ. По мнению некоторых пользователей площадки, для этих целей достаточно стандартных инструментов с возможностями векторного поиска. С другой стороны, пользователи отмечают удобство LanceDB для разработчиков, так как продукт из коробки поддерживает самые распространенные инструменты для работы с LLM.
Если вы хотите познакомиться с этой СУБД, официальная документация станет хорошим местом для старта. Также авторы предлагают различные туториалы и «рецепты» для проектирования ИИ-моделей. Например, они на практике показывают, как запустить собственного Q&A-бота для ответа на основе текстовых расшифровок видео с YouTube.
CozoDB
Это — транзакционная реляционная СУБД, которая предлагает векторную функциональность. В новых версиях пользователи могут формировать индексы HNSW. Что интересно, в CozoDB встроена функция «путешествия во времени». Так, СУБД хранит всю историю изменений, в том числе предыдущие значения переменных. Доступ к ним остается, даже если они были перезаписаны.
CozoDB можно запускать на различных ОС, включая iOS, Android. Подобной гибкости разработчикам удалось достичь за счет переключаемых движков SQLite, RocksDB, Sled и TikV. В целом проект получил большое количество позитивных комментариев на момент релиза. Так, на Hacker News отметили удачный Python-интерфейс, а также выбор лицензии (MPL 2.0), которая разрешает применять СУБД в коммерческих проектах.
ArcadeDB
Мультимодальная СУБД, которая поддерживает SQL, Cypher, Gremlin, HTTP/JSON, MongoDB и Redis. Была создана как форк популярной OrientDB. В собственной версии авторы сделали акцент на высокую производительность. ArcadeDB написана на LLJ — Low-Level-Java. Во время работы СУБД практически не заполняет динамическую память объектами, соответственно, нет необходимости в их частой утилизации. Кроме того, она использует оптимизированную JVM, а ядро ПО спроектировано для эффективной работы на нескольких процессорах.
Векторная модель использует алгоритм HNSW на базе Java-библиотеки Hnswlib. ArcadeDB можно развернуть в облаке с помощью Docker или Kubernetes, а также локально. СУБД распространяется под открытой лицензией Apache-2.0.
Marqo
Marqo — это поисковый движок для текста и изображений, который развивается под открытой лицензией Apache-2.0. СУБД работает в формате documents in, documents out, как его называют сами авторы. В этом случае индексирующие и поисковые API принимают и возвращают данные в формате документов. И Marqo отвечает за полный цикл работы с векторами: формирование эмбеддингов, хранение метаданных и инференс.
СУБД поддерживает популярные фреймворки для машинного обучения и разработки систем ИИ. Так, интеграция с Haystack позволяет использовать Marqo в качестве документного хранилища для RAG, ответов на вопросы или поиска документов. В то же время Marqo упрощает управление потоками данных для дата-сайентистов, работающих с фреймворками вроде Hamilton. Присутствует также и встроенная поддержка ONNX (Open Neural Network Exchange), инструмента для миграции моделей машинного обучения с одного фреймворка в другой (например, с PyTorch на TFLite).
Marqo уже находит применение на реальных проектах. Один инженер разработал инструмент для поиска по многоязычной законодательной базе Европейского союза. Главная функция проекта — возможность находить похожие законы, написанные на других языках. В случае с традиционного SQL пришлось бы вручную добавлять систему автоматического перевода текстов документов на английский, что неизменно привело бы к несоответствиям. Marqo снимает это ограничение благодаря векторной технологии и позволяет находить аналогичные законодательные акты на разных языках.
Авторы Marqo также демонстрируют сценарии применения их инструмента. Например, использование в связке с ChatGPT для проектирования приложений в формате Q&A.
Orama
Еще один поисковый движок для векторного и гибридного поиска. Написан на JavaScript и не имеет зависимостей, то есть его можно развернуть практически на любой ОС. Orama использует алгоритм BM25 для оценки и ранжирования релевантных документов, который похож на TF-IDF. Помимо этого, движок позволяет осуществлять поиск по полному совпадению (свойство exact). У Orama также есть функция геопоиска, которая позволяет фильтровать результаты по расстоянию от выбранной локации или по ограничивающей области. В основе по умолчанию лежит формула гаверсинусов. Она быстрая, но допускает, что Земля имеет идеальную сферическую форму, поэтому её точность снижается для больших расстояний. Но Orama может использовать формулу Винсенти.
В новых версиях разработчики добавили систему официальных и пользовательских дополнений. Так, создав собственный плагин, один ведущий подкаста внедрил поиск по базе транскриптов на своем сайте. Другой инженер использовал Orama при разработке инструмента для поиска элементов кода JavaScript. По мнению автора, обнаружение нужной функции или переменной особенно в больших проектах может быть крайне проблематичным. Orama осуществляет полнотекстовый поиск с применением фильтров, что облегчает задачу. Исходный код его проекта можно посмотреть здесь.
Dart Vector DB
Векторная СУБД для приложений на Android и iOS, написанная на языке Dart. Этот проект развивается командой из трех инженеров-энтузиастов. Авторов не устроили существующие решения для работы с векторами на обеих платформах, поэтому они разработали собственное — Dart Vector DB для приложений, построенных на Flutter.
Авторы утверждают, что конфиденциальная информация пользователей никогда не покидает их устройство. Кроме того, все процессы протекают локально, сервер не предусмотрен. Можно использовать эмбеддинги от OpenAI (добавляются с помощью нескольких строк кода) или генерировать собственные. Инструмент появился относительно недавно и еще не успел обрасти сообществом. Но он находится под открытой лицензией Apache-2.0, поэтому внести вклад может любой желающий.
beeline cloud — secure cloud provider. Разрабатываем облачные решения, чтобы вы предоставляли клиентам лучшие сервисы.
Комментарии (3)
excoder
10.04.2024 21:32+1Я читал подобный обзор год назад, все почти имена другие были. Кто же эту кучу кода поддерживает? Такое ощущение, что 80% этих продуктов сиюминутны.
DenisSDK
Порекомендуете книжку про векторные СУБД?
beeline_cloud Автор
Некоторые материалы есть здесь (в заключительном подразделе поста).