Cómo empezar con Milvus
Cómo empezar con Milvus
Última actualización: enero de 2025
Los avances en los grandes modelos lingüísticos (LLM) y el creciente volumen de datos hacen necesaria una infraestructura flexible y escalable para almacenar cantidades masivas de información, como una base de datos. Sin embargo, las bases de datos tradicionales están diseñadas para almacenar datos tabulares y estructurados, mientras que la información que suele ser útil para aprovechar la potencia de los sofisticados LLM y los algoritmos de recuperación de información es no estructurada, como texto, imágenes, vídeos o audio.
Las bases de datos vectoriales son sistemas de bases de datos diseñados específicamente para datos no estructurados. Con las bases de datos vectoriales no sólo podemos almacenar cantidades masivas de datos no estructurados, sino que también podemos realizar búsquedas vectoriales con ellas. Las bases de datos vectoriales disponen de métodos de indexación avanzados, como el Índice de Archivos Invertido (IVFFlat) o el Hierarchical Navigable Small World(HNSW), para realizar búsquedas vectoriales y procesos de recuperación de información rápidos y eficaces.
Milvus es una base de datos vectorial de código abierto que podemos utilizar para aprovechar todas las características beneficiosas que puede ofrecer una base de datos vectorial. Esto es lo que cubriremos en este post:
¿Qué es Milvus?
Milvus es una base de datos vectorial de código abierto que nos permite almacenar cantidades masivas de datos no estructurados y realizar búsquedas vectoriales rápidas y eficientes en ellos. Milvus es muy útil para muchas aplicaciones GenAI populares, como sistemas de recomendación, chatbots personalizados, detección de anomalías, búsqueda de imágenes, procesamiento del lenguaje natural y generación aumentada de recuperación(RAG).
Son varias las ventajas que puede obtener utilizando Milvus como base de datos vectorial:
Milvus ofrece múltiples opciones de despliegue que puede elegir en función de su caso de uso y del tamaño de las aplicaciones que desee crear.
Milvus admite una amplia gama de métodos de indexación para satisfacer diversas necesidades de datos y rendimiento, incluidas opciones en memoria como FLAT, IVFFlat, HNSW y SCANN, variantes cuantizadas para la eficiencia en memoria, DiskANN en disco para grandes conjuntos de datos e índices optimizados para GPU como GPU_CAGRA, GPU_IVF_FLAT y GPU_IVF_PQ para búsquedas aceleradas y eficientes en memoria.
Milvus también ofrece búsqueda híbrida, en la que podemos utilizar una combinación de incrustaciones densas, incrustaciones dispersas y filtrado de metadatos durante las operaciones de búsqueda vectorial, lo que conduce a resultados de recuperación más precisos. Además, Milvus 2.5 admite ahora una búsqueda híbrida de texto completo y búsqueda vectorial, lo que hace que su recuperación sea aún más precisa.
Milvus puede utilizarse completamente en la nube a través de Zilliz Cloud, donde puede optimizar sus costes operativos y la velocidad de búsqueda vectorial gracias a cuatro funciones avanzadas: clústeres lógicos, desagregación de datos históricos y de flujo, almacenamiento por niveles, autoescalado y separación hot-cold multitenancy.
Al utilizar Milvus como su base de datos vectorial, puede elegir tres opciones de despliegue diferentes, cada una con sus puntos fuertes y sus ventajas. Hablaremos de cada una de ellas en la siguiente sección.
Opciones de despliegue de Milvus
Podemos elegir entre cuatro opciones de despliegue para empezar a utilizar Milvus: Milvus Lite, Milvus Standalone, Milvus Distributed y Zilliz Cloud (Milvus gestionado). Cada opción de despliegue está diseñada para adaptarse a varios escenarios en nuestro caso de uso, como el tamaño de nuestros datos, el propósito de nuestra aplicación y la escala de nuestra aplicación.
Milvus Lite
MilvusLite es una versión ligera de Milvus y la forma más sencilla de empezar. En la siguiente sección, veremos cómo podemos ejecutar Milvus Lite en acción, y todo lo que tenemos que hacer para empezar es instalar la biblioteca Pymilvus con pip. Después de eso, podemos realizar la mayoría de las funcionalidades básicas de Milvus como una base de datos vectorial.
Milvus Lite es perfecto para la creación rápida de prototipos o con fines de aprendizaje y se puede ejecutar en un cuaderno Jupyter sin ninguna configuración complicada. En términos de almacenamiento de vectores, Milvus Lite es adecuado para almacenar aproximadamente hasta un millón de incrustaciones vectoriales. Debido a su ligereza y capacidad de almacenamiento, Milvus Lite es una opción de despliegue perfecta para trabajar con dispositivos edge, como motor de búsqueda de documentos privados, detección de objetos en dispositivos, etc.
Milvus Standalone
Milvus Standalone es un despliegue de servidor de una sola máquina empaquetado en una imagen Docker. Por lo tanto, todo lo que tenemos que hacer para empezar es instalar Milvus en Docker, y luego iniciar el contenedor Docker. También veremos la implementación detallada de Milvus Standalone en la siguiente sección.
Milvus Standalone es ideal para construir y producir aplicaciones de pequeña a mediana escala, ya que es capaz de almacenar hasta 10M de incrustaciones vectoriales. Además, Milvus Standalone ofrece una alta disponibilidad a través de un modo de copia de seguridad primaria, por lo que es muy fiable para su uso en aplicaciones listas para la producción.
También podemos utilizar Milvus Standalone, por ejemplo, después de realizar prototipos rápidos y aprender las funcionalidades de Milvus con Milvus Lite, ya que tanto Milvus Standalone como Milvus Lite comparten la misma API del lado del cliente.
Milvus Distribuido
Milvus Distributed es una opción de despliegue que aprovecha una arquitectura basada en la nube, en la que la ingesta y la recuperación de datos se gestionan por separado, lo que permite una aplicación altamente escalable y eficiente.
Para ejecutar Milvus Distributed, normalmente necesitamos utilizar un clúster Kubernetes para permitir que el contenedor se ejecute en múltiples máquinas y entornos. La aplicación de un clúster Kubernetes garantiza la escalabilidad y flexibilidad de Milvus Distributed para personalizar los recursos asignados en función de la demanda y la carga de trabajo. Esto también significa que si una parte falla, otras pueden tomar el relevo, garantizando que todo el sistema permanezca ininterrumpido.
Milvus Distributed es capaz de manejar hasta decenas de miles de millones de incrustaciones vectoriales y está especialmente diseñado para casos de uso en los que los datos son demasiado grandes para ser almacenados en una sola máquina servidor. Por lo tanto, esta opción de despliegue es perfecta para clientes empresariales que atienden a una gran base de usuarios.
Figura: Capacidad de almacenamiento de incrustación vectorial de las diferentes opciones de despliegue de Milvus.
En este artículo, vamos a mostrarle cómo empezar tanto con Milvus Lite como con Milvus Standalone, ya que puede empezar rápidamente con ambos métodos sin una configuración complicada. Milvus Distributed, sin embargo, es más complicado de configurar. Una vez que configuramos Milvus Distributed, el código y el proceso lógico para crear colecciones, ingerir datos, realizar búsquedas vectoriales, etc. son similares a Milvus Lite y Milvus Standalone, ya que comparten la misma API del lado del cliente.
Además de las tres opciones de despliegue mencionadas anteriormente, también puede probar Milvus gestionado en Zilliz Cloud para disfrutar de una experiencia sin complicaciones. También hablaremos de Zilliz Cloud más adelante en este artículo.
Primeros pasos con Milvus Lite
Milvus Lite puede implementarse directamente con Python importando una biblioteca llamada Pymilvus utilizando pip. Antes de instalar Pymilvus, asegúrese de que su entorno cumple los siguientes requisitos:
Ubuntu >= 20.04 (x86_64 y arm64)
MacOS >= 11.0 (Apple Silicon M1/M2 y x86_64)
Python 3.7 o posterior
Una vez cumplidos estos requisitos, puede instalar Milvus Lite y las dependencias necesarias para la demostración utilizando el siguiente comando:
!pip install -U pymilvus
!pip install "pymilvus[model]"
!pip install -U pymilvus
: Este comando instala o actualiza la bibliotecapymilvus
, el SDK Python de Milvus. Milvus Lite se incluye con PyMilvus, por lo que esta única línea de código es todo lo que necesita para instalar Milvus Lite.!pip install "pymilvus[model]"
: Este comando añade funciones avanzadas y herramientas extra preintegradas con Milvus, incluyendo modelos de aprendizaje automático como Hugging Face Transformers, modelos de incrustación de Jina AI y modelos de reranking.
Estos son los pasos que vamos a seguir con Milvus Lite:
Transformar los datos de texto en su representación de incrustación utilizando un modelo de incrustación.
Crear un esquema en nuestra base de datos Milvus para almacenar nuestros datos de texto y sus representaciones de incrustación.
Almacenar e indexar nuestros datos en nuestro esquema.
Realizar una búsqueda vectorial simple en los datos almacenados.
Figura: Flujo de trabajo de la operación de búsqueda vectorial.
Para transformar los datos de texto en incrustaciones vectoriales, utilizaremos un modelo de incrustación de SentenceTransformers llamado 'all-MiniLM-L6-v2'. Este modelo de incrustación transforma nuestro texto en una incrustación vectorial de 384 dimensiones. Carguemos el modelo, transformemos nuestros datos de texto y empaquetémoslo todo.
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)) ]
A continuación, vamos a crear un esquema para almacenar todos los datos anteriores en Milvus. Como puede ver arriba, nuestros datos constan de tres campos: ID, vector y texto. Por lo tanto, vamos a crear un esquema con estos tres campos.
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)
Con Milvus Lite, podemos crear fácilmente una colección en una base de datos particular basada en el esquema definido anteriormente, así como insertar e indexar los datos en la colección en sólo unas pocas líneas de código.
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
)
En el código anterior, creamos una colección llamada "demo_collection" dentro de una base de datos Milvus llamada "milvus_demo". A continuación, indexamos todos nuestros datos en la "demo_collection" que acabamos de crear.
Ahora que tenemos nuestros datos dentro de la base de datos, podemos realizar una búsqueda vectorial en ellos para cualquier consulta. Digamos que tenemos una consulta: "¿Quién es Alan Turing?". Podemos obtener la respuesta más adecuada a la consulta ejecutando los siguientes pasos:
Transformar nuestra consulta en una incrustación vectorial utilizando el mismo modelo de incrustación que utilizamos para transformar nuestros datos de la base de datos en incrustaciones.
Calcular la similitud entre la incrustación de nuestra consulta y la incrustación de cada entrada de la base de datos utilizando métricas como la similitud coseno o la distancia euclídea.
Obtener la entrada más similar como respuesta adecuada a nuestra consulta.
A continuación se muestra la implementación de los pasos anteriores con 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.'}}]"]
"""
¡Y eso es todo! También puede obtener más información sobre otras funcionalidades que ofrece Milvus, como la gestión de bases de datos, la inserción y eliminación de colecciones, la elección del método de indexación adecuado y la realización de búsquedas vectoriales más avanzadas con filtrado de metadatos y búsqueda híbrida en la documentación de Milvus.
Primeros pasos con Milvus Standalone
Milvus Standalone es una opción de despliegue en la que todo está empaquetado en un contenedor Docker. Por lo tanto, necesitamos instalar Milvus en Docker y luego iniciar el contenedor Docker para comenzar con Milvus Standalone.
Antes de instalar Milvus Standalone, asegúrese de que tanto su hardware como su software cumplen los requisitos descritos en esta página. Además, asegúrese de que ha instalado Docker. Para instalar Docker, consulte esta página.
Una vez que nuestro sistema cumple los requisitos y hemos instalado Docker, podemos proceder con la instalación de Milvus en Docker utilizando el siguiente comando:
# 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
En el código anterior, también iniciamos el contenedor Docker y una vez iniciado, obtendremos una salida similar a la siguiente:
Figura: Mensaje tras el arranque con éxito del contenedor Docker.
Tras ejecutar el script de instalación "standalone_embed.sh" anterior, se inicia un contenedor Docker llamado "milvus" en el puerto 19530. Por lo tanto, podemos crear una nueva base de datos, así como acceder a todas las cosas relacionadas con la base de datos Milvus apuntando a este puerto al crear conexiones.
Digamos que queremos crear una base de datos llamada "milvus_demo", similar a lo que hemos hecho en Milvus Lite más arriba. Podemos hacerlo de la siguiente manera:
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"
)
A continuación, puede verificar si la base de datos recién creada llamada "milvus_demo" existe realmente en su instancia de Milvus accediendo a la interfaz web de Milvus. Como su nombre indica, Milvus Web UI es una interfaz gráfica de usuario proporcionada por Milvus para observar las estadísticas y métricas de los componentes, comprobar la lista y los detalles de las bases de datos, colecciones y configuraciones. Puede acceder a Milvus Web UI una vez que haya iniciado el contenedor Docker anterior en http://127.0.0.1:9091/webui/.
Si accede al enlace anterior, verá una página de aterrizaje como ésta:
En la pestaña "Colecciones", verá que nuestra base de datos "milvus_demo" se ha creado correctamente. Como puede ver, también puede comprobar otras cosas como la lista de colecciones, las configuraciones, las consultas realizadas, etc., con esta interfaz web.
Ahora podemos realizar todo exactamente como hemos visto en la sección anterior de Milvus Lite. Vamos a crear una colección llamada "demo_collection" dentro de la base de datos "milvus_demo" que consta de tres campos, los mismos que teníamos en la sección Milvus Lite anterior. A continuación, insertaremos nuestros datos en la colección.
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
)
El código para realizar una operación de búsqueda vectorial también es el mismo que el de Milvus Lite, como puede ver en el código siguiente:
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.'}}]"]
"""
Además de utilizar Docker, también puede utilizar Milvus Standalone con Docker Compose (para Linux) y Docker Desktop (para Windows).
Cuando ya no estemos utilizando nuestra instancia de Milvus, podemos detener Milvus Standalone con el siguiente comando:
$ bash standalone_embed.sh stop
Milvus totalmente gestionado
Una forma alternativa de comenzar con Milvus es a través de una infraestructura nativa basada en la nube en Zilliz Cloud, donde puede obtener una experiencia 10 veces más rápida y sin complicaciones.
Zilliz Cloud ofrece clústeres dedicados con entornos y recursos dedicados para dar soporte a su aplicación de IA. Al tratarse de una base de datos basada en la nube y construida sobre Milvus, no es necesario configurar ni gestionar la infraestructura local. Zilliz Cloud también proporciona características más avanzadas, como la separación entre el almacenamiento vectorial y el cálculo, la copia de seguridad de datos en sistemas de almacenamiento de objetos populares como S3 y el almacenamiento en caché de datos para acelerar las operaciones de búsqueda y recuperación de vectores.
Sin embargo, algo que hay que tener en cuenta al considerar los servicios basados en la nube es el coste operativo. En la mayoría de los casos, seguimos teniendo que pagar incluso cuando el clúster está inactivo sin actividad de ingestión de datos o búsqueda vectorial. Si desea optimizar aún más el coste operativo y el rendimiento de su aplicación, Zilliz Cloud Serverless sería una excelente opción.
Figura: Beneficios clave del uso de Zilliz Cloud Serverless.
Zilliz Cloud Serverless está disponible en los principales proveedores de nube como AWS, Azure y GCP. Ofrece características como precios de pago por uso, lo que significa que solo pagas cuando usas el clúster.
Zilliz Cloud Serverless también implementa tecnologías avanzadas como clústeres lógicos, autoescalado, almacenamiento por niveles, desagregación de datos históricos y en streaming, y separación de datos en caliente y en frío. Estas características permiten a Zilliz Cloud Serverless conseguir un ahorro de costes de hasta 50 veces y operaciones de búsqueda vectorial aproximadamente 10 veces más rápidas en comparación con Milvus en memoria.
Figura: Ilustración del almacenamiento por niveles y la separación de datos en caliente y en frío.
Si desea empezar a utilizar Zilliz Cloud Serverless, consulte esta página para obtener más información.
Conclusión
Milvus destaca como una base de datos vectorial versátil y potente diseñada para afrontar los retos de gestionar datos no estructurados y realizar operaciones de búsqueda vectorial rápidas y eficientes en aplicaciones de IA modernas. Con opciones de implementación como Milvus Lite para la creación rápida de prototipos, Milvus Standalone para aplicaciones de pequeña y mediana escala, y Milvus Distributed para la escalabilidad a nivel empresarial, ofrece flexibilidad para adaptarse al tamaño y la complejidad de cualquier proyecto.
Además, Zilliz Cloud Serverless amplía las capacidades de Milvus a la nube y proporciona un modelo rentable de pago por uso que elimina la necesidad de infraestructura local. Con funciones avanzadas como el almacenamiento por niveles y el autoescalado, Zilliz Cloud Serverless garantiza operaciones de búsqueda vectorial más rápidas a la vez que optimiza los costes.
- ¿Qué es Milvus?
- Opciones de despliegue de Milvus
- Primeros pasos con Milvus Lite
- Primeros pasos con Milvus Standalone
- Milvus totalmente gestionado
- 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