Как начать работу с Milvus
Как начать работу с Milvus
Последнее обновление - январь 2025 года
Развитие больших языковых моделей(LLM) и растущий объем данных требуют гибкой и масштабируемой инфраструктуры для хранения огромных объемов информации, такой как база данных. Однако традиционные базы данных предназначены для хранения табличных и структурированных данных, в то время как информация, обычно полезная для использования возможностей сложных LLM и алгоритмов поиска информации, является неструктурированной, такой как текст, изображения, видео или аудио.
Векторные базы данных - это системы баз данных, специально разработанные для неструктурированных данных. Векторные базы данных позволяют не только хранить огромные объемы неструктурированных данных, но и выполнять в них векторный поиск. Векторные базы данных используют передовые методы индексирования, такие как Inverted File Index (IVFFlat) или Hierarchical Navigable Small World(HNSW), для быстрого и эффективного векторного поиска и извлечения информации.
Milvus - это векторная база данных с открытым исходным кодом, которую мы можем использовать, чтобы задействовать все полезные функции, которые может предложить векторная база данных. Вот что мы рассмотрим в этом посте:
Что такое Milvus?
Milvus - это векторная база данных с открытым исходным кодом, которая позволяет нам хранить огромные объемы неструктурированных данных и выполнять быстрый и эффективный векторный поиск по ним. Milvus очень полезен для многих популярных приложений GenAI, таких как рекомендательные системы, персонализированные чат-боты, обнаружение аномалий, поиск изображений, обработка естественного языка и поиск с расширенной генерацией(RAG).
Использование Milvus в качестве векторной базы данных дает ряд преимуществ:
Milvus предлагает несколько вариантов развертывания, которые вы можете выбрать в зависимости от вашего сценария использования и размера приложений, которые вы хотите создать.
Milvus поддерживает разнообразные методы индексирования для удовлетворения различных потребностей в данных и производительности, включая варианты in-memory, такие как FLAT, IVFFlat, HNSW и SCANN, квантованные варианты для эффективности использования памяти, DiskANN на диске для больших наборов данных и оптимизированные для GPU индексы, такие как GPU_CAGRA, GPU_IVF_FLAT и GPU_IVF_PQ для ускоренного поиска с экономией памяти.
Milvus также предлагает гибридный поиск, в котором мы можем использовать комбинацию плотных вкраплений, разреженных вкраплений и фильтрации метаданных во время операций векторного поиска, что приводит к более точным результатам поиска. Кроме того, Milvus 2.5 теперь поддерживает гибрид полнотекстового и векторного поиска, что делает поиск еще более точным.
Milvus можно полностью использовать в облаке через Zilliz Cloud, где вы можете оптимизировать эксплуатационные расходы и скорость векторного поиска благодаря четырем передовым функциям: логические кластеры, дезагрегация потоковых и исторических данных, многоуровневое хранение, автомасштабирование и разделение горячей и холодной многопользовательской лицензии.
При использовании Milvus в качестве векторной базы данных вы можете выбрать три варианта развертывания, каждый из которых имеет свои преимущества и достоинства. Мы поговорим о каждом из них в следующем разделе.
Варианты развертывания Milvus
Для начала использования Milvus мы можем выбрать один из четырех вариантов развертывания: Milvus Lite, Milvus Standalone, Milvus Distributed и Zilliz Cloud (управляемый Milvus). Каждый вариант развертывания разработан с учетом различных сценариев использования, таких как объем данных, цель приложения и масштаб приложения.
Milvus Lite
Milvus Lite - это облегченная версия Milvus и самый простой способ начать работу. В следующем разделе мы увидим, как запустить Milvus Lite в действии, а для начала нам нужно лишь установить библиотеку Pymilvus с помощью pip. После этого мы сможем выполнять большинство основных функций Milvus как векторной базы данных.
Milvus Lite идеально подходит для быстрого создания прототипов или обучения и может быть запущен в Jupyter-блокноте без каких-либо сложных настроек. Что касается хранения векторов, то Milvus Lite подходит для хранения примерно миллиона векторных вкраплений. Благодаря своей легкости и объему памяти Milvus Lite является идеальным вариантом развертывания для работы с пограничными устройствами, такими как система поиска частных документов, обнаружение объектов на устройстве и т. д.
Milvus Standalone
Milvus Standalone - это развертывание сервера на одной машине, упакованное в образ Docker. Поэтому все, что нам нужно для начала работы, - это установить Milvus в Docker, а затем запустить Docker-контейнер. Подробную реализацию Milvus Standalone мы также рассмотрим в следующем разделе.
Milvus Standalone идеально подходит для создания и производства приложений малого и среднего масштаба, поскольку он способен хранить до 10 миллионов векторных вкраплений. Кроме того, Milvus Standalone обеспечивает высокую доступность благодаря режиму основного резервного копирования, что делает его очень надежным для использования в готовых к производству приложениях.
Мы также можем использовать Milvus Standalone, например, после быстрого прототипирования и изучения функциональности Milvus с помощью Milvus Lite, поскольку и Milvus Standalone, и Milvus Lite используют один и тот же клиентский API.
Milvus Distributed
Milvus Distributed - это вариант развертывания, использующий облачную архитектуру, в которой забор и получение данных осуществляются отдельно, что позволяет создать высокомасштабируемое и эффективное приложение.
Для запуска Milvus Distributed обычно используется кластер Kubernetes, позволяющий контейнеру работать на нескольких машинах и в разных средах. Использование кластера Kubernetes обеспечивает масштабируемость и гибкость Milvus Distributed, позволяя настраивать выделенные ресурсы в зависимости от спроса и рабочей нагрузки. Это также означает, что в случае сбоя одной части другие могут взять на себя ее функции, обеспечивая бесперебойную работу всей системы.
Milvus Distributed способна обрабатывать до десятков миллиардов векторных вкраплений и специально разработана для случаев, когда данные слишком велики для хранения на одной серверной машине. Поэтому этот вариант развертывания идеально подходит для корпоративных клиентов, обслуживающих большую базу пользователей.
Рисунок: Возможности хранения векторного встраивания в различных вариантах развертывания Milvus.
В этой статье мы покажем вам, как начать работу с Milvus Lite и Milvus Standalone, поскольку вы можете быстро приступить к работе с обоими методами без сложных настроек. Однако Milvus Distributed более сложен в настройке. Как только мы настроим Milvus Distributed, код и логический процесс создания коллекций, получения данных, выполнения векторного поиска и т. д. будут аналогичны Milvus Lite и Milvus Standalone, поскольку они используют один и тот же API на стороне клиента.
Помимо трех вышеупомянутых вариантов развертывания, вы также можете попробовать управляемый Milvus в облаке Zilliz Cloud, что позволит вам без лишних хлопот использовать его. О Zilliz Cloud мы также расскажем далее в этой статье.
Начало работы с Milvus Lite
Milvus Lite можно сразу же реализовать на Python, импортировав библиотеку под названием Pymilvus с помощью pip. Перед установкой Pymilvus убедитесь, что ваше окружение соответствует следующим требованиям:
Ubuntu >= 20.04 (x86_64 и arm64)
MacOS >= 11.0 (Apple Silicon M1/M2 и x86_64)
Python 3.7 или более поздняя версия
После выполнения этих требований вы можете установить Milvus Lite и необходимые зависимости для демонстрации, используя следующую команду:
!pip install -U pymilvus
!pip install "pymilvus[model]"
!pip install -U pymilvus
: Эта команда устанавливает или обновляет библиотекуpymilvus
, Python SDK для Milvus. Milvus Lite поставляется в комплекте с PyMilvus, поэтому для установки Milvus Lite достаточно одной строки кода.!pip install "pymilvus[model]"
: Эта команда добавляет расширенные возможности и дополнительные инструменты, предварительно интегрированные с Milvus, включая модели машинного обучения, такие как Hugging Face Transformers, модели встраивания Jina AI и модели повторного ранжирования.
Вот шаги, которые мы будем выполнять с Milvus Lite:
Преобразуйте текстовые данные в их представление с помощью модели встраивания.
Создайте схему в базе данных Milvus для хранения наших текстовых данных и их встраиваемых представлений.
Храните и индексируйте наши данные в нашей схеме.
Выполните простой векторный поиск по сохраненным данным.
Рисунок: Рабочий процесс операции векторного поиска.
Для преобразования текстовых данных в векторные вкрапления мы будем использовать модель вкрапления из SentenceTransformers под названием 'all-MiniLM-L6-v2'. Эта модель встраивания преобразует наш текст в 384-мерный векторный эмбеддинг. Давайте загрузим модель, преобразуем наши текстовые данные и упакуем все вместе.
from pymilvus import model
docs = [
"Artificial intelligence was founded as an academic discipline in 1956.",
"Alan Turing was the first person to conduct substantial research in AI.",
"Born in Maida Vale, London, Turing was raised in southern England.",
]
sentence_transformer_ef = model.dense.SentenceTransformerEmbeddingFunction(
model_name='all-MiniLM-L6-v2',
device='cpu'
)
vectors = sentence_transformer_ef.encode_documents(docs)
data = [ {"id": i, "vector": vectors[i], "text": docs[i]} for i in range(len(vectors)) ]
Затем создадим схему для хранения всех вышеперечисленных данных в Milvus. Как вы можете видеть выше, наши данные состоят из трех полей: ID, вектор и текст. Поэтому мы создадим схему с этими тремя полями.
from pymilvus import MilvusClient, DataType, db, connections
schema = MilvusClient.create_schema(
auto_id=False,
enable_dynamic_field=True,
)
# Add fields to schema
schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True)
schema.add_field(field_name="vector", datatype=DataType.FLOAT_VECTOR, dim=384)
schema.add_field(field_name="text", datatype=DataType.VARCHAR, max_length=512)
С помощью Milvus Lite мы можем легко создать коллекцию в определенной базе данных на основе схемы, определенной выше, а также вставить и проиндексировать данные в коллекцию всего за несколько строк кода.
client = MilvusClient("./milvus_demo.db")
index_params = client.prepare_index_params()
# Add indexes
index_params.add_index(
field_name="vector",
index_type="AUTOINDEX",
metric_type="COSINE"
)
# Create collection
client.create_collection(
collection_name="demo_collection",
schema=schema,
index_params=index_params
)
# Insert data into collection
res = client.insert(
collection_name="demo_collection",
data=data
)
В приведенном выше коде мы создаем коллекцию под названием "demo_collection" в базе данных Milvus под названием "milvus_demo". Затем мы индексируем все наши данные в только что созданную коллекцию "demo_collection".
Теперь, когда наши данные находятся в базе данных, мы можем выполнить векторный поиск по ним для любого запроса. Допустим, у нас есть запрос: "Кто такой Алан Тьюринг?". Мы можем получить наиболее подходящий ответ на этот запрос, выполнив следующие шаги:
Преобразуйте наш запрос в векторное вложение с помощью той же модели вложения, которую мы использовали для преобразования данных в базе данных в вложения.
Вычислить сходство между вложением нашего запроса и вложением каждой записи в базе данных, используя такие метрики, как косинусоидальное сходство или евклидово расстояние.
Выбираем наиболее похожую запись как подходящий ответ на наш запрос.
Ниже приведена реализация вышеописанных шагов с помощью Milvus:
query = ["Who is Alan Turing"]
query_embedding = sentence_transformer_ef.encode_queries(query)
# Load collection
client.load_collection(
collection_name="demo_collection"
)
# Vector search
res = client.search(
collection_name="demo_collection",
data=query_embedding,
limit=1,
output_fields=["text"],
)
print(res)
"""
Output:
data: ["[{'id': 1, 'distance': 0.7199002504348755, 'entity': {'text': 'Alan Turing was the first person to conduct substantial research in AI.'}}]"]
"""
Вот и все! Вы также можете узнать больше о других функциональных возможностях Milvus, таких как управление базами данных, вставка и удаление коллекций, выбор правильного метода индексирования и выполнение более сложных векторных поисков с фильтрацией метаданных и гибридным поиском в документации Milvus.
Начало работы с Milvus Standalone
Milvus Standalone - это вариант развертывания, при котором все упаковывается в контейнер Docker. Поэтому нам нужно установить Milvus в Docker, а затем запустить контейнер Docker, чтобы начать работу с Milvus Standalone.
Перед установкой Milvus Standalone убедитесь, что ваше оборудование и программное обеспечение соответствуют требованиям, описанным на этой странице. Кроме того, убедитесь, что вы установили Docker. Чтобы установить Docker, обратитесь к этой странице.
После того как наша система соответствует требованиям и мы установили Docker, мы можем приступить к установке Milvus в Docker с помощью следующей команды:
# Download the installation script
$ curl -sfL <https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh> -o standalone_embed.sh
# Start the Docker container
$ bash standalone_embed.sh start
В приведенном выше коде мы также запускаем контейнер Docker, и после его запуска вы получите результат, аналогичный приведенному ниже:
Рисунок: Сообщение после успешного запуска контейнера Docker.
После выполнения приведенного выше сценария установки "standalone_embed.sh" Docker-контейнер с именем "milvus" запускается на порту 19530. Поэтому мы можем создать новую базу данных, а также получить доступ ко всему, что связано с базой данных Milvus, указав этот порт при создании соединений.
Допустим, мы хотим создать базу данных под названием "milvus_demo", аналогично тому, что мы делали в Milvus Lite выше. Мы можем сделать это следующим образом:
conn = connections.connect(host="127.0.0.1", port=19530)
database = db.create_database("milvus_demo")
client = MilvusClient(
uri="<http://localhost:19530>",
token="root:Milvus",
db_name="milvus_demo"
)
Далее вы можете проверить, действительно ли только что созданная база данных под названием "milvus_demo" существует в вашем экземпляре Milvus, обратившись к веб-интерфейсу Milvus. Как следует из названия, Milvus Web UI - это графический пользовательский интерфейс, предоставляемый Milvus для наблюдения за статистикой и метриками компонентов, проверки списка и деталей баз данных, коллекций и конфигураций. Вы можете получить доступ к Milvus Web UI после запуска Docker-контейнера по ссылке http://127.0.0.1:9091/webui/.
Если вы перейдете по указанной выше ссылке, то увидите вот такую целевую страницу:
На вкладке "Коллекции" вы увидите, что наша база данных "milvus_demo" была успешно создана. Как видите, с помощью этого веб-интерфейса можно проверить и другие вещи, такие как список коллекций, конфигураций, выполненных запросов и т. д.
Теперь мы можем выполнить все точно так же, как мы видели в разделе Milvus Lite выше. Создадим коллекцию под названием "demo_collection" в базе данных "milvus_demo", состоящую из трех полей, таких же, как в разделе Milvus Lite. Затем мы вставим наши данные в коллекцию.
index_params = client.prepare_index_params()
# Add indexes
index_params.add_index(
field_name="vector",
index_type="AUTOINDEX",
metric_type="COSINE"
)
# Create collection
client.create_collection(
collection_name="demo_collection",
schema=schema,
index_params=index_params
)
# Insert data into collection
res = client.insert(
collection_name="demo_collection",
data=data
)
Код для выполнения операции векторного поиска также аналогичен Milvus Lite, как вы можете видеть в приведенном ниже коде:
query = ["Who is Alan Turing"]
query_embedding = sentence_transformer_ef.encode_queries(query)
# Load collection
client.load_collection(
collection_name="demo_collection"
)
# Vector search
res = client.search(
collection_name="demo_collection",
data=query_embedding,
limit=1,
output_fields=["text"],
)
print(res)
"""
Output:
data: ["[{'id': 1, 'distance': 0.7199004292488098, 'entity': {'text': 'Alan Turing was the first person to conduct substantial research in AI.'}}]"]
"""
Помимо использования Docker, вы также можете использовать Milvus Standalone с помощью Docker Compose (для Linux) и Docker Desktop (для Windows).
Когда мы больше не используем наш экземпляр Milvus, мы можем остановить Milvus Standalone с помощью следующей команды:
$ bash standalone_embed.sh stop
Fully Managed Milvus
Альтернативным способом начать работу с Milvus является использование собственной облачной инфраструктуры в Zilliz Cloud, где вы сможете работать без лишних хлопот и в 10 раз быстрее.
Zilliz Cloud предлагает выделенные кластеры со специальными средами и ресурсами для поддержки вашего приложения искусственного интеллекта. Поскольку это облачная база данных, построенная на Milvus, нам не нужно настраивать и управлять локальной инфраструктурой. Zilliz Cloud также предоставляет более продвинутые функции, такие как разделение векторного хранения и вычислений, резервное копирование данных в популярные системы хранения объектов, такие как S3, и кэширование данных для ускорения операций векторного поиска и извлечения.
Однако при выборе облачных сервисов следует учитывать эксплуатационные расходы. В большинстве случаев нам приходится платить даже тогда, когда кластер простаивает, не принимая данных и не выполняя векторного поиска. Если вы хотите еще больше оптимизировать эксплуатационные расходы и производительность вашего приложения, Zilliz Cloud Serverless станет отличным вариантом.
Рисунок: Основные преимущества использования Zilliz Cloud Serverless.
Zilliz Cloud Serverless доступен у основных облачных провайдеров, таких как AWS, Azure и GCP. Он предлагает такие функции, как оплата по факту использования, то есть вы платите только тогда, когда используете кластер.
В Zilliz Cloud Serverless также реализованы такие передовые технологии, как логические кластеры, автомасштабирование, многоуровневое хранение, дезагрегация потоковых и исторических данных, а также разделение данных по принципу "горячий-холодный". Эти функции позволяют Zilliz Cloud Serverless добиться 50-кратной экономии средств и примерно 10-кратного ускорения операций векторного поиска по сравнению с in-memory Milvus.
Рисунок: Иллюстрация многоуровневого хранения и разделения данных "горячий-холодный".
Если вы хотите начать работу с Zilliz Cloud Serverless, посетите эту страницу для получения дополнительной информации.
Заключение
Milvus - это универсальная и мощная векторная база данных, созданная для решения задач управления неструктурированными данными и выполнения быстрых и эффективных операций векторного поиска в современных приложениях искусственного интеллекта. Благодаря таким вариантам развертывания, как Milvus Lite для быстрого создания прототипов, Milvus Standalone для приложений малого и среднего масштаба и Milvus Distributed для масштабирования на уровне предприятия, он обеспечивает гибкость, соответствующую размеру и сложности любого проекта.
Кроме того, Zilliz Cloud Serverless расширяет возможности Milvus в облако и обеспечивает экономически эффективную модель с оплатой по факту использования, которая устраняет необходимость в локальной инфраструктуре. Благодаря таким передовым функциям, как многоуровневое хранение и автоматическое масштабирование, Zilliz Cloud Serverless обеспечивает ускорение операций векторного поиска при оптимизации затрат.
- Что такое Milvus?
- Варианты развертывания Milvus
- Начало работы с Milvus Lite
- Начало работы с Milvus Standalone
- Fully Managed Milvus
- Заключение
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word