HNSWlib vs Voyager : choisir le bon outil de recherche vectorielle pour votre application GenAI
La recherche vectorielle est essentielle dans les applications d’IA où l’objectif est de trouver des similarités entre des points de données de grande dimension. Des outils comme HNSWlib et Voyager sont conçus pour effectuer efficacement des recherches de plus proches voisins afin que les systèmes puissent récupérer rapidement des éléments associés dans de grands jeux de données. Bien que HNSWlib ait gagné en popularité pour sa vitesse et sa précision, Voyager est le dernier ajout de Spotify visant à répondre aux limites de HNSWlib.
Cet article compare les deux, en expliquant leurs fonctionnalités et leurs points forts ainsi que leurs différences, afin que vous puissiez décider lequel convient le mieux à votre projet.
Qu’est-ce que la recherche vectorielle ?
Avant d’entrer dans les détails de HNSWlib et de Voyager, il est essentiel de comprendre la recherche vectorielle. En termes simples, la recherche vectorielle, ou recherche de similarité vectorielle, trouve les vecteurs (points de données) les plus proches dans un espace de grande dimension par rapport à un vecteur de requête donné. Ces vecteurs sont souvent générés par des modèles d’apprentissage automatique pour capturer l’essence des données non structurées (par exemple, le sens d’une phrase ou les caractéristiques d’une image).
Contrairement aux bases de données traditionnelles, où les recherches reposent sur des correspondances exactes ou du filtrage, la recherche vectorielle se concentre sur la similarité. L’objectif est de trouver des vecteurs qui sont « proches » les uns des autres selon une métrique de distance (comme la distance euclidienne ou la similarité cosinus). Par exemple, les vecteurs peuvent représenter des mots ou des phrases dans le traitement du langage naturel (NLP), et la recherche vectorielle aide à trouver les mots ou textes les plus similaires sur le plan sémantique. Dans les systèmes de recommandation, la recherche vectorielle identifie les éléments les plus proches des préférences d’un utilisateur. Les recherches vectorielles jouent également un rôle crucial dans la génération augmentée par récupération (RAG), une technique qui améliore la sortie des grands modèles de langage (LLMs) en leur fournissant des informations contextuelles supplémentaires.
Il existe de nombreuses solutions disponibles sur le marché pour effectuer des recherches vectorielles, notamment :
- Bibliothèques de recherche vectorielle telles que HNSWlib et Voyager.
- Bases de données vectorielles spécialement conçues telles que Milvus, Zilliz Cloud (Milvus entièrement géré)
- Bases de données vectorielles légères telles que Chroma et Milvus Lite.
- Bases de données traditionnelles avec des extensions de recherche vectorielle
Qu’est-ce que HNSWlib ? Vue d’ensemble
HNSWlib est une bibliothèque open source pour la recherche approximative de plus proches voisins (ANNS). Elle repose sur l’algorithme Hierarchical Navigable Small World (HNSW), qui forme une structure basée sur un graphe où les points de données sont des nœuds. L’algorithme parcourt ce graphe pour trouver rapidement des voisins approximatifs, ce qui rend HNSWlib très efficace pour la recherche vectorielle.
Fonctionnalités et points forts de HNSWlib
- Algorithme HNSW : Le cœur de la puissance de HNSWlib est l’algorithme HNSW, qui utilise une structure de graphe multicouche pour naviguer entre les points de données en fonction de leur proximité afin de trouver les plus proches voisins.
- Vitesse et précision : HNSWlib est connu pour son équilibre entre vitesse et précision. Il fournit des résultats rapides sans perte significative de précision, ce qui est adapté aux cas d’utilisation qui nécessitent des résultats de plus proches voisins de haute qualité.
- Efficacité mémoire : HNSWlib a une faible empreinte mémoire tout en étant capable de traiter de grands jeux de données, ce qui est adapté aux applications disposant d’une mémoire limitée.
- Scalabilité : HNSWlib s’adapte bien aux jeux de données comportant des millions d’entrées, ce qui convient aux petites comme aux grandes applications.
- Flexibilité : La bibliothèque vous permet d’ajuster des paramètres de recherche comme la précision et le rappel afin d’optimiser votre cas d’utilisation.
HNSWlib est devenu le choix de référence pour les tâches de recherche ANN en raison de sa vitesse, de sa flexibilité et de sa fiabilité.
Qu’est-ce que Voyager ? Présentation
Voyager est la nouvelle bibliothèque de recherche de plus proches voisins de Spotify, conçue après une utilisation intensive de HNSWlib et l’identification d’axes d’amélioration. Bien qu’elle soit basée sur l’algorithme HNSW comme HNSWlib, Voyager dispose de plusieurs optimisations et fonctionnalités supplémentaires qui la rendent plus adaptée aux environnements de production.
Fonctionnalités et points forts de Voyager
- Plus rapide et plus précis : Voyager s’appuie sur la vitesse et la précision de HNSWlib, mais va plus loin, avec une recherche plus rapide et une précision encore plus élevée dans certains cas, en particulier pour les applications complexes à grande échelle.
- Efficacité mémoire : Voyager utilise la représentation en virgule flottante 8 bits E4M3, ce qui lui permet de gérer des données à haute dimension avec une utilisation mémoire moindre par rapport à HNSWlib lors de la création de l’index.
- Multithreading et scalabilité : Voyager prend en charge la création et l’interrogation d’index entièrement multithreadées afin de gérer des jeux de données plus volumineux que HNSWlib, en particulier dans des environnements distribués ou cloud.
- Prise en charge des langages : Alors que HNSWlib est principalement une bibliothèque Python, Voyager prend en charge à la fois Python et Java, ce qui le rend plus flexible pour les environnements de production qui nécessitent la prise en charge de plusieurs langages.
- Prêt pour la production : Voyager est conçu pour une utilisation en entreprise, avec des fonctionnalités comme des fichiers d’index tolérants aux pannes, la détection de corruption et l’intégration avec Google Cloud, ce qui le rend plus robuste et scalable pour les applications à fort trafic.
Voyager reprend les bases solides de HNSWlib et les améliore avec des fonctionnalités qui le rendent plus adapté aux systèmes modernes à grande échelle.
Différences clés entre HNSWlib et Voyager
Méthode de recherche
HNSWlib et Voyager utilisent tous deux l’algorithme HNSW, connu pour sa vitesse et sa précision dans les recherches de plus proches voisins. Cependant, Voyager dispose d’optimisations qui le rendent plus rapide et plus efficace en mémoire que HNSWlib. Par exemple, la création d’index multithreadée de Voyager peut traiter de grands jeux de données plus rapidement, et sa gestion optimisée de la mémoire réduit la consommation de ressources, ce qui le rend plus adapté aux applications d’entreprise.
Données
Les deux outils gèrent des données vectorielles à haute dimension, mais Voyager possède davantage de fonctionnalités qui le rendent plus adapté aux environnements cloud à grande échelle. La prise en charge par Voyager du streaming de données depuis Google Cloud Services et des fichiers d’index tolérants aux pannes le rend plus fiable pour les systèmes distribués. HNSWlib convient aux configurations locales ou aux applications plus petites, mais ne dispose pas des fonctionnalités avancées de gestion des données qui rendent Voyager plus polyvalent pour les environnements complexes.
Scalabilité et performances
HNSWlib est déjà scalable et fonctionne bien pour la plupart des cas d’utilisation. Mais Voyager dispose du multithreading, ce qui lui donne un avantage lorsqu’il traite des jeux de données plus volumineux ou des environnements où le traitement parallèle est nécessaire. Voyager peut créer et interroger des index en parallèle, réduisant le temps de traitement des systèmes à grande échelle. De plus, ses optimisations mémoire, comme la représentation en virgule flottante 8 bits, lui permettent de gérer des jeux de données plus volumineux avec moins de mémoire, ce qui le rend plus économe en ressources que HNSWlib.
Flexibilité et personnalisation
Les deux bibliothèques sont flexibles en ce qui concerne les paramètres de recherche, mais Voyager offre davantage de personnalisation pour une utilisation en production. Il prend en charge Python et Java, qui peuvent être intégrés dans davantage d’environnements. De plus, ses fonctionnalités basées sur le cloud, comme l’intégration à Google Cloud et la tolérance aux pannes, le rendent plus adapté aux applications modernes à grande échelle. HNSWlib est flexible, mais ne dispose pas de certaines de ces fonctionnalités avancées et est plus limité dans les environnements où ces fonctionnalités sont nécessaires.
Intégration et écosystème
HNSWlib est conçu pour être intégré dans des flux de travail basés sur Python, il convient donc aux pipelines d’apprentissage automatique et aux applications plus petites. Cependant, il ne dispose pas des capacités d’intégration plus larges de Voyager. Voyager prend en charge Python, Java et l’intégration à Google Cloud, il est donc plus polyvalent dans les déploiements de niveau entreprise. Voyager peut gérer des systèmes distribués et des environnements basés sur le cloud, ce qui en fait une solution plus complète pour les organisations ayant des besoins d’infrastructure complexes.
Facilité d’utilisation
HNSWlib est facile à utiliser et à configurer, en particulier pour les utilisateurs de Python. Il convient à ceux qui veulent une bibliothèque simple, sans fioritures, pour la recherche ANN. Voyager dispose de fonctionnalités plus avancées, mais d’une courbe d’apprentissage légèrement plus élevée en raison du multithreading, de la tolérance aux pannes et de l’intégration au cloud. Cependant, sa conception prête pour la production et sa documentation étendue pour Python et Java facilitent son intégration dans des systèmes plus vastes et complexes.
Coût
Les deux sont open source et gratuits. Cependant, l’efficacité mémoire et le multithreading de Voyager peuvent réduire la consommation de ressources dans les déploiements à grande échelle ou basés sur le cloud, entraînant des économies de coûts. La décision ici dépendrait du fait que la vitesse supplémentaire, l’efficacité mémoire et les fonctionnalités de Voyager valent la complexité ou le coût d’infrastructure supplémentaires.
Sécurité
Ni HNSWlib ni Voyager ne disposent de fonctionnalités de sécurité intégrées comme le chiffrement ou le contrôle d’accès, celles-ci doivent donc être mises en œuvre séparément. Cependant, les fichiers d’index tolérants aux pannes et la détection de corruption de Voyager le rendent plus fiable pour les environnements critiques en matière d’intégrité des données.
Quand choisir HNSWlib
HNSWlib est un excellent choix si :
- Vous avez besoin d’un outil de recherche ANN rapide et précis pour des applications à plus petite échelle.
- Votre projet est basé sur Python et ne nécessite pas de prise en charge de Java.
- Vous travaillez dans un environnement local ou avec des jeux de données plus petits où la tolérance aux pannes avancée et les fonctionnalités cloud sont inutiles.
- Vous voulez une solution simple, facile à mettre en œuvre, avec une surcharge minimale.
Quand choisir Voyager
Voyager est plus adapté si :
- Vous avez besoin d’une solution prête pour la production avec prise en charge à la fois de Python et Java.
- Votre projet implique des jeux de données à grande échelle et nécessite un traitement multithread pour accélérer la création d’index et les requêtes.
- Vous avez besoin d’une efficacité mémoire pour gérer des données de grande dimension dans des environnements aux ressources limitées.
- Votre infrastructure inclut des environnements basés sur le cloud ; vous avez besoin de fonctionnalités comme l’intégration à Google Cloud et des fichiers d’index tolérants aux pannes.
- Vous avez besoin d’une personnalisation avancée et d’un outil optimisé pour les déploiements de niveau entreprise.
En fin de compte, votre choix entre HNSWlib et Voyager dépend des exigences spécifiques de votre projet. Les deux outils offrent de solides performances, mais votre choix doit s’aligner sur l’échelle et la complexité de votre application ainsi que sur les ressources et l’infrastructure dont vous disposez.
Comparaison des bibliothèques de recherche vectorielle et des bases de données vectorielles conçues à cet effet
Les bibliothèques de recherche vectorielle comme HNSWlib et Voyager et les bases de données vectorielles conçues à cet effet comme Milvus visent toutes deux à résoudre le problème de recherche de similarité pour les données vectorielles de grande dimension, mais elles jouent des rôles différents.
Les bibliothèques de recherche vectorielle se concentrent uniquement sur la tâche de recherche efficace du plus proche voisin. Elles offrent des solutions légères et rapides pour trouver des vecteurs similaires à un vecteur de requête. Elles sont souvent utilisées dans des environnements plus petits, à nœud unique, ou pour des applications avec des jeux de données statiques ou de taille modérée. Cependant, elles manquent généralement de fonctionnalités pour gérer des données dynamiques, fournir de la persistance ou évoluer sur des systèmes distribués. Les développeurs utilisant ces bibliothèques doivent généralement gérer manuellement la gestion des données, les mises à jour et la mise à l’échelle.
D’un autre côté, les bases de données vectorielles spécialement conçues comme Milvus et Zilliz Cloud (le Milvus géré) sont des systèmes complets conçus pour la gestion de données vectorielles à grande échelle. Ces bases de données vont au-delà de la simple recherche vectorielle, en offrant des fonctionnalités telles que le stockage persistant, les mises à jour en temps réel, une architecture distribuée et des capacités de requête avancées. Elles prennent en charge les jeux de données dynamiques et peuvent facilement gérer des applications en temps réel où les données sont fréquemment mises à jour. De plus, les bases de données vectorielles incluent souvent une prise en charge intégrée de la combinaison des recherches vectorielles avec le filtrage traditionnel et les requêtes de métadonnées, ce qui les rend idéales pour les environnements de production exigeant évolutivité, haute disponibilité et fonctionnalités de recherche plus complexes.
- Découvrez les dernières nouvelles fonctionnalités et améliorations de Zilliz Cloud : Mise à jour de Zilliz Cloud : services de migration, connecteurs Fivetran, multi-réplicas, et plus encore
Quand choisir chaque solution de recherche vectorielle
Choisissez les bibliothèques de recherche vectorielle si :
- Vous disposez d’un jeu de données de petite à moyenne taille, relativement statique.
- Vous préférez un contrôle total sur les algorithmes d’indexation et de recherche.
- Vous intégrez la recherche dans un système existant et pouvez gérer l’infrastructure.
Choisissez les bases de données vectorielles spécialement conçues si :
- Vous devez évoluer jusqu’à des milliards de vecteurs sur des systèmes distribués.
- Votre jeu de données change fréquemment, nécessitant des mises à jour en temps réel.
- Vous préférez des solutions gérées qui prennent en charge le stockage, la mise à l’échelle et les optimisations de requêtes pour vous.
En résumé, les bibliothèques de recherche vectorielle conviennent le mieux aux cas d’utilisation plus simples, à plus petite échelle, où la vitesse et l’efficacité mémoire sont prioritaires, mais où la complexité opérationnelle est minimale. Les bases de données vectorielles spécialement conçues, en revanche, sont conçues pour des systèmes à grande échelle et de niveau production qui exigent une gestion dynamique des données, l’évolutivité et la facilité d’utilisation, offrant souvent des avantages opérationnels importants aux développeurs gérant des applications complexes.
Évaluer et comparer toutes les solutions de recherche vectorielle
Bien, maintenant nous avons appris la différence entre les différentes solutions de recherche vectorielle. Les questions suivantes sont : comment vous assurer que votre algorithme de recherche renvoie des résultats précis et le fait à une vitesse fulgurante ? Comment évaluer l’efficacité de différents algorithmes ANN, en particulier à grande échelle ?
Pour répondre à ces questions, nous avons besoin d’un outil de benchmarking. De nombreux outils de ce type sont disponibles, et deux se distinguent comme les plus efficaces : ANN benchmarks et VectorDBBench.
ANN benchmarks
ANN Benchmarks (benchmarks de plus proches voisins approximatifs) est un projet open source conçu pour évaluer et comparer les performances de divers algorithmes de plus proches voisins approximatifs (ANN). Il fournit un cadre standardisé pour benchmarker différents algorithmes sur des tâches telles que la recherche vectorielle en haute dimension, permettant aux développeurs et aux chercheurs de mesurer des métriques comme la vitesse de recherche, la précision et l’utilisation de la mémoire sur divers jeux de données. En utilisant ANN-Benchmarks, vous pouvez évaluer les compromis entre vitesse et précision pour des algorithmes comme ceux que l’on trouve dans des bibliothèques telles que Faiss, Annoy, HNSWlib et d’autres, ce qui en fait un outil précieux pour comprendre quels algorithmes fonctionnent le mieux pour des applications spécifiques.
Dépôt GitHub ANN Benchmarks : https://github.com/erikbern/ann-benchmarks
Site Web ANN Benchmarks : https://ann-benchmarks.com/
VectorDBBench : un outil de benchmarking open source
VectorDBBench est un outil de benchmarking open source conçu pour les utilisateurs qui ont besoin de systèmes de stockage et de récupération de données haute performance, en particulier de bases de données vectorielles. Cet outil permet aux utilisateurs de tester et de comparer les performances de différents systèmes de bases de données vectorielles tels que Milvus et Zilliz Cloud (le Milvus géré) en utilisant leurs propres jeux de données, et de déterminer celui qui convient le mieux à leurs cas d’utilisation. VectorDBBench est écrit en Python et distribué sous la licence open source MIT, ce qui signifie que tout le monde peut l’utiliser, le modifier et le distribuer librement.
Dépôt GitHub VectorDBBench : https://github.com/zilliztech/VectorDBBench
Jetez un coup d’œil rapide aux performances des bases de données vectorielles grand public sur le classement VectorDBBench.
Techniques et analyses sur l’évaluation de VectorDB :
Ressources supplémentaires sur VectorDB, GenAI et ML
Continuer à lire

Introducing Loon: A New Storage Engine for Vector Data That Never Stops Changing
Loon is a new storage engine for Milvus 3.0 and Zilliz Vector Lakebase, built to manage evolving vector datasets with ColumnGroups, row ID alignment, and Manifests.

We spent 8 years making vector databases faster. Then we stopped.
Rarely queried embeddings still need to stay searchable. See how Vector Lakebase enables on-demand vector search without always-on compute costs.

Vector Databases vs. Time Series Databases
Use a vector database for similarity search and semantic relationships; use a time series database for tracking value changes over time.
The Definitive Guide to Choosing a Vector Database
Overwhelmed by all the options? Learn key features to look for & how to evaluate with your own data. Choose with confidence.


