Начало работы с кластером Milvus и K8s
Введение
Milvus - это распределенная векторная база данных, предназначенная для хранения, индексации и управления массивными векторами встраивания. Способность эффективно индексировать и искать в триллионах векторов делает Milvus лучшим выбором для рабочих нагрузок искусственного интеллекта и машинного обучения.
Kubernetes (K8s), с другой стороны, отлично подходит для управления и масштабирования контейнерных приложений. Он предоставляет такие функции, как автомасштабирование, самовосстановление и балансировка нагрузки, которые крайне важны для поддержания высокой доступности и производительности в производственных средах.
Зачем использовать их вместе?
K8s может автоматически масштабировать кластеры Milvus в зависимости от рабочей нагрузки. По мере роста данных или увеличения количества запросов K8s может запустить больше экземпляров Milvus, чтобы справиться с нагрузкой, обеспечивая высокую скорость работы приложений.
Одной из отличительных особенностей K8s является горизонтальное масштабирование, которое позволяет легко расширять кластер Milvus. По мере роста вашего массива данных K8s легко справляется с этим ростом, что делает его простым и эффективным решением.
Кроме того, способность обрабатывать запросы также масштабируется горизонтально с помощью K8s. При увеличении нагрузки на запросы K8s может развернуть больше экземпляров Milvus для обработки возросших запросов на поиск сходства, обеспечивая низкую задержку ответов даже при высокой нагрузке.
Необходимые условия и настройка K8s
Необходимые условия
Docker - убедитесь, что Docker установлен в вашей системе.
Kubernetes - подготовьте кластер Kubernetes. Вы можете использовать
minikube
для локальной разработки или облачный сервис Kubernetes провайдера для производственных сред.Helm - Установите Helm, менеджер пакетов для Kubernetes, чтобы помочь вам управлять приложениями Kubernetes. Вы можете посмотреть нашу документацию, чтобы узнать, как это сделать https://milvus.io/docs/install_cluster-helm.md.
Kubectl - Установите
kubectl
, инструмент командной строки для взаимодействия с кластерами Kubernetes, чтобы развертывать приложения, проверять и управлять ресурсами кластера, а также просматривать журналы.
Настройка K8s
После установки всего необходимого для работы кластера K8s и если вы использовали minikube
, запустите кластер:
minikube start
Проверьте состояние кластера K8s с помощью:
kubectl cluster-info
Развертывание Milvus на K8s
Для этого развертывания мы выбираем Milvus в кластерном режиме, чтобы использовать все его распределенные возможности. Мы будем использовать Helm, чтобы упростить процесс установки.
1. Команда установки Helm
helm install my-milvus milvus/milvus --set pulsar.enabled=false --set kafka.enabled=true
Эта команда устанавливает Milvus на ваш кластер K8s с включенной Kafka и отключенным Pulsar. Kafka служит системой обмена сообщениями в Milvus, обеспечивая потоковую передачу данных между различными компонентами. Отключение Pulsar и включение Kafka позволяет адаптировать развертывание к нашим конкретным предпочтениям и требованиям к обмену сообщениями.
2. Переадресация портов
Чтобы получить доступ к Milvus с локальной машины, создайте проброс портов: kubectl port-forward svc/my-milvus 27017:19530
.
Эта команда прописывает порт 19530
службы Milvus svc/my-milvus
на тот же порт на вашей локальной машине, что позволяет вам подключаться к Milvus с помощью локальных инструментов. Если вы оставите локальный порт неуказанным (как в :19530
), K8s выделит доступный порт, сделав его динамическим. Убедитесь, что вы отметили выделенный локальный порт, если вы выбрали этот метод.
3. Проверка развертывания:
kubectl get pods
NAME READY STATUS RESTARTS AGE
my-milvus-datacoord-595b996bd4-zprpd 1/1 Running 0 85m
my-milvus-datanode-d9d555785-47nkt 1/1 Running 0 85m
my-milvus-etcd-0 1/1 Running 0 84m
my-milvus-etcd-1 1/1 Running 0 85m
my-milvus-etcd-2 1/1 Running 0 85m
my-milvus-indexcoord-65bc68968c-6jg6q 1/1 Running 0 85m
my-milvus-indexnode-54586f55d-z9vx4 1/1 Running 0 85m
my-milvus-kafka-0 1/1 Running 0 85m
my-milvus-kafka-1 1/1 Running 0 85m
my-milvus-kafka-2 1/1 Running 0 85m
my-milvus-minio-0 1/1 Running 0 96m
my-milvus-minio-1 1/1 Running 0 96m
my-milvus-minio-2 1/1 Running 0 96m
my-milvus-minio-3 1/1 Running 0 96m
my-milvus-proxy-76bb7d497f-sqwvd 1/1 Running 0 85m
my-milvus-querycoord-6f4c7b7598-b6twj 1/1 Running 0 85m
my-milvus-querynode-677bdf485b-ktc6m 1/1 Running 0 85m
my-milvus-rootcoord-7498fddfd8-v5zw8 1/1 Running 0 85m
my-milvus-zookeeper-0 1/1 Running 0 85m
my-milvus-zookeeper-1 1/1 Running 0 85m
my-milvus-zookeeper-2 1/1 Running 0 85m
Вы должны увидеть список стручков, похожий на приведенный выше, все они находятся в состоянии Running. Это означает, что ваш кластер Milvus работает. В частности, ищите 1/1 в столбце READY
, что означает, что каждый стручок полностью готов и запущен. Если какие-либо стручки не находятся в состоянии Running, вам, возможно, потребуется провести дополнительные исследования, чтобы обеспечить успешное развертывание.
После развертывания кластера Milvus и подтверждения работы всех компонентов вы можете приступать к сбору и индексированию данных. Это включает в себя подключение к экземпляру Milvus, создание коллекций и вставку векторов для поиска и извлечения.
Сбор и индексирование данных
Чтобы начать сбор и индексирование данных в нашем кластере Milvus, мы воспользуемся pymilvus SDK. Есть два варианта установки:
Basic SDK:
pip install pymilvus
Для богатых текстовых вкраплений и продвинутых моделей:
pip install pymilvus[model]
Для вставки данных в наш кластер мы будем использовать pymilvus
, вы можете установить SDK только с pip install pymilvus
или, если вы хотите извлечь богатые текстовые вкрапления, вы также можете использовать PyMilvus Models
, установив pip install pymilvus[model]
.
Подключение и создание коллекции:
Сначала подключитесь к экземпляру Milvus, используя порт, который вы пробросили ранее. Убедитесь, что URI совпадает с локальным портом, назначенным K8s:
from pymilvus import MilvusClient
client = MilvusClient(
uri="http://127.0.0.1:52070",
)
client.create_collection(collection_name="quick_setup", dimension=5)
Параметр dimension=5
определяет размер вектора для этой коллекции, что важно для возможностей векторного поиска.
Вставка данных
Вот как вставить начальный набор данных, где каждый вектор представляет элемент, а поле цвета добавляет описательный атрибут:
data=[
{"id": 0, "vector": [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592], "color": "pink_8682"},
{"id": 1, "vector": [0.19886812562848388, 0.06023560599112088, 0.6976963061752597, 0.2614474506242501, 0.838729485096104], "color": "red_7025"},
{"id": 2, "vector": [0.43742130801983836, -0.5597502546264526, 0.6457887650909682, 0.7894058910881185, 0.20785793220625592], "color": "orange_6781"},
{"id": 3, "vector": [0.3172005263489739, 0.9719044792798428, -0.36981146090600725, -0.4860894583077995, 0.95791889146345], "color": "pink_9298"},
{"id": 4, "vector": [0.4452349528804562, -0.8757026943054742, 0.8220779437047674, 0.46406290649483184, 0.30337481143159106], "color": "red_4794"},
{"id": 5, "vector": [0.985825131989184, -0.8144651566660419, 0.6299267002202009, 0.1206906911183383, -0.1446277761879955], "color": "yellow_4222"},
{"id": 6, "vector": [0.8371977790571115, -0.015764369584852833, -0.31062937026679327, -0.562666951622192, -0.8984947637863987], "color": "red_9392"},
{"id": 7, "vector": [-0.33445148015177995, -0.2567135004164067, 0.8987539745369246, 0.9402995886420709, 0.5378064918413052], "color": "grey_8510"},
{"id": 8, "vector": [0.39524717779832685, 0.4000257286739164, -0.5890507376891594, -0.8650502298996872, -0.6140360785406336], "color": "white_9381"},
{"id": 9, "vector": [0.5718280481994695, 0.24070317428066512, -0.3737913482606834, -0.06726932177492717, -0.6980531615588608], "color": "purple_4976"}
]
res = client.insert(
collection_name="quick_setup",
data=data
)
print(res)
Приведенный код предполагает, что вы создали коллекцию способом быстрой настройки. Как показано в приведенном выше коде,
Данные для вставки организованы в список словарей, где каждый словарь представляет собой запись данных, называемую сущностью.
Каждый словарь содержит не определяемое схемой поле с именем color.
Каждый словарь содержит ключи, соответствующие как предопределенным, так и динамическим полям.
Вставка еще большего количества данных
colors = ["green", "blue", "yellow", "red", "black", "white", "purple", "pink", "orange", "brown", "grey"]
data = [ {
"id": i,
"vector": [ random.uniform(-1, 1) for _ in range(5) ],
"color": f"{random.choice(colors)}_{str(random.randint(1000, 9999))}"
} for i in range(1000) ]
res = client.insert(
collection_name="quick_setup",
data=data[10:]
)
print(res)
Поиск по сходству
После заполнения коллекции можно выполнить поиск сходства, чтобы найти векторы, близкие к вектору запроса. Значение переменной query_vectors - это список, содержащий вложенный список плавающих чисел. Подсписок представляет собой векторное вложение 5 измерений.
query_vectors = [
[0.041732933, 0.013779674, -0.027564144, -0.013061441, 0.009748648]
]
res = client.search(
collection_name="quick_setup", # target collection
data=query_vectors, # query vectors
limit=3, # number of returned entities
)
print(res)
Этот запрос ищет 3 вектора, наиболее похожих на вектор нашего запроса, демонстрируя мощные поисковые возможности Milvus.
Удаление Milvus с K8s
После того как вы закончите работу над этим руководством, смело удаляйте Milvus из кластера K8s с помощью команды:helm uninstall my-milvus
.
Эта команда удалит все компоненты Milvus, развернутые в выпуске my-milvus
, освободив ресурсы кластера.
Заключение
Развертывание Milvus на кластере Kubernetes демонстрирует масштабируемость и гибкость векторных баз данных при обработке рабочих нагрузок, связанных с искусственным интеллектом и машинным обучением. Из этого руководства вы узнали об основах настройки Milvus с помощью Helm, создании коллекции, а также о вводе данных и поиске по сходству.
Установка Milvus на кластер Kubernetes с помощью Helm должна быть простой. Чтобы углубиться в масштабирование кластеров Milvus для больших наборов данных или более интенсивных рабочих нагрузок, в нашей документации есть подробное руководство https://milvus.io/docs/scaleout.md.
Не стесняйтесь знакомиться с кодом на Github, проверять Milvus, экспериментировать с различными конфигурациями и сценариями использования, а также делиться своим опытом с сообществом, присоединившись к нашему Discord.
- Введение
- Зачем использовать их вместе?
- Необходимые условия и настройка K8s
- Сбор и индексирование данных
- Поиск по сходству
- Удаление Milvus с K8s
- Заключение
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