Что такое милвус?
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, избавляя вас от необходимости поддерживать несколько систем баз данных.
Неструктурированные данные, вкрапления и 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 с высокой степенью развязки обеспечивает непрерывное расширение системы по мере роста данных:
Архитектура системы 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 поддерживает различные расширенные типы данных и соответствующие им метрики расстояния.
- Разреженные векторы
- Бинарные векторы
- Поддержка JSON
- Поддержка массивов
- Текст (в разработке)
- Геолокация (в разработке)
Почему 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.