Что такое милвус?

Milvus - хищная птица из рода Milvus семейства ястребиных Accipaitridae, отличающаяся скоростью полета, острым зрением и удивительной приспособляемостью.

Zilliz выбрала название Milvus для своей высокопроизводительной и масштабируемой векторной базы данных с открытым исходным кодом, которая эффективно работает в самых разных средах, от ноутбука до крупных распределенных систем. Она доступна как в виде программного обеспечения с открытым исходным кодом, так и в виде облачного сервиса.

Разработанная компанией Zilliz и вскоре переданная LF AI & Data Foundation в рамках Linux Foundation, Milvus стала одним из ведущих мировых проектов векторных баз данных с открытым исходным кодом. Он распространяется под лицензией Apache 2.0, а большинство участников - эксперты из сообщества высокопроизводительных вычислений (HPC), специализирующиеся на создании крупномасштабных систем и оптимизации кода с учетом аппаратного обеспечения. В число основных участников входят специалисты из Zilliz, ARM, NVIDIA, AMD, Intel, Meta, IBM, Salesforce, Alibaba и Microsoft.

Интересно, что каждый проект Zilliz с открытым исходным кодом назван в честь птицы, что символизирует свободу, предвидение и быстрое развитие технологий.

Неструктурированные данные, эмбеддинги и Milvus

Неструктурированные данные, такие как текст, изображения и аудио, различаются по формату и несут в себе богатую семантику, что делает их сложными для анализа. Чтобы справиться с этой сложностью, используются эмбеддинги, преобразующие неструктурированные данные в числовые векторы, отражающие их основные характеристики. Затем эти векторы хранятся в векторной базе данных, обеспечивая быстрый и масштабируемый поиск и анализ.

Milvus предлагает надежные возможности моделирования данных, позволяющие организовать неструктурированные или мультимодальные данные в структурированные коллекции. Он поддерживает широкий спектр типов данных для моделирования различных атрибутов, включая распространенные числовые и символьные типы, различные векторные типы, массивы, наборы и JSON, избавляя вас от необходимости поддерживать несколько систем баз данных.

Untructured data, embeddings, and Milvus Неструктурированные данные, вкрапления и Milvus

Milvus предлагает три режима развертывания, охватывающие широкий диапазон масштабов данных - от локального прототипирования в Jupyter Notebooks до массивных кластеров Kubernetes, управляющих десятками миллиардов векторов:

  • Milvus Lite - это библиотека на языке Python, которая может быть легко интегрирована в ваши приложения. Являясь облегченной версией Milvus, она идеально подходит для быстрого создания прототипов в Jupyter Notebooks или для работы на устройствах с ограниченными ресурсами. Узнайте больше.
  • Milvus Standalone - это серверное развертывание на одной машине, все компоненты которого собраны в единый образ Docker для удобного развертывания. Узнайте больше.
  • Milvus Distributed может быть развернут на кластерах Kubernetes. Это облачная нативная архитектура, предназначенная для миллиардных и даже более масштабных сценариев. Эта архитектура обеспечивает избыточность критически важных компонентов. Узнайте больше.

Что делает Milvus таким быстрым?

Milvus с самого начала разрабатывалась как высокоэффективная система векторных баз данных. В большинстве случаев Milvus превосходит другие векторные базы данных в 2-5 раз (см. результаты VectorDBBench). Такая высокая производительность является результатом нескольких ключевых конструкторских решений:

Оптимизация с учетом аппаратного обеспечения: Чтобы обеспечить работу Milvus в различных аппаратных средах, мы оптимизировали ее производительность специально для многих аппаратных архитектур и платформ, включая AVX512, SIMD, GPU и NVMe SSD.

Передовые алгоритмы поиска: Milvus поддерживает широкий спектр алгоритмов индексации/поиска в памяти и на диске, включая IVF, HNSW, DiskANN и другие, и все они были глубоко оптимизированы. По сравнению с такими популярными реализациями, как FAISS и HNSWLib, Milvus обеспечивает производительность на 30-70 % выше.

Поисковая система на C++: Более 80 % производительности векторной базы данных определяется ее поисковой системой. Milvus использует C++ для этого критически важного компонента благодаря высокой производительности, низкоуровневой оптимизации и эффективному управлению ресурсами. Что особенно важно, Milvus интегрирует многочисленные оптимизации кода с учетом аппаратного обеспечения, начиная с векторизации на уровне ассемблера и заканчивая многопоточным распараллеливанием и планированием, чтобы полностью использовать возможности оборудования.

Ориентированность на столбцы: Milvus - это векторная система баз данных, ориентированная на столбцы. Основные преимущества заключаются в шаблонах доступа к данным. При выполнении запросов база данных, ориентированная на столбцы, считывает только конкретные поля, участвующие в запросе, а не целые строки, что значительно сокращает объем обрабатываемых данных. Кроме того, операции над данными в столбцах могут быть легко векторизованы, что позволяет применять операции сразу ко всем столбцам, что еще больше повышает производительность.

