Qu'est-ce que le Milvus ?
Milvus est un oiseau de proie du genre Milvus de la famille des faucons Accipaitridae, célèbre pour sa rapidité en vol, son acuité visuelle et sa remarquable capacité d'adaptation.
Zilliz adopte le nom de Milvus pour sa base de données vectorielles 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 libre et de service en nuage.
Développé par Zilliz et rapidement donné à la LF AI & Data Foundation sous la Fondation Linux, Milvus est devenu l'un des principaux projets de base de données vectorielles open-source au monde. Il est distribué sous la licence Apache 2.0, et la plupart des contributeurs sont des experts de la communauté du calcul haute performance (HPC), spécialisés dans la construction de systèmes à grande échelle et dans l'optimisation de codes tenant compte du matériel. Les principaux contributeurs sont 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 qui symbolise la liberté, la prévoyance et l'évolution agile de la technologie.
Données non structurées, Embeddings et Milvus
Les données non structurées, telles que le texte, les images et le son, varient en termes de format et comportent une riche sémantique sous-jacente, ce qui rend leur analyse difficile. Pour gérer cette complexité, les embeddings sont utilisés pour convertir les données non structurées en vecteurs numériques qui capturent leurs caractéristiques essentielles. Ces vecteurs sont ensuite stockés dans une base de données vectorielle, ce qui permet des recherches et des analyses rapides et évolutives.
Milvus offre de solides capacités de modélisation des données, ce qui vous permet 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, notamment les types numériques et de caractères courants, divers types de vecteurs, des tableaux, des ensembles et JSON, ce qui vous évite d'avoir à gérer plusieurs systèmes de base de données.
Données non structurées, embeddings et Milvus
Milvus propose trois modes de déploiement, couvrant un large éventail d'échelles de données, du prototypage local dans les blocs-notes Jupyter aux clusters Kubernetes massifs gérant des dizaines de milliards de vecteurs :
- Milvus Lite est une bibliothèque Python qui peut être facilement intégrée dans vos applications. En tant que version légère de Milvus, elle est idéale pour le prototypage rapide dans les blocs-notes Jupyter ou l'exécution sur des dispositifs périphériques avec des ressources limitées. En savoir plus.
- Milvus Standalone est un déploiement de serveur sur une seule machine, avec tous les composants regroupés dans une image Docker unique pour un déploiement pratique. En savoir plus.
- Milvus Distributed peut être déployé sur des clusters Kubernetes, avec une architecture cloud-native conçue pour des scénarios à l'échelle du milliard, voire plus. Cette architecture garantit la redondance des composants critiques. En savoir plus.
Ce qui rend Milvus si rapide?
Milvus a été conçu dès le premier jour pour être un système de base de données vectorielle très 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 performances élevées sont le résultat de plusieurs décisions clés en matière de conception :
Optimisation en fonction du matériel: Pour adapter Milvus à divers environnements matériels, nous avons optimisé ses performances spécifiquement pour de nombreuses architectures et plateformes matérielles, notamment AVX512, SIMD, GPU et NVMe SSD.
Algorithmes de recherche avancés: Milvus prend en charge une large gamme d'algorithmes d'indexation/recherche en mémoire et sur disque, notamment IVF, HNSW, DiskANN, et bien d'autres, qui ont tous été profondément optimisés. Comparé à des implémentations populaires comme 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 sont déterminées par son moteur de recherche. Milvus utilise C++ pour ce composant critique en raison des performances élevées du langage, de l'optimisation de bas niveau et de la gestion efficace des ressources. Plus important encore, Milvus intègre de nombreuses optimisations de code tenant compte du matériel, allant de la vectorisation au niveau de l'assemblage à la parallélisation et à l'ordonnancement multithread, afin d'exploiter pleinement les capacités du matériel.
Orienté colonnes: Milvus est un système de base de données vectorielles orienté colonnes. Les principaux avantages proviennent des schémas d'accès aux données. Lors de l'exécution des requêtes, une base de données orientée colonnes ne lit que les champs spécifiques impliqués dans la requête, plutôt que des lignes entières, ce qui réduit considérablement la quantité de données accédées. En outre, les opérations sur les données en colonnes peuvent être facilement vectorisées, ce qui permet d'appliquer des opérations à l'ensemble des colonnes en une seule fois, ce qui améliore encore les performances.
Ce qui rend Milvus si évolutif
En 2022, Milvus a pris en charge des vecteurs à l'échelle du milliard, et en 2023, il est passé à des dizaines de milliards avec une stabilité constante, alimentant 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 de système hautement découplée et native pour l'informatique en nuage de Milvus garantit que le système peut s'étendre continuellement au fur et à mesure que les données augmentent :
Architecture système hautement découplée de Milvus
Milvus lui-même est entièrement sans état, de sorte qu'il peut être facilement mis à l'échelle à l'aide de Kubernetes ou de clouds publics. En outre, les composants de Milvus sont bien découplés, les trois tâches les plus critiques - recherche, insertion de données et indexation/compactage - étant conçues comme des processus facilement parallélisables, avec une logique complexe séparée. Cela garantit que le nœud de requête, le nœud de données et le nœud d'index correspondants peuvent évoluer de manière indépendante, optimisant ainsi les performances et la rentabilité.
Types de recherches prises en charge par Milvus
Milvus prend en charge différents types de fonctions de recherche pour répondre aux exigences des différents cas d'utilisation :
- Recherche ANN: Trouve les K premiers vecteurs les plus proches de votre vecteur d'interrogation.
- Recherche par filtrage: Effectue une recherche ANN dans des conditions de filtrage spécifiées.
- Recherche par plage: Recherche les vecteurs situés dans un rayon spécifié par rapport au vecteur de votre requête.
- Recherche hybride: Effectue une recherche ANN basée sur plusieurs champs vectoriels.
- Recherche en texte intégral: Recherche en texte intégral basée sur BM25.
- Reranking: Ajuste l'ordre des résultats de la recherche en fonction de critères supplémentaires ou d'un algorithme secondaire, en affinant les résultats initiaux de la recherche ANN.
- Récupérer: Récupère les données en fonction de leurs clés primaires.
- Requête: Permet d'extraire des données à l'aide d'expressions spécifiques.
Un ensemble complet de fonctionnalités
Outre les fonctions de recherche clés mentionnées ci-dessus, Milvus fournit également un ensemble de fonctions mises en œuvre autour des recherches ANN afin que vous puissiez utiliser pleinement ses capacités.
API et SDK
- API RESTful (officielle)
- PyMilvus (SDK Python) (officiel)
- Go SDK (officiel)
- SDK Java (officiel)
- SDKNode.j s (JavaScript) (officiel)
- C# (contribué 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 et leurs métriques de distance respectives.
- Vecteurs épars
- Vecteurs binaires
- Support JSON
- Prise en charge des tableaux
- Texte (en cours de développement)
- Géolocalisation (en cours de développement)
Pourquoi Milvus ?
Haute performance à l'échelle et haute disponibilité
Milvus présente une architecture distribuée qui sépare le calcul et le stockage. Milvus peut évoluer horizontalement et s'adapter à divers modèles de trafic, en atteignant des performances optimales en augmentant indépendamment les nœuds de requêtes pour les charges de travail lourdes en lecture et les nœuds de données pour les charges de travail lourdes en écriture. Les microservices sans état sur K8s permettent une reprise rapide en cas de défaillance, ce qui garantit une haute disponibilité. La prise en charge des répliques améliore encore la tolérance aux pannes et le débit en chargeant des segments de données sur plusieurs nœuds d'interrogation. Voir le benchmark pour une comparaison des performances.
Prise en charge de divers types d'index vectoriels et accélération matérielle
Milvus sépare le système et le moteur de recherche vectorielle principal, 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 (force brute), SCANN et DiskANN, avec des variations basées sur la quantification et mmap. Milvus optimise la recherche vectorielle pour des fonctions avancées telles que le filtrage des métadonnées et la recherche par plage. En outre, Milvus met en œuvre l'accélération matérielle pour améliorer les performances de la recherche vectorielle et prend en charge l'indexation GPU, telle que CAGRA de NVIDIA.
Multi-tenance flexible et stockage à chaud/à froid
Milvus prend en charge la multi-tenance grâce à l'isolation au niveau de la base de données, de la collection, de la partition ou de la clé de partition. Les stratégies flexibles permettent à un cluster unique de gérer des centaines, voire des millions de locataires, et garantissent également des performances de recherche optimisées et un contrôle d'accès flexible. Milvus améliore la rentabilité grâce au stockage à chaud/froid. Les données chaudes fréquemment consultées peuvent être stockées en mémoire ou sur des disques SSD pour de meilleures performances, tandis que les données froides moins consultées sont conservées sur un stockage plus lent et plus é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.
Vecteur clairsemé pour la recherche en texte intégral et la recherche hybride
Outre la recherche sémantique par vecteur dense, Milvus prend également en charge en mode natif la recherche plein texte avec BM25 ainsi que l'intégration éparse apprise telle que SPLADE et BGE-M3. Les utilisateurs peuvent stocker les vecteurs épars et les vecteurs denses dans la même collection et définir des fonctions pour classer les résultats de plusieurs requêtes de recherche. Voir des exemples de recherche hybride avec recherche sémantique + recherche en texte intégral.
Sécurité des données et contrôle d'accès à grain fin
Milvus garantit la sécurité des données en mettant en œuvre l'authentification obligatoire des utilisateurs, le cryptage TLS et le contrôle d'accès basé sur les rôles (RBAC). L'authentification des utilisateurs garantit que seuls les utilisateurs autorisés disposant d'informations d'identification valides peuvent accéder à la base de données, tandis que le cryptage TLS sécurise toutes les communications au sein du réseau. En outre, le RBAC permet un contrôle d'accès précis en attribuant des autorisations spécifiques aux utilisateurs en fonction de leur rôle. Ces fonctionnalités font de Milvus un choix robuste et sécurisé pour les applications d'entreprise, protégeant les données sensibles contre les accès non autorisés et les violations potentielles.
Intégrations AI
Intégrations de modèles d'intégration Les modèles d'intégration convertissent les données non structurées en leur 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'intégration afin que vous puissiez rapidement préparer vos données en intégrations vectorielles. Pour plus de détails, voir Vue d'ensemble de l'intégration.
Intégrations de modèles de reranking Dans le domaine de la recherche d'informations et de l'IA générative, un reranker est un outil essentiel qui optimise l'ordre des résultats 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, reportez-vous à la section Vue d'ensemble des modèles de reclassement.
LangChain et autres intégrations d'outils d'IA À l'ère de la GenAI, les outils tels que LangChain suscitent beaucoup d'attention de la part des développeurs d'applications. En tant que composant de base, Milvus sert généralement de magasin de vecteurs dans ces outils. Pour savoir comment intégrer Milvus dans vos outils d'IA préférés, reportez-vous à nos 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 référentiel Attu.
Birdwatcher Birdwatcher est un outil de débogage pour Milvus. En l'utilisant pour se connecter à etcd, vous pouvez vérifier l'état de votre système Milvus ou le configurer à la volée. Pour plus d'informations, reportez-vous à BirdWatcher.
Intégrations Promethus & Grafana Prometheus est une boîte à outils open-source de surveillance des systèmes et d'alerte pour Kubernetes. Grafana est une pile de visualisation open-source qui peut se connecter à toutes les sources de données. Vous pouvez utiliser Promethus & Grafana en tant que fournisseur de services de surveillance pour surveiller visuellement les performances de Milvus distribué. Pour plus de détails, voir Déploiement des services de surveillance.
Milvus Backup Milvus Backup est un outil qui permet aux utilisateurs de sauvegarder et de restaurer les données Milvus. Il fournit à la fois une interface CLI et une API pour s'adapter à différents scénarios d'application. Pour plus de détails, voir Milvus Backup.
Milvus Capture Data Change (CDC) Milvus-CDC peut capturer et synchroniser des données incrémentielles dans les instances Milvus et garantit la fiabilité des données d'entreprise en les transférant de manière transparente entre les instances source et cible, ce qui facilite la sauvegarde incrémentielle et la reprise après sinistre. Pour plus de détails, voir Milvus CDC.
Connecteurs Milvus Milvus a prévu un ensemble de connecteurs pour vous permettre d'intégrer Milvus de manière transparente à des outils tiers, tels qu'Apache Spark. Actuellement, vous pouvez utiliser notre connecteur Spark pour alimenter vos données Milvus vers Apache Spark en vue d'un traitement d'apprentissage automatique. Pour plus d'informations, reportez-vous à Spark-Milvus Connector.
Vector Transmission Services (VTS) Milvus fournit un ensemble d'outils vous permettant de transférer vos données entre une instance Milvus et un ensemble de sources de données, y compris les clusters Zilliz, Elasticsearch, Postgres (PgVector) et une autre instance Milvus. Pour plus de détails, voir VTS.