Testez et déployez rapidement des solutions de recherche vectorielle avec le Bootcamp Milvus 2.0
Avec la sortie de Milvus 2.0, l’équipe a remanié le bootcamp Milvus. Le nouveau bootcamp amélioré propose des guides mis à jour et des exemples de code plus faciles à suivre pour une variété de cas d’utilisation et de déploiements. De plus, cette nouvelle version est mise à jour pour Milvus 2.0, une version repensée de la base de données vectorielle la plus avancée au monde.
Testez la résistance de votre système avec des benchmarks sur des jeux de données de 1M et 100M
Le répertoire des benchmarks contient des tests de benchmark vectoriels de 1 million et 100 millions qui indiquent comment votre système réagira à des jeux de données de différentes tailles.
Explorez et créez des solutions populaires de recherche par similarité vectorielle
Le répertoire des solutions inclut les cas d’utilisation les plus populaires de recherche par similarité vectorielle. Chaque cas d’utilisation contient une solution sous forme de notebook et une solution déployable avec docker. Les cas d’utilisation incluent :
- Recherche d’images similaires
- Recherche de vidéos similaires
- Recherche d’audios similaires
- Système de recommandation
- Recherche moléculaire
- Système de questions-réponses
Déployez rapidement une application entièrement construite sur n’importe quel système
Les solutions de déploiement rapide sont des solutions dockerisées qui permettent aux utilisateurs de déployer des applications entièrement construites sur n’importe quel système. Ces solutions sont idéales pour de brèves démonstrations, mais nécessitent un travail supplémentaire de personnalisation et de compréhension par rapport aux notebooks.
Utilisez des notebooks spécifiques à chaque scénario pour déployer facilement des applications préconfigurées
Les notebooks contiennent un exemple simple de déploiement de Milvus pour résoudre le problème dans un cas d’utilisation donné. Chacun des exemples peut être exécuté du début à la fin sans avoir besoin de gérer des fichiers ou des configurations. Chaque notebook est également facile à suivre et modifiable, ce qui en fait des fichiers de base idéaux pour d’autres projets.
Exemple de notebook de recherche d’images similaires
La recherche d’images similaires est l’une des idées fondamentales derrière de nombreuses technologies différentes, notamment les voitures autonomes qui reconnaissent des objets. Cet exemple explique comment créer facilement des programmes de vision par ordinateur avec Milvus.
Cet exemple couvre trois éléments :
- Serveur Milvus
- Serveur Redis (pour le stockage des métadonnées)
- Modèle Resnet-18 préentraîné.
Étape 1 : Télécharger les packages requis
Commencez par télécharger tous les packages requis pour ce projet. Ce notebook inclut un tableau répertoriant les packages à utiliser.
pip install -r requirements.txt
Étape 2 : Démarrage des serveurs
Une fois les packages installés, démarrez les serveurs et assurez-vous qu’ils fonctionnent correctement tous les deux. Veillez à suivre les instructions correctes pour démarrer les serveurs Milvus et Redis.
Étape 3 : Télécharger les données du projet
Par défaut, ce notebook extrait un extrait des données VOCImage à utiliser comme exemple, mais tout répertoire contenant des images devrait fonctionner tant qu’il respecte la structure de fichiers visible en haut du notebook.
! gdown "https://drive.google.com/u/1/uc?id=1jdudBiUu41kL-U5lhH3ari_WBRXyedWo&export=download"
! tar -xf 'VOCdevkit.zip'
! rm 'VOCdevkit.zip'
Étape 4 : Se connecter aux serveurs
Dans cet exemple, les serveurs s’exécutent sur les ports par défaut sur le localhost.
connections.connect(host="127.0.0.1", port=19537)
red = redis.Redis(host = '127.0.0.1', port=6379, db=0)
Étape 5 : Créer une collection
Après avoir démarré les serveurs, créez une collection dans Milvus pour stocker tous les vecteurs. Dans cet exemple, la dimension est définie sur 512, la taille de la sortie de resnet-18, et la métrique de similarité est définie sur la distance euclidienne (L2). Milvus prend en charge une variété de différentes métriques de similarité.
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)
Étape 6 : Construire un index pour la collection
Une fois la collection créée, construisez un index pour celle-ci. Dans ce cas, l’index IVF_SQ8 est utilisé. Cet index nécessite le paramètre 'nlist', qui indique à Milvus combien de clusters créer dans chaque fichier de données (segment). Différents indices nécessitent différents paramètres.
default_index = {"index_type": "IVF_SQ8", "params": {"nlist": 2048}, "metric_type": "L2"}
collection.create_index(field_name="vector", index_params=default_index)
collection.load()
Étape 7 : Configurer le modèle et le chargeur de données
Après la construction de l’index IVF_SQ8, configurez le réseau neuronal et le chargeur de données. Le resnet-18 pytorch préentraîné utilisé dans cet exemple est dépourvu de sa dernière couche, qui compresse les vecteurs pour la classification et peut perdre des informations précieuses.
model = torch.hub.load('pytorch/vision:v0.9.0', 'resnet18', pretrained=True)
encoder = torch.nn.Sequential(*(list(model.children())[:-1]))
Le jeu de données et le chargeur de données doivent être modifiés afin de pouvoir prétraiter et regrouper les images en lots tout en fournissant les chemins de fichiers des images. Cela peut être fait avec un dataloader torchvision légèrement modifié. Pour le prétraitement, les images doivent être recadrées et normalisées, car le modèle resnet-18 a été entraîné sur une taille et une plage de valeurs spécifiques.
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
Étape 8 : Insérer des vecteurs dans la collection
Une fois la collection configurée, les images peuvent être traitées et chargées dans la collection créée. Tout d’abord, les images sont récupérées par le dataloader et passées dans le modèle resnet-18. Les représentations vectorielles résultantes sont ensuite insérées dans Milvus, qui renvoie un ID unique pour chaque vecteur. Les ID de vecteurs et les chemins de fichiers des images sont ensuite insérés sous forme de paires clé-valeur dans le serveur 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
Étape 9 : Effectuer une recherche de similarité vectorielle
Une fois toutes les données insérées dans Milvus et Redis, la recherche de similarité vectorielle proprement dite peut être effectuée. Pour cet exemple, trois images sélectionnées aléatoirement sont extraites du serveur Redis pour une recherche de similarité vectorielle.
random_ids = [int(red.randomkey()) for x in range(3)]
search_images = [x.decode("utf-8") for x in red.mget(random_ids)]
Ces images passent d’abord par le même prétraitement que celui de l’étape 7, puis sont transmises au modèle 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()
Ensuite, les plongements vectoriels obtenus sont utilisés pour effectuer une recherche. Commencez par définir les paramètres de recherche, notamment le nom de la collection à rechercher, nprobe (le nombre de clusters à rechercher) et top_k (le nombre de vecteurs renvoyés). Dans cet exemple, la recherche devrait être très rapide.
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
Étape 10 : Résultats de la recherche d’images
Les ID vectoriels renvoyés par les requêtes sont utilisés pour trouver les images correspondantes. Matplotlib est ensuite utilisé pour afficher les résultats de la recherche d’images.
Figure 1.
Figure 2.
Figure 3.
Découvrez comment déployer Milvus dans différents environnements
La section deployments du nouveau bootcamp contient toutes les informations nécessaires pour utiliser Milvus dans différents environnements et configurations. Elle comprend le déploiement de Mishards, l’utilisation de Kubernetes avec Milvus, l’équilibrage de charge, et plus encore. Chaque environnement dispose d’un guide détaillé étape par étape expliquant comment y faire fonctionner Milvus.
Ne soyez pas un inconnu
- Lisez notre blog.
- Échangez avec notre communauté open source sur Slack.
- Utilisez ou contribuez à Milvus, la base de données vectorielle la plus populaire au monde, sur GitHub.
Continuer à lire

Zilliz Cloud Now Available in AWS Asia Pacific (Seoul)
Zilliz Cloud is now available in AWS Seoul — low-latency vector search, in-country data residency, and one-step migration for Korean AI teams. 31 regions across 5 clouds.

My Wife Wanted Dior. I Spent $600 on Claude Code to Vibe-Code a 2M-Line Database Instead.
Write tests, not code reviews. How a test-first workflow with 6 parallel Claude Code sessions turns a 2M-line C++ codebase into a daily shipping pipeline.

AI Integration in Video Surveillance Tools: Transforming the Industry with Vector Databases
Discover how AI and vector databases are revolutionizing video surveillance with real-time analysis, faster threat detection, and intelligent search capabilities for enhanced security.