Что делает Milvus таким масштабируемым

В 2022 году Milvus поддерживал миллиардные векторы, а в 2023 году - десятки миллиардов с неизменной стабильностью, обеспечивая работу масштабных сценариев для более чем 300 крупных предприятий, включая Salesforce, PayPal, Shopee, Airbnb, eBay, NVIDIA, IBM, AT&T, LINE, ROBLOX, Inflection и др.

Облачная нативная архитектура Milvus с высокой степенью развязки обеспечивает непрерывное расширение системы по мере роста данных:

Highly decoupled system architecture of Milvus Архитектура системы Milvus с высокой степенью разделения

Сама система Milvus полностью статична, поэтому ее можно легко масштабировать с помощью Kubernetes или публичных облаков. Кроме того, компоненты Milvus хорошо развязаны, а три наиболее важные задачи - поиск, вставка данных и индексирование/уплотнение - спроектированы как легко распараллеливаемые процессы с разделенной сложной логикой. Это гарантирует, что соответствующий узел запроса, узел данных и узел индекса могут масштабироваться как вверх, так и вниз независимо друг от друга, оптимизируя производительность и экономическую эффективность.

Типы поиска, поддерживаемые Milvus

Milvus поддерживает различные типы поисковых функций для удовлетворения требований различных сценариев использования:

  • ANN Search: Находит K векторов, наиболее близких к вектору вашего запроса.
  • Фильтрующий поиск: Выполняет ANN-поиск при заданных условиях фильтрации.
  • Поиск в диапазоне: Находит векторы в заданном радиусе от вектора запроса.
  • Гибридный поиск: Проводит ANN-поиск на основе нескольких векторных полей.
  • Полнотекстовый поиск: Полнотекстовый поиск на основе BM25.
  • Реранжирование: Корректирует порядок результатов поиска на основе дополнительных критериев или вторичного алгоритма, уточняя первоначальные результаты ANN-поиска.
  • Fetch (поиск): Получение данных по их первичным ключам.
  • Запрос: Получение данных с помощью определенных выражений.

Широкий набор функций

В дополнение к ключевым функциям поиска, упомянутым выше, Milvus также предоставляет набор функций, реализованных вокруг ANN-поиска, чтобы вы могли полностью использовать его возможности.

API и SDK

  • RESTful API (официальный)
  • PyMilvus (Python SDK) (официальный)
  • Go SDK (официальный)
  • Java SDK (официальный)
  • Node.js (JavaScript) SDK (официальный)
  • C# (предоставлен Microsoft)
  • C++ SDK (официальный)
  • Rust SDK (находится в разработке)

Расширенные типы данных

В дополнение к примитивным типам данных Milvus поддерживает различные расширенные типы данных и соответствующие им метрики расстояния.

Почему Milvus?

  • Высокая производительность в масштабе и высокая доступность

    Milvus имеет распределенную архитектуру, которая разделяет вычисления и хранение данных. Milvus может горизонтально масштабироваться и адаптироваться к различным моделям трафика, достигая оптимальной производительности за счет независимого увеличения узлов запросов для работы с большими объемами чтения и узлов данных для работы с большими объемами записи. Микросервисы K8s, не имеющие статического характера, позволяют быстро восстанавливаться после сбоев, обеспечивая высокую доступность. Поддержка реплик еще больше повышает отказоустойчивость и пропускную способность за счет загрузки сегментов данных на несколько узлов запросов. Сравнение производительности см. в бенчмарке.

  • Поддержка различных типов векторных индексов и аппаратное ускорение

    Milvus разделяет систему и основной механизм векторного поиска, что позволяет ему поддерживать все основные типы векторных индексов, оптимизированные для различных сценариев, включая HNSW, IVF, FLAT (грубая сила), SCANN и DiskANN, с вариациями на основе квантования и mmap. Milvus оптимизирует векторный поиск для таких расширенных возможностей, как фильтрация метаданных и поиск по диапазону. Кроме того, Milvus реализует аппаратное ускорение для повышения производительности векторного поиска и поддерживает индексирование на GPU, например, CAGRA от NVIDIA.

  • Гибкая многопользовательская поддержка и горячее/холодное хранение

    Milvus поддерживает многопользовательскую работу за счет изоляции на уровне баз данных, коллекций, разделов или ключей разделов. Гибкие стратегии позволяют одному кластеру обслуживать от сотен до миллионов арендаторов, а также обеспечивают оптимизированную производительность поиска и гибкий контроль доступа. Milvus повышает экономическую эффективность за счет горячего/холодного хранения. Часто используемые горячие данные могут храниться в памяти или на твердотельных накопителях для повышения производительности, в то время как менее часто используемые холодные данные хранятся в более медленных и экономичных хранилищах. Этот механизм позволяет значительно сократить расходы, сохраняя высокую производительность для критически важных задач.

  • Разреженный вектор для полнотекстового поиска и гибридного поиска

    Помимо семантического поиска с помощью плотного вектора, Milvus также поддерживает полнотекстовый поиск с помощью BM25, а также обученные разреженные вкрапления, такие как SPLADE и BGE-M3. Пользователи могут хранить разреженный вектор и плотный вектор в одной коллекции и определять функции для ранжирования результатов по нескольким поисковым запросам. Посмотрите примеры гибридного поиска с семантическим поиском + полнотекстовым поиском.

  • Безопасность данных и мелкозернистый контроль доступа

    Milvus обеспечивает безопасность данных за счет обязательной аутентификации пользователей, шифрования TLS и управления доступом на основе ролей (RBAC). Аутентификация пользователей гарантирует, что только авторизованные пользователи с действительными учетными данными могут получить доступ к базе данных, а шифрование TLS защищает все коммуникации в сети. Кроме того, RBAC позволяет осуществлять тонкий контроль доступа, назначая пользователям определенные разрешения в соответствии с их ролями. Эти функции делают Milvus надежным и безопасным выбором для корпоративных приложений, защищая конфиденциальные данные от несанкционированного доступа и возможных утечек.

