Qu'est-ce que le Milvus ?
Milvus est un oiseau de proie appartenant au genre Milvus de la famille des Accipitridés, réputé pour sa vitesse en vol, sa vue perçante et sa remarquable capacité d'adaptation.
Zilliz a choisi le nom de Milvus pour sa base de données vectorielle open source, hautement performante et évolutive, qui fonctionne efficacement dans un large éventail d’environnements, de l’ordinateur portable aux systèmes distribués à grande échelle. Elle est disponible à la fois sous forme de logiciel open source et de service cloud.
Développé par Zilliz et bientôt cédé à la LF AI & Data Foundation, sous l’égide de la Linux Foundation, Milvus est devenu l’un des principaux projets mondiaux de bases de données vectorielles open source. Il est distribué sous licence Apache 2.0, et la plupart de ses contributeurs sont des experts issus de la communauté du calcul haute performance (HPC), spécialisés dans la construction de systèmes à grande échelle et l’optimisation de code tenant compte des capacités matérielles. Parmi les principaux contributeurs figurent des professionnels de Zilliz, ARM, NVIDIA, AMD, Intel, Meta, IBM, Salesforce, Alibaba et Microsoft.
Il est intéressant de noter que chaque projet open source de Zilliz porte le nom d’un oiseau, une convention de nommage qui symbolise la liberté, la clairvoyance et l’évolution agile de la technologie.
Données non structurées, représentations vectorielles et Milvus
Les données non structurées, telles que le texte, les images et l’audio, présentent des formats variés et recèlent une sémantique sous-jacente riche, ce qui rend leur analyse difficile. Pour gérer cette complexité, on utilise des représentations vectorielles afin de convertir les données non structurées en vecteurs numériques qui en capturent les caractéristiques essentielles. Ces vecteurs sont ensuite stockés dans une base de données vectorielle, permettant ainsi des recherches et des analyses rapides et évolutives.
Milvus offre de solides capacités de modélisation des données, vous permettant d’organiser vos données non structurées ou multimodales en collections structurées. Il prend en charge un large éventail de types de données pour différentes modélisations d’attributs, y compris les types numériques et de caractères courants, divers types de vecteurs, les tableaux, les ensembles et le format JSON, vous évitant ainsi d’avoir à gérer plusieurs systèmes de bases de données.
Données non structurées, représentations vectorielles et Milvus
Milvus propose trois modes de déploiement, couvrant une large gamme d’échelles de données — du prototypage local dans Jupyter Notebooks aux clusters Kubernetes massifs gérant des dizaines de milliards de vecteurs :
- Milvus Lite est une bibliothèque Python qui s’intègre facilement à vos applications. En tant que version allégée de Milvus, elle est idéale pour le prototypage rapide dans Jupyter Notebooks ou pour une exécution sur des périphériques en périphérie disposant de ressources limitées. En savoir plus.
- Milvus Standalone est un déploiement serveur sur une seule machine, tous les composants étant regroupés dans une seule image Docker pour faciliter le déploiement. En savoir plus.
- Milvus Distributed peut être déployé sur des clusters Kubernetes. Il dispose d’une architecture cloud native conçue pour des scénarios à l’échelle du milliard, voire au-delà. Cette architecture garantit la redondance des composants critiques. En savoir plus.
Pourquoi Milvus est-il si rapide ?
Milvus a été conçu dès le départ pour être un système de base de données vectorielle hautement efficace. Dans la plupart des cas, Milvus surpasse les autres bases de données vectorielles de 2 à 5 fois (voir les résultats de VectorDBBench). Ces hautes performances sont le fruit de plusieurs choix de conception clés :
Optimisation adaptée au matériel: afin de permettre à Milvus de s’adapter à divers environnements matériels, nous avons optimisé ses performances spécifiquement pour de nombreuses architectures et plateformes matérielles, notamment AVX512, SIMD, les GPU et les SSD NVMe.
Algorithmes de recherche avancés: Milvus prend en charge un large éventail d’algorithmes d’indexation et de recherche en mémoire et sur disque, notamment IVF, HNSW, DiskANN et bien d’autres, qui ont tous été profondément optimisés. Par rapport à des implémentations courantes telles que FAISS et HNSWLib, Milvus offre des performances supérieures de 30 % à 70 %.
Moteur de recherche en C++: plus de 80 % des performances d’une base de données vectorielle dépendent de son moteur de recherche. Milvus utilise le C++ pour ce composant essentiel en raison des hautes performances de ce langage, de ses possibilités d’optimisation de bas niveau et de sa gestion efficace des ressources. Plus important encore, Milvus intègre de nombreuses optimisations de code adaptées au matériel, allant de la vectorisation au niveau de l’assembleur à la parallélisation multithread et à la planification, afin d’exploiter pleinement les capacités du matériel.
Orienté colonnes: Milvus est un système de base de données vectorielle orienté colonnes. Ses principaux avantages découlent des modèles d’accès aux données. Lors de l’exécution de requêtes, une base de données orientée colonnes ne lit que les champs spécifiques concernés par la requête, plutôt que des lignes entières, ce qui réduit considérablement la quantité de données consultées. De plus, les opérations sur des données organisées en colonnes peuvent être facilement vectorisées, ce qui permet de les appliquer à l’ensemble des colonnes en une seule fois, améliorant ainsi encore davantage les performances.
Ce qui rend Milvus si évolutif
En 2022, Milvus prenait en charge des vecteurs à l’échelle du milliard, et en 2023, il a évolué vers des dizaines de milliards tout en conservant une stabilité constante, prenant en charge des scénarios à grande échelle pour plus de 300 grandes entreprises, notamment Salesforce, PayPal, Shopee, Airbnb, eBay, NVIDIA, IBM, AT&T, LINE, ROBLOX, Inflection, etc.
L’architecture système cloud-native et hautement découplée de Milvus garantit que le système peut s’étendre en continu à mesure que les données augmentent :
Architecture système hautement découplée de Milvus
Milvus est lui-même entièrement sans état, ce qui permet de le faire évoluer facilement à l’aide de Kubernetes ou de clouds publics. De plus, les composants de Milvus sont bien découplés : les trois tâches les plus critiques — la recherche, l’insertion de données et l’indexation/compactage — sont conçues comme des processus facilement parallélisables, dont la logique complexe est isolée. Cela garantit que les nœuds de requête, de données et d’index correspondants peuvent évoluer à la fois en profondeur et en largeur de manière indépendante, optimisant ainsi les performances et la rentabilité.
Types de recherches pris en charge par Milvus
Milvus prend en charge divers types de fonctions de recherche pour répondre aux exigences de différents cas d’utilisation :
- Recherche ANN: trouve les K vecteurs les plus proches de votre vecteur de requête.
- Recherche avec filtrage: effectue une recherche ANN selon des conditions de filtrage spécifiées.
- Recherche par plage: trouve les vecteurs situés dans un rayon spécifié autour de votre vecteur de requête.
- Recherche hybride: effectue une recherche ANN en fonction de plusieurs champs vectoriels.
- Recherche en texte intégral: recherche en texte intégral basée sur l'algorithme BM25.
- Réclassement: ajuste l'ordre des résultats de recherche en fonction de critères supplémentaires ou d'un algorithme secondaire, affinant ainsi les résultats initiaux de la recherche ANN.
- Récupération: récupère les données à l'aide de leurs clés primaires.
- Requête: récupère les données à l'aide d'expressions spécifiques.
Ensemble complet de fonctionnalités
Outre les fonctionnalités de recherche clés mentionnées ci-dessus, Milvus propose également un ensemble de fonctionnalités développées autour des recherches ANN afin que vous puissiez exploiter pleinement ses capacités.
API et SDK
- API RESTful (officielle)
- PyMilvus (SDK Python) (officiel)
- SDK Go (officiel)
- SDK Java (officiel)
- SDKNode.js (JavaScript) (officiel)
- C# (fourni par Microsoft)
- SDK C++ (officiel)
- SDK Rust (en cours de développement)
Types de données avancés
Outre les types de données primitifs, Milvus prend en charge divers types de données avancés ainsi que les métriques de distance qui leur sont associées.
- Vecteurs creux
- Vecteurs binaires
- Prise en charge de JSON
- Prise en charge des tableaux
- Géolocalisation
- Texte (en cours de développement)
Pourquoi Milvus ?
Haute performance à grande échelle et haute disponibilité
Milvus dispose d’une architecture distribuée qui sépare le calcul et le stockage. Milvus peut évoluer horizontalement et s’adapter à divers modèles de trafic, atteignant ainsi des performances optimales en augmentant indépendamment le nombre de nœuds de requête pour les charges de travail à forte intensité de lecture et le nombre de nœuds de données pour les charges de travail à forte intensité d’écriture. Les microservices sans état sur K8s permettent une reprise rapide en cas de panne, garantissant ainsi une haute disponibilité. La prise en charge des répliques renforce encore la tolérance aux pannes et le débit en chargeant des segments de données sur plusieurs nœuds de requête. Consultez les tests de performance pour comparer les performances.
Prise en charge de divers types d’index vectoriels et accélération matérielle
Milvus sépare le système du moteur de recherche vectorielle proprement dit, ce qui lui permet de prendre en charge tous les principaux types d’index vectoriels optimisés pour différents scénarios, notamment HNSW, IVF, FLAT (brute-force), SCANN et DiskANN, avec des variantes basées sur la quantification et mmap. Milvus optimise la recherche vectorielle pour des fonctionnalités avancées telles que le filtrage par métadonnées et la recherche par plage. De plus, Milvus met en œuvre une accélération matérielle pour améliorer les performances de la recherche vectorielle et prend en charge l’indexation sur GPU, comme le CAGRA de NVIDIA.
Multitenance flexible et stockage « chaud »/« froid »
Milvus prend en charge la multi-location grâce à l’isolation au niveau de la base de données, de la collection, de la partition ou de la clé de partition. Ces stratégies flexibles permettent à un seul cluster de gérer de centaines à des millions de locataires, tout en garantissant des performances de recherche optimisées et un contrôle d’accès flexible. Milvus améliore la rentabilité grâce au stockage « chaud » et « froid ». Les données « chaudes », fréquemment consultées, peuvent être stockées en mémoire ou sur des SSD pour de meilleures performances, tandis que les données « froides », moins consultées, sont conservées sur un stockage plus lent et économique. Ce mécanisme permet de réduire considérablement les coûts tout en maintenant des performances élevées pour les tâches critiques.
Vecteurs clairsemés pour la recherche en texte intégral et la recherche hybride
Outre la recherche sémantique via des vecteurs denses, Milvus prend également en charge nativement la recherche en texte intégral avec BM25 ainsi que des représentations clairsemées apprises telles que SPLADE et BGE-M3. Les utilisateurs peuvent stocker des vecteurs clairsemés et des vecteurs denses dans la même collection, et définir des fonctions pour reclasser les résultats issus de plusieurs requêtes de recherche. Voir des exemples de recherche hybride combinant recherche sémantique et recherche en texte intégral.
Sécurité des données et contrôle d’accès granulaire
Milvus garantit la sécurité des données grâce à la mise en œuvre d’une authentification obligatoire des utilisateurs, du chiffrement TLS et d’un contrôle d’accès basé sur les rôles (RBAC). L’authentification des utilisateurs garantit que seuls les utilisateurs autorisés disposant d’identifiants valides peuvent accéder à la base de données, tandis que le chiffrement TLS sécurise toutes les communications au sein du réseau. De plus, le RBAC permet un contrôle d’accès fin en attribuant des autorisations spécifiques aux utilisateurs en fonction de leurs rôles. Ces fonctionnalités font de Milvus un choix robuste et sécurisé pour les applications d’entreprise, protégeant les données sensibles contre tout accès non autorisé et toute violation potentielle.
Intégrations d’IA
Intégrations de modèles d’embedding Les modèles d’embedding convertissent les données non structurées en une représentation numérique dans un espace de données à haute dimension, afin que vous puissiez les stocker dans Milvus. Actuellement, PyMilvus, le SDK Python, intègre plusieurs modèles d’embedding afin que vous puissiez rapidement préparer vos données sous forme de vecteurs d’embedding. Pour plus de détails, consultez la présentation de l’embedding.
Intégrations de modèles de reclassement Dans le domaine de la recherche d’informations et de l’IA générative, un reclassement est un outil essentiel qui optimise l’ordre des résultats issus des recherches initiales. PyMilvus intègre également plusieurs modèles de reclassement afin d’optimiser l’ordre des résultats renvoyés par les recherches initiales. Pour plus de détails, consultez la présentation des reclassements.
Intégrations de LangChain et d’autres outils d’IA À l’ère de l’IA générative (GenAI), des outils tels que LangChain suscitent un vif intérêt chez les développeurs d’applications. En tant que composant central, Milvus sert généralement de magasin de vecteurs dans ces outils. Pour savoir comment intégrer Milvus à vos outils d’IA préférés, consultez nos sections « Intégrations » et « Tutoriels ».
Outils et écosystème
Attu Attu est une interface graphique intuitive tout-en-un qui vous aide à gérer Milvus et les données qu’il stocke. Pour plus de détails, consultez le dépôt Attu.
Birdwatcher Birdwatcher est un outil de débogage pour Milvus. En l’utilisant pour vous connecter à etcd, vous pouvez vérifier l’état de votre système Milvus ou le configurer à la volée. Pour plus de détails, consultez la page BirdWatcher.
Intégrations Prometheus et Grafana Prometheus est une suite d’outils open source de surveillance et d’alerte pour Kubernetes. Grafana est une suite de visualisation open source capable de se connecter à toutes les sources de données. Vous pouvez utiliser Prometheus et Grafana comme fournisseurs de services de surveillance pour surveiller visuellement les performances de Milvus en mode distribué. Pour plus de détails, consultez la section Déploiement des services de surveillance.
Milvus Backup Milvus Backup est un outil permettant aux utilisateurs de sauvegarder et de restaurer les données Milvus. Il fournit à la fois une interface en ligne de commande (CLI) et une API afin de s’adapter à différents scénarios d’application. Pour plus de détails, consultez la section Milvus Backup.
Milvus Capture Data Change (CDC) Milvus CDC permet de répliquer les modifications de données d’un cluster Milvus vers un autre à des fins de reprise après sinistre en mode actif-passif. Pour plus de détails, consultez la section « Milvus CDC ».
Connecteurs Milvus Milvus a prévu un ensemble de connecteurs pour vous permettre d’intégrer de manière transparente Milvus à des outils tiers, tels qu’Apache Spark. Actuellement, vous pouvez utiliser notre connecteur Spark pour transmettre vos données Milvus à Apache Spark en vue d’un traitement par apprentissage automatique. Pour plus de détails, consultez la section « Connecteur Spark-Milvus ».
Services de transmission vectorielle (VTS) Milvus fournit un ensemble d’outils vous permettant de transférer vos données entre une instance Milvus et diverses sources de données, notamment les clusters Zilliz, Elasticsearch, Postgres (PgVector) et une autre instance Milvus. Pour plus de détails, consultez la documentation sur les VTS.