Prueba e implementa rápidamente soluciones de búsqueda vectorial con el Bootcamp de Milvus 2.0
Con el lanzamiento de Milvus 2.0, el equipo ha renovado el bootcamp de Milvus. El bootcamp nuevo y mejorado ofrece guías actualizadas y ejemplos de código más fáciles de seguir para una variedad de casos de uso y despliegues. Además, esta nueva versión está actualizada para Milvus 2.0, una versión reinventada de la base de datos vectorial más avanzada del mundo.
Prueba tu sistema con benchmarks de datasets de 1M y 100M
El directorio de benchmarks contiene pruebas de benchmark de vectores de 1 millón y 100 millones que indican cómo reaccionará tu sistema ante datasets de diferentes tamaños.
Explora y crea soluciones populares de búsqueda por similitud vectorial
El directorio de soluciones incluye los casos de uso más populares de búsqueda por similitud vectorial. Cada caso de uso contiene una solución en notebook y una solución desplegable con docker. Los casos de uso incluyen:
- Búsqueda por similitud de imágenes
- Búsqueda por similitud de videos
- Búsqueda por similitud de audio
- Sistema de recomendación
- Búsqueda molecular
- Sistema de respuesta a preguntas
Despliega rápidamente una aplicación completamente creada en cualquier sistema
Las soluciones de despliegue rápido son soluciones dockerizadas que permiten a los usuarios desplegar aplicaciones completamente creadas en cualquier sistema. Estas soluciones son ideales para demostraciones breves, pero requieren trabajo adicional para personalizarlas y comprenderlas en comparación con los notebooks.
Usa notebooks específicos por escenario para desplegar fácilmente aplicaciones preconfiguradas
Los notebooks contienen un ejemplo sencillo de despliegue de Milvus para resolver el problema en un caso de uso determinado. Cada uno de los ejemplos puede ejecutarse de principio a fin sin necesidad de gestionar archivos o configuraciones. Cada notebook también es fácil de seguir y modificable, lo que los convierte en archivos base ideales para otros proyectos.
Ejemplo de notebook de búsqueda por similitud de imágenes
La búsqueda por similitud de imágenes es una de las ideas centrales detrás de muchas tecnologías diferentes, incluidos los coches autónomos que reconocen objetos. Este ejemplo explica cómo crear fácilmente programas de visión por computadora con Milvus.
Este ejemplo cubre tres cosas:
- Servidor Milvus
- Servidor Redis (para almacenamiento de metadatos)
- Modelo Resnet-18 preentrenado.
Paso 1: Descargar los paquetes requeridos
Comienza descargando todos los paquetes requeridos para este proyecto. Este notebook incluye una tabla que enumera los paquetes que se deben usar.
pip install -r requirements.txt
Paso 2: Inicio del servidor
Después de instalar los paquetes, inicia los servidores y asegúrate de que ambos se estén ejecutando correctamente. Asegúrate de seguir las instrucciones correctas para iniciar los servidores Milvus y Redis.
Paso 3: Descargar los datos del proyecto
De forma predeterminada, este notebook extrae un fragmento de los datos de VOCImage para usarlo como ejemplo, pero cualquier directorio con imágenes debería funcionar siempre que siga la estructura de archivos que se puede ver en la parte superior del notebook.
! gdown "https://drive.google.com/u/1/uc?id=1jdudBiUu41kL-U5lhH3ari_WBRXyedWo&export=download"
! tar -xf 'VOCdevkit.zip'
! rm 'VOCdevkit.zip'
Paso 4: Conectarse a los servidores
En este ejemplo, los servidores se ejecutan en los puertos predeterminados en el localhost.
connections.connect(host="127.0.0.1", port=19537)
red = redis.Redis(host = '127.0.0.1', port=6379, db=0)
Paso 5: Crear una colección
Después de iniciar los servidores, crea una colección en Milvus para almacenar todos los vectores. En este ejemplo, el tamaño de dimensión se establece en 512, el tamaño de la salida de resnet-18, y la métrica de similitud se establece en la distancia euclidiana (L2). Milvus admite una variedad de diferentes métricas de similitud.
collection_name = "image_similarity_search"
dim = 512
default_fields = [
schema.FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
schema.FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=dim)
]
default_schema = schema.CollectionSchema(fields=default_fields, description="Image test collection")
collection = Collection(name=collection_name, schema=default_schema)
Paso 6: Crear un índice para la colección
Una vez creada la colección, crea un índice para ella. En este caso, se utiliza el índice IVF_SQ8. Este índice requiere el parámetro 'nlist', que le indica a Milvus cuántos clústeres crear dentro de cada archivo de datos (segmento). Diferentes índices requieren diferentes parámetros.
default_index = {"index_type": "IVF_SQ8", "params": {"nlist": 2048}, "metric_type": "L2"}
collection.create_index(field_name="vector", index_params=default_index)
collection.load()
Paso 7: Configurar el modelo y el cargador de datos
Después de crear el índice IVF_SQ8, configura la red neuronal y el cargador de datos. El resnet-18 de pytorch preentrenado utilizado en este ejemplo no incluye su última capa, que comprime vectores para la clasificación y puede perder información valiosa.
model = torch.hub.load('pytorch/vision:v0.9.0', 'resnet18', pretrained=True)
encoder = torch.nn.Sequential(*(list(model.children())[:-1]))
El conjunto de datos y el cargador de datos deben modificarse para que puedan preprocesar y agrupar las imágenes en lotes, a la vez que proporcionan las rutas de archivo de las imágenes. Esto puede hacerse con un dataloader de torchvision ligeramente modificado. Para el preprocesamiento, las imágenes deben recortarse y normalizarse debido a que el modelo resnet-18 fue entrenado con un tamaño y un rango de valores específicos.
dataset = ImageFolderWithPaths(data_dir, transform=transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])]))
dataloader = torch.utils.data.DataLoader(dataset, num_workers=0, batch_si
Paso 8: Insertar vectores en la colección
Con la colección configurada, las imágenes pueden procesarse y cargarse en la colección creada. Primero, el dataloader extrae las imágenes y las pasa por el modelo resnet-18. Las incrustaciones vectoriales resultantes se insertan luego en Milvus, que devuelve un ID único para cada vector. Los ID de los vectores y las rutas de archivo de las imágenes se insertan luego como pares clave-valor en el servidor Redis.
steps = len(dataloader)
step = 0
for inputs, labels, paths in dataloader:
with torch.no_grad():
output = encoder(inputs).squeeze()
output = output.numpy()
mr = collection.insert([output.tolist()])
ids = mr.primary_keys
for x in range(len(ids)):
red.set(str(ids[x]), paths[x])
if step%5 == 0:
print("Insert Step: " + str(step) + "/" + str(steps))
step += 1
Paso 9: Realizar una búsqueda de similitud vectorial
Una vez que todos los datos se insertan en Milvus y Redis, se puede realizar la búsqueda de similitud vectorial real. Para este ejemplo, se extraen tres imágenes seleccionadas al azar del servidor Redis para una búsqueda de similitud vectorial.
random_ids = [int(red.randomkey()) for x in range(3)]
search_images = [x.decode("utf-8") for x in red.mget(random_ids)]
Estas imágenes primero pasan por el mismo preprocesamiento que se encuentra en el Paso 7 y luego se envían a través del modelo resnet-18.
transform_ops = transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])])
embeddings = [transform_ops(Image.open(x)) for x in search_images]
embeddings = torch.stack(embeddings, dim=0)
with torch.no_grad():
embeddings = encoder(embeddings).squeeze().numpy()
Luego, las incrustaciones vectoriales resultantes se usan para realizar una búsqueda. Primero, establece los parámetros de búsqueda, incluido el nombre de la colección en la que se buscará, nprobe (el número de clústeres en los que se buscará) y top_k (el número de vectores devueltos). En este ejemplo, la búsqueda debería ser muy rápida.
search_params = {"metric_type": "L2", "params": {"nprobe": 32}}
start = time.time()
results = collection.search(embeddings, "vector", param=search_params, limit=3, expr=None)
end = time.time() - start
Paso 10: Resultados de búsqueda de imágenes
Los ID de vectores devueltos por las consultas se usan para encontrar las imágenes correspondientes. Luego se usa Matplotlib para mostrar los resultados de búsqueda de imágenes.
Figura 1.
Figura 2.
Figura 3.
Aprende a implementar Milvus en diferentes entornos
La sección de implementaciones del nuevo bootcamp contiene toda la información para usar Milvus en diferentes entornos y configuraciones. Incluye la implementación de Mishards, el uso de Kubernetes con Milvus, balanceo de carga y más. Cada entorno tiene una guía detallada paso a paso que explica cómo hacer que Milvus funcione en él.
No seas un desconocido
- Lee nuestro nuestro blog.
- Interactúa con nuestra comunidad de código abierto en Slack.
- Usa o contribuye a Milvus, la base de datos vectorial más popular del mundo, en GitHub.
Sigue leyendo

How to Install and Run OpenClaw (Previously Clawdbot/Moltbot) on Mac
Turn your Mac into an AI gateway for WhatsApp, Telegram, Discord, iMessage, and more — in under 5 minutes.

Our Journey to 35K+ GitHub Stars: The Real Story of Building Milvus from Scratch
Join us in celebrating Milvus, the vector database that hit 35.5K stars on GitHub. Discover our story and how we’re making AI solutions easier for developers.

Why Deepseek is Waking up AI Giants Like OpenAI And Why You Should Care
Discover how DeepSeek R1's open-source AI model with superior reasoning capabilities and lower costs is disrupting the AI landscape and challenging tech giants like OpenAI.



