Primeros pasos con Milvus cluster y K8s
Introducción
Milvus es una base de datos vectorial distribuida cuyo objetivo es almacenar, indexar y gestionar vectores de incrustación masiva. Su capacidad para indexar y buscar eficientemente entre billones de vectores convierte a Milvus en la opción preferida para las cargas de trabajo de IA y aprendizaje automático.
Kubernetes (K8s), por su parte, destaca en la gestión y escalado de aplicaciones en contenedores. Proporciona funciones como autoescalado, autorreparación y equilibrio de carga, que son cruciales para mantener una alta disponibilidad y rendimiento en entornos de producción.
¿Por qué utilizarlos juntos?
K8s puede escalar automáticamente los clústeres Milvus en función de la carga de trabajo. A medida que crecen sus datos o aumenta el número de consultas, K8s puede hacer girar más instancias de Milvus para manejar la carga, garantizando que sus aplicaciones sigan respondiendo.
Una de las características más destacadas de K8s es su escalado horizontal, que hace que la ampliación de su clúster Milvus sea pan comido. A medida que crece su conjunto de datos, K8s se adapta sin esfuerzo a este crecimiento, lo que lo convierte en una solución sencilla y eficiente.
Además, la capacidad de gestionar consultas también se escala horizontalmente con K8s. A medida que aumenta la carga de consultas, K8s puede desplegar más instancias de Milvus para gestionar el aumento de consultas de búsqueda de similitud, garantizando respuestas de baja latencia incluso con cargas elevadas.
Requisitos previos y configuración de K8s
Requisitos previos
Docker - Asegúrese de que Docker está instalado en su sistema.
Kubernetes - Tenga listo un clúster Kubernetes. Puede utilizar
minikube
para el desarrollo local o el servicio Kubernetes de un proveedor en la nube para entornos de producción.Helm - Instala Helm, un gestor de paquetes para Kubernetes, para ayudarte a gestionar aplicaciones Kubernetes, puedes consultar nuestra documentación para ver cómo hacerlo https://milvus.io/docs/install_cluster-helm.md.
Kubectl - Instale
kubectl
, una herramienta de línea de comandos para interactuar con los clústeres Kubernetes, para desplegar aplicaciones, inspeccionar y gestionar los recursos del clúster, y ver los registros.
Configuración de K8s
Después de instalar todo lo necesario para ejecutar un clúster K8s, y si utilizó minikube
, inicie su clúster con:
minikube start
Compruebe el estado de su cluster K8s con:
kubectl cluster-info
Desplegando Milvus en K8s
Para este despliegue, estamos optando por Milvus en modo cluster para aprovechar todas sus capacidades distribuidas. Utilizaremos Helm para agilizar el proceso de instalación.
1. Comando de instalación Helm
helm install my-milvus milvus/milvus --set pulsar.enabled=false --set kafka.enabled=true
Este comando instala Milvus en su cluster K8s con Kafka habilitado y Pulsar deshabilitado. Kafka sirve como sistema de mensajería dentro de Milvus, manejando el flujo de datos entre los diferentes componentes. Deshabilitar Pulsar y habilitar Kafka adapta el despliegue a nuestras preferencias y requisitos específicos de mensajería.
2. Reenvío de puertos
Para acceder a Milvus desde su máquina local, cree un reenvío de puerto: kubectl port-forward svc/my-milvus 27017:19530
.
Este comando asigna el puerto 19530
del servicio Milvus svc/my-milvus
al mismo puerto en su máquina local, permitiéndole conectarse a Milvus utilizando herramientas locales. Si deja el puerto local sin especificar (como en :19530
), K8s asignará un puerto disponible, haciéndolo dinámico. Asegúrese de anotar el puerto local asignado si elige este método.
3. Verificación del despliegue:
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
Debería ver una lista de pods similar a la salida anterior, todos en estado Running. Esto indica que su cluster Milvus está operativo. En concreto, busque el 1/1 bajo la columna READY
, que significa que cada pod está totalmente listo y en ejecución. Si alguno de los pods no está en estado de ejecución, es posible que tenga que investigar más a fondo para garantizar un despliegue correcto.
Con su clúster Milvus desplegado y todos los componentes confirmados en ejecución, ya está listo para proceder a la ingestión e indexación de datos. Esto implicará conectarse a su instancia Milvus, crear colecciones e insertar vectores para búsqueda y recuperación.
Ingesta e indexación de datos
Para comenzar la ingesta e indexación de datos en nuestro cluster Milvus, utilizaremos el SDK pymilvus. Hay dos opciones de instalación:
SDK básico:
pip install pymilvus
Para incrustaciones de texto enriquecido y modelos avanzados:
pip install pymilvus[model]
A la hora de insertar datos en nuestro cluster, usaremos pymilvus
, puedes instalar el SDK sólo con pip install pymilvus
o si quieres extraer rich text embeddings, también puedes usar PyMilvus Models
instalando pip install pymilvus[model]
.
Conexión y creación de una colección:
En primer lugar, conéctese a su instancia de Milvus utilizando el puerto que reenvió anteriormente. Asegúrese de que el URI coincide con el puerto local asignado por K8s:
from pymilvus import MilvusClient
client = MilvusClient(
uri="http://127.0.0.1:52070",
)
client.create_collection(collection_name="quick_setup", dimension=5)
El parámetro dimension=5
define el tamaño del vector para esta colección, esencial para las capacidades de búsqueda de vectores.
Insertar datos
A continuación se muestra cómo insertar un conjunto inicial de datos, donde cada vector representa un elemento, y el campo de color añade un atributo descriptivo:
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)
El código proporcionado asume que usted ha creado una colección de la manera de Configuración Rápida. Como se muestra en el código anterior,
Los datos a insertar se organizan en una lista de diccionarios, donde cada diccionario representa un registro de datos, denominado como entidad.
Cada diccionario contiene un campo no definido por el esquema denominado color.
Cada diccionario contiene las claves correspondientes a los campos predefinidos y dinámicos.
Insertar aún más datos
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)
Búsqueda por similitud
Después de rellenar la colección, puede realizar una búsqueda por similitud para encontrar vectores cercanos a un vector de consulta. El valor de la variable query_vectors es una lista que contiene una sublista de floats. La sublista representa una incrustación vectorial de 5 dimensiones.
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)
Esta consulta busca los 3 vectores más similares a nuestro vector de consulta, demostrando las potentes capacidades de búsqueda de Milvus.
Desinstalar Milvus de K8s
Una vez que haya terminado con este tutorial, no dude en desinstalar Milvus de su cluster K8s con:helm uninstall my-milvus
.
Este comando eliminará todos los componentes de Milvus desplegados en la versión my-milvus
, liberando recursos del cluster.
Conclusión
El despliegue de Milvus en un clúster Kubernetes muestra la escalabilidad y flexibilidad de las bases de datos vectoriales en el manejo de cargas de trabajo de IA y aprendizaje automático. A través de este tutorial, usted ha aprendido los conceptos básicos de la configuración de Milvus con Helm, la creación de una colección, y la realización de la ingestión de datos y búsquedas de similitud.
Instalar Milvus en un clúster Kubernetes con Helm debería ser sencillo. Para profundizar en el escalado de clusters Milvus para grandes conjuntos de datos o cargas de trabajo más intensivas, nuestra documentación ofrece una guía detallada https://milvus.io/docs/scaleout.md
Siéntase libre de revisar el código en Github, revise Milvus, experimente con diferentes configuraciones y casos de uso, y comparta sus experiencias con la comunidad uniéndose a nuestro Discord.
- Introducción
- ¿Por qué utilizarlos juntos?
- Requisitos previos y configuración de K8s
- Ingesta e indexación de datos
- Búsqueda por similitud
- Desinstalar Milvus de K8s
- Conclusión
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