🚀 Essayez Zilliz Cloud, la version entièrement gérée de Milvus, gratuitement—découvrez des performances 10x plus rapides ! Essayez maintenant>>

milvus-logo
LFAI

HomeBlogsComment démarrer avec Milvus

Comment démarrer avec Milvus

  • Engineering
January 17, 2025
Ruben Winastwan

How to get started with Milvus Comment démarrer avec Milvus

Dernière mise à jour : janvier 2025

Les progrès des grands modèles linguistiques(LLM) et le volume croissant de données nécessitent une infrastructure flexible et évolutive pour stocker des quantités massives d'informations, telle qu'une base de données. Cependant, les bases de données traditionnelles sont conçues pour stocker des données tabulaires et structurées, alors que les informations généralement utiles pour tirer parti de la puissance des grands modèles linguistiques et des algorithmes de recherche d'informations ne sont pas structurées, comme le texte, les images, les vidéos ou le son.

Lesbases de données vectorielles sont des systèmes de base de données spécialement conçus pour les données non structurées. Les bases de données vectorielles permettent non seulement de stocker des quantités massives de données non structurées, mais aussi d'effectuer des recherches vectorielles. Les bases de données vectorielles disposent de méthodes d'indexation avancées telles que l'index de fichier inversé (IVFFlat) ou le petit monde hiérarchique navigable(HNSW) pour effectuer des recherches vectorielles et des processus de récupération d'informations rapides et efficaces.

Milvus est une base de données vectorielles open-source que nous pouvons utiliser pour tirer parti de toutes les fonctionnalités avantageuses qu'une base de données vectorielles peut offrir. Voici ce que nous allons aborder dans ce billet :

Qu'est-ce que Milvus ?

Milvus est une base de données vectorielle open-source qui nous permet de stocker des quantités massives de données non structurées et d'effectuer des recherches vectorielles rapides et efficaces. Milvus est très utile pour de nombreuses applications GenAI populaires, telles que les systèmes de recommandation, les chatbots personnalisés, la détection d'anomalies, la recherche d'images, le traitement du langage naturel et la génération augmentée de recherche(RAG).

L'utilisation de Milvus comme base de données vectorielles présente plusieurs avantages :

  • Milvus offre plusieurs options de déploiement que vous pouvez choisir en fonction de votre cas d'utilisation et de la taille des applications que vous souhaitez créer.

  • Milvus prend en charge un large éventail de méthodes d'indexation pour répondre à divers besoins en matière de données et de performances, notamment des options en mémoire telles que FLAT, IVFFlat, HNSW et SCANN, des variantes quantifiées pour l'efficacité de la mémoire, DiskANN sur disque pour les grands ensembles de données et des index optimisés pour les GPU tels que GPU_CAGRA, GPU_IVF_FLAT et GPU_IVF_PQ pour des recherches accélérées et efficaces au niveau de la mémoire.

  • Milvus propose également la recherche hybride, qui permet d'utiliser une combinaison d'encastrements denses, d'encastrements épars et de filtrage des métadonnées pendant les opérations de recherche vectorielle, ce qui permet d'obtenir des résultats de recherche plus précis. En outre, Milvus 2.5 prend désormais en charge une recherche hybride en texte intégral et une recherche vectorielle, ce qui rend la recherche encore plus précise.

  • Milvus peut être entièrement utilisé sur le cloud via Zilliz Cloud, où vous pouvez optimiser ses coûts opérationnels et sa vitesse de recherche vectorielle grâce à quatre fonctionnalités avancées : clusters logiques, désagrégation des données historiques et en continu, stockage hiérarchisé, mise à l'échelle automatique et séparation chaud-froid multi-tenant.

Lorsque vous utilisez Milvus comme base de données vectorielle, vous pouvez choisir trois options de déploiement différentes, chacune ayant ses points forts et ses avantages. Nous aborderons chacune d'entre elles dans la section suivante.

Options de déploiement de Milvus

Pour commencer à utiliser Milvus, vous avez le choix entre quatre options de déploiement : Milvus Lite, Milvus Standalone, Milvus Distributed et Zilliz Cloud (Milvus géré). Chaque option de déploiement est conçue pour s'adapter à différents scénarios dans notre cas d'utilisation, tels que la taille de nos données, l'objectif de notre application et l'échelle de notre application.

Milvus Lite

MilvusLite est une version légère de Milvus et la manière la plus simple de commencer. Dans la section suivante, nous verrons comment exécuter Milvus Lite en action, et tout ce que nous devons faire pour commencer est d'installer la bibliothèque Pymilvus avec pip. Après cela, nous pouvons exécuter la plupart des fonctionnalités de base de Milvus en tant que base de données vectorielle.