Интеграции искусственного интеллекта

  • Интеграции с моделями встраивания Модели встраивания преобразуют неструктурированные данные в их числовое представление в высокоразмерном пространстве данных, чтобы вы могли хранить их в Milvus. В настоящее время PyMilvus, SDK для Python, интегрирует несколько моделей встраивания, чтобы вы могли быстро подготовить свои данные к векторным встраиваниям. Подробнее см. в разделе Обзор встраивания.

  • Интеграция моделей реранжирования В сфере информационного поиска и генеративного ИИ реранжировщик является важным инструментом, который оптимизирует порядок результатов первоначального поиска. PyMilvus также интегрирует несколько моделей реранкинга для оптимизации порядка результатов, возвращаемых при первоначальном поиске. Подробнее см. в разделе Обзор реранкеров.

  • LangChain и другие интеграции с инструментами искусственного интеллекта В эпоху GenAI такие инструменты, как LangChain, привлекают большое внимание разработчиков приложений. Как основной компонент, Milvus обычно служит хранилищем векторов в таких инструментах. Чтобы узнать, как интегрировать Milvus в ваши любимые инструменты искусственного интеллекта, обратитесь к нашим разделам "Интеграции" и "Учебники".

Инструменты и экосистема

  • Attu Attu - это универсальный интуитивно понятный графический интерфейс, который поможет вам управлять Milvus и данными, которые он хранит. Подробности см. в репозитории Attu.

  • Birdwatcher Birdwatcher - это отладочный инструмент для Milvus. Используя его для подключения к etcd, вы можете проверять состояние системы Milvus или настраивать ее на лету. Для получения подробной информации обратитесь к разделу BirdWatcher.

  • Интеграции Promethus и Grafana Prometheus - это набор инструментов для мониторинга и оповещения систем Kubernetes с открытым исходным кодом. Grafana - это стек визуализации с открытым исходным кодом, который может подключаться ко всем источникам данных. Вы можете использовать Promethus и Grafana в качестве поставщика услуг мониторинга для визуального контроля производительности распределенного Milvus. Подробнее см. в разделе Развертывание служб мониторинга.

  • Milvus Backup Milvus Backup - это инструмент, позволяющий пользователям создавать резервные копии и восстанавливать данные Milvus. Он предоставляет как CLI, так и API, чтобы вписаться в различные сценарии применения. Более подробную информацию см. в разделе Milvus Backup.

  • Milvus Capture Data Change (CDC) Milvus-CDC может захватывать и синхронизировать инкрементные данные в экземплярах Milvus и обеспечивает надежность бизнес-данных, беспрепятственно перенося их между исходным и целевым экземплярами, что позволяет легко выполнять инкрементное резервное копирование и аварийное восстановление. Подробную информацию см. в разделе Milvus CDC.

  • Коннекторы Milvus Компания Milvus разработала набор коннекторов, позволяющих легко интегрировать Milvus со сторонними инструментами, такими как Apache Spark. В настоящее время вы можете использовать наш коннектор Spark для передачи данных Milvus в Apache Spark для машинного обучения. Подробности см. в разделе Spark-Milvus Connector.

  • Vector Transmission Services (VTS) Milvus предоставляет набор инструментов для передачи данных между экземпляром Milvus и множеством источников данных, включая кластеры Zilliz, Elasticsearch, Postgres (PgVector) и другой экземпляр Milvus. Подробности см. в разделе VTS.