Milvus Lite est parfait pour le prototypage rapide ou l'apprentissage et peut être exécuté dans un notebook Jupyter sans aucune configuration compliquée. En termes de stockage vectoriel, Milvus Lite permet de stocker jusqu'à un million d'embeddings vectoriels. En raison de sa légèreté et de sa capacité de stockage, Milvus Lite est une option de déploiement parfaite pour travailler avec des appareils périphériques, tels que le moteur de recherche de documents privés, la détection d'objets sur l'appareil, etc.

Milvus Standalone

Milvus Standalone est un déploiement de serveur à machine unique emballé dans une image Docker. Par conséquent, tout ce que nous devons faire pour commencer est d'installer Milvus dans Docker, puis de démarrer le conteneur Docker. Nous verrons également la mise en œuvre détaillée de Milvus Standalone dans la section suivante.

Milvus Standalone est idéal pour la construction et la production d'applications à petite et moyenne échelle, car il est capable de stocker jusqu'à 10 millions d'embeddings vectoriels. En outre, Milvus Standalone offre une haute disponibilité grâce à un mode de sauvegarde primaire, ce qui le rend très fiable pour une utilisation dans des applications prêtes pour la production.

Nous pouvons également utiliser Milvus Standalone, par exemple, après avoir effectué un prototypage rapide et appris les fonctionnalités de Milvus avec Milvus Lite, car Milvus Standalone et Milvus Lite partagent la même API côté client.

Milvus Distribué

Milvus Distributed est une option de déploiement qui tire parti d'une architecture basée sur le cloud, où l'ingestion et la récupération des données sont traitées séparément, ce qui permet d'obtenir une application hautement évolutive et efficace.

Pour exécuter Milvus Distributed, nous devons généralement utiliser un cluster Kubernetes pour permettre au conteneur de s'exécuter sur plusieurs machines et environnements. L'application d'un cluster Kubernetes garantit l'évolutivité et la flexibilité de Milvus Distributed en personnalisant les ressources allouées en fonction de la demande et de la charge de travail. Cela signifie également que si une partie tombe en panne, d'autres peuvent prendre le relais, garantissant ainsi que l'ensemble du système reste ininterrompu.

Milvus Distributed est capable de traiter jusqu'à des dizaines de milliards de vecteurs intégrés et est spécialement conçu pour les cas d'utilisation où les données sont trop volumineuses pour être stockées dans une seule machine serveur. Par conséquent, cette option de déploiement est parfaite pour les clients d'entreprise qui desservent une large base d'utilisateurs.

Figure : Capacité de stockage de l'intégration vectorielle des différentes options de déploiement de Milvus.

Dans cet article, nous allons vous montrer comment démarrer avec Milvus Lite et Milvus Standalone, car vous pouvez démarrer rapidement avec ces deux méthodes sans configuration compliquée. Milvus Distribué est toutefois plus compliqué à configurer. Une fois Milvus Distribué configuré, le code et le processus logique pour créer des collections, ingérer des données, effectuer une recherche vectorielle, etc. sont similaires à ceux de Milvus Lite et Milvus Standalone, car ils partagent la même API côté client.

En plus des trois options de déploiement mentionnées ci-dessus, vous pouvez également essayer le Milvus géré sur Zilliz Cloud pour une expérience sans tracas. Nous parlerons également de Zilliz Cloud plus loin dans cet article.

Démarrer avec Milvus Lite

Milvus Lite peut être mis en œuvre directement avec Python en important une bibliothèque appelée Pymilvus à l'aide de pip. Avant d'installer Pymilvus, assurez-vous que votre environnement répond aux exigences suivantes :

  • Ubuntu >= 20.04 (x86_64 et arm64)

  • MacOS >= 11.0 (Apple Silicon M1/M2 et x86_64)

  • Python 3.7 ou supérieur

Une fois ces conditions remplies, vous pouvez installer Milvus Lite et les dépendances nécessaires à la démonstration à l'aide de la commande suivante :

!pip install -U pymilvus
!pip install "pymilvus[model]"
  • !pip install -U pymilvus: Cette commande installe ou met à jour la bibliothèque pymilvus, le SDK Python de Milvus. Milvus Lite est fourni avec PyMilvus, de sorte que cette simple ligne de code est tout ce dont vous avez besoin pour installer Milvus Lite.

  • !pip install "pymilvus[model]": Cette commande ajoute des fonctionnalités avancées et des outils supplémentaires pré-intégrés dans Milvus, notamment des modèles d'apprentissage automatique tels que Hugging Face Transformers, les modèles d'intégration Jina AI et les modèles de reranking.

Voici les étapes que nous allons suivre avec Milvus Lite :

  1. Transformer les données textuelles en leur représentation d'intégration à l'aide d'un modèle d'intégration.

  2. Créer un schéma dans notre base de données Milvus pour stocker nos données textuelles et leurs représentations d'intégration.

  3. Stocker et indexer nos données dans notre schéma.

  4. Effectuer une recherche vectorielle simple sur les données stockées.

Figure : Déroulement de l'opération de recherche vectorielle.

Pour transformer les données textuelles en embeddings vectoriels, nous utiliserons un modèle d'embedding de SentenceTransformers appelé 'all-MiniLM-L6-v2'. Ce modèle d'intégration transforme notre texte en une intégration vectorielle à 384 dimensions. Chargeons le modèle, transformons nos données textuelles et rassemblons le tout.

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)) ]

Ensuite, créons un schéma pour stocker toutes les données ci-dessus dans Milvus. Comme vous pouvez le voir ci-dessus, nos données se composent de trois champs : ID, vecteur et texte. Nous allons donc créer un schéma avec ces trois champs.

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)

Avec Milvus Lite, nous pouvons facilement créer une collection sur une base de données particulière basée sur le schéma défini ci-dessus, ainsi qu'insérer et indexer les données dans la collection en quelques lignes de code seulement.

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
)

Dans le code ci-dessus, nous créons une collection appelée "demo_collection" dans une base de données Milvus appelée "milvus_demo". Ensuite, nous indexons toutes nos données dans la "demo_collection" que nous venons de créer.

Maintenant que nos données se trouvent dans la base de données, nous pouvons effectuer une recherche vectorielle sur celles-ci pour n'importe quelle requête donnée. Supposons que nous ayons une requête :"Qui est Alan Turing ?". Nous pouvons obtenir la réponse la plus appropriée à la requête en suivant les étapes suivantes :

  1. Transformer notre requête en un vecteur intégré en utilisant le même modèle d'intégration que celui que nous avons utilisé pour transformer nos données dans la base de données en vecteurs intégrés.

  2. Calculer la similarité entre l'intégration de notre requête et l'intégration de chaque entrée de la base de données à l'aide de mesures telles que la similarité cosinusoïdale ou la distance euclidienne.

  3. Récupérer l'entrée la plus similaire comme réponse appropriée à notre requête.

Vous trouverez ci-dessous la mise en œuvre des étapes ci-dessus avec 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.'}}]"] 
"""

Et c'est tout ! Vous pouvez également en savoir plus sur les autres fonctionnalités offertes par Milvus, telles que la gestion des bases de données, l'insertion et la suppression de collections, le choix de la bonne méthode d'indexation et l'exécution de recherches vectorielles plus avancées avec le filtrage des métadonnées et la recherche hybride dans la documentation de Milvus.

Démarrage avec Milvus Standalone

Milvus Standalone est une option de déploiement dans laquelle tout est emballé dans un conteneur Docker. Par conséquent, nous devons installer Milvus dans Docker, puis démarrer le conteneur Docker pour commencer à utiliser Milvus Standalone.

Avant d'installer Milvus Standalone, assurez-vous que votre matériel et vos logiciels répondent aux exigences décrites sur cette page. Assurez-vous également que vous avez installé Docker. Pour installer Docker, reportez-vous à cette page.

Une fois que notre système remplit les conditions requises et que nous avons installé Docker, nous pouvons procéder à l'installation de Milvus dans Docker à l'aide de la commande suivante :

# 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

Dans le code ci-dessus, nous démarrons également le conteneur Docker et une fois qu'il est démarré, vous obtiendrez un résultat similaire à celui ci-dessous :

Figure : Message après le démarrage réussi du conteneur Docker.

Après avoir exécuté le script d'installation "standalone_embed.sh" ci-dessus, un conteneur Docker nommé "milvus" est démarré au port 19530. Par conséquent, nous pouvons créer une nouvelle base de données et accéder à tout ce qui est lié à la base de données Milvus en pointant vers ce port lors de la création de connexions.

Supposons que nous voulions créer une base de données appelée "milvus_demo", comme nous l'avons fait dans Milvus Lite ci-dessus. Nous pouvons le faire comme suit :

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"
)

Ensuite, vous pouvez vérifier si la base de données nouvellement créée appelée "milvus_demo" existe réellement dans votre instance Milvus en accédant à l'interface Web Milvus. Comme son nom l'indique, l'interface Web Milvus est une interface utilisateur graphique fournie par Milvus pour observer les statistiques et les mesures des composants, vérifier la liste et les détails des bases de données, des collections et des configurations. Vous pouvez accéder à Milvus Web UI une fois que vous avez démarré le conteneur Docker ci-dessus à l'adresse http://127.0.0.1:9091/webui/.

Si vous accédez au lien ci-dessus, vous verrez une page d'accueil comme celle-ci :

Sous l'onglet "Collections", vous verrez que notre base de données "milvus_demo" a été créée avec succès. Comme vous pouvez le voir, vous pouvez également vérifier d'autres choses telles que la liste des collections, les configurations, les requêtes que vous avez effectuées, etc. avec cette interface Web.

Maintenant, nous pouvons tout faire exactement comme nous l'avons vu dans la section Milvus Lite ci-dessus. Créons une collection appelée "demo_collection" dans la base de données "milvus_demo" qui se compose de trois champs, les mêmes que ceux que nous avions dans la section Milvus Lite ci-dessus. Ensuite, nous allons insérer nos données dans la collection.

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
)

Le code permettant d'effectuer une opération de recherche vectorielle est également identique à celui de Milvus Lite, comme vous pouvez le voir dans le code ci-dessous :

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.'}}]"] 
"""

Outre l'utilisation de Docker, vous pouvez également utiliser Milvus Standalone avec Docker Compose (pour Linux) et Docker Desktop (pour Windows).

Lorsque nous n'utilisons plus notre instance Milvus, nous pouvons arrêter Milvus Standalone à l'aide de la commande suivante :

$ bash standalone_embed.sh stop

Milvus entièrement géré

Une autre façon de démarrer avec Milvus est de passer par une infrastructure native basée sur le cloud dans Zilliz Cloud, où vous pouvez bénéficier d'une expérience sans tracas et 10 fois plus rapide.

Zilliz Cloud offre des clusters dédiés avec des environnements et des ressources dédiés pour prendre en charge votre application d'IA. Comme il s'agit d'une base de données basée sur le cloud et construite sur Milvus, nous n'avons pas besoin de mettre en place et de gérer une infrastructure locale. Zilliz Cloud offre également des fonctionnalités plus avancées, telles que la séparation entre le stockage vectoriel et le calcul, la sauvegarde des données vers des systèmes de stockage d'objets populaires tels que S3, et la mise en cache des données pour accélérer les opérations de recherche et d'extraction vectorielles.

Cependant, une chose à prendre en compte lorsque l'on envisage des services basés sur le cloud est le coût d'exploitation. Dans la plupart des cas, nous devons payer même lorsque le cluster est inactif et qu'il n'y a pas d'ingestion de données ou d'activité de recherche vectorielle. Si vous souhaitez optimiser davantage les coûts opérationnels et les performances de votre application, Zilliz Cloud Serverless serait une excellente option.

Figure : Principaux avantages de l'utilisation de Zilliz Cloud Serverless.

Zilliz Cloud Serverless est disponible sur les principaux fournisseurs de cloud tels que AWS, Azure et GCP. Il offre des fonctionnalités telles que la tarification "pay-as-you-go", ce qui signifie que vous ne payez que lorsque vous utilisez le cluster.

Zilliz Cloud Serverless met également en œuvre des technologies avancées telles que les clusters logiques, la mise à l'échelle automatique, le stockage hiérarchisé, la désagrégation des données historiques et en continu, et la séparation des données chaudes et froides. Ces fonctionnalités permettent à Zilliz Cloud Serverless de réaliser jusqu'à 50 fois plus d'économies et d'accélérer d'environ 10 fois les opérations de recherche vectorielle par rapport à Milvus en mémoire.

Figure : Illustration du stockage hiérarchisé et de la séparation des données chaudes et froides.

Si vous souhaitez commencer à utiliser Zilliz Cloud Serverless, consultez cette page pour plus d'informations.

Conclusion

Milvus se distingue comme une base de données vectorielle polyvalente et puissante conçue pour relever les défis de la gestion des données non structurées et de l'exécution d'opérations de recherche vectorielle rapides et efficaces dans les applications d'IA modernes. Avec des options de déploiement telles que Milvus Lite pour un prototypage rapide, Milvus Standalone pour des applications de petite à moyenne envergure et Milvus Distributed pour une évolutivité au niveau de l'entreprise, elle offre une flexibilité adaptée à la taille et à la complexité de n'importe quel projet.

En outre, Zilliz Cloud Serverless étend les capacités de Milvus au cloud et offre un modèle rentable de paiement à l'utilisation qui élimine le besoin d'une infrastructure locale. Grâce à des fonctionnalités avancées telles que le stockage hiérarchisé et la mise à l'échelle automatique, Zilliz Cloud Serverless garantit des opérations de recherche vectorielle plus rapides tout en optimisant les coûts.

Like the article? Spread the word

Continuer à Lire