Comment sélectionner les paramètres d’index pour un index IVF
Dans Bonnes pratiques pour la configuration de Milvus, certaines bonnes pratiques pour la configuration de Milvus 0.6.0 ont été présentées. Dans cet article, nous présenterons également certaines bonnes pratiques pour définir les paramètres clés dans les clients Milvus pour des opérations telles que la création d’une table, la création d’index et la recherche. Ces paramètres peuvent affecter les performances de recherche.
1. index_file_size
Lors de la création d’une table, le paramètre index_file_size est utilisé pour spécifier la taille, en Mo, d’un fichier unique pour le stockage des données. La valeur par défaut est 1024. Lorsque des données vectorielles sont importées, Milvus combine progressivement les données dans des fichiers. Lorsque la taille du fichier atteint index_file_size, ce fichier n’accepte plus de nouvelles données et Milvus enregistre les nouvelles données dans un autre fichier. Ce sont tous des fichiers de données brutes. Lorsqu’un index est créé, Milvus génère un fichier d’index pour chaque fichier de données brutes. Pour le type d’index IVFLAT, la taille du fichier d’index est approximativement égale à la taille du fichier de données brutes correspondant. Pour l’index SQ8, la taille d’un fichier d’index représente environ 30 pour cent du fichier de données brutes correspondant.
Pendant une recherche, Milvus parcourt chaque fichier d’index un par un. D’après notre expérience, lorsque index_file_size passe de 1024 à 2048, les performances de recherche s’améliorent de 30 à 50 pour cent. Cependant, si la valeur est trop élevée, les fichiers volumineux peuvent ne pas être chargés dans la mémoire GPU (voire dans la mémoire CPU). Par exemple, si la mémoire GPU est de 2 Go et que index_file_size est de 3 Go, le fichier d’index ne peut pas être chargé dans la mémoire GPU. En général, nous définissons index_file_size sur 1024 Mo ou 2048 Mo.
Le tableau suivant montre un test utilisant sift50m pour index_file_size. Le type d’index est SQ8.
1-sift50m-test-results-milvus.
Nous pouvons voir qu’en mode CPU et en mode GPU, lorsque index_file_size est de 2048 Mo au lieu de 1024 Mo, les performances de recherche s’améliorent considérablement.
2. nlist et nprobe
Le paramètre nlist est utilisé pour la création d’index et le paramètre nprobe est utilisé pour la recherche. IVFLAT et SQ8 utilisent tous deux des algorithmes de clustering pour diviser un grand nombre de vecteurs en clusters, ou compartiments. nlist est le nombre de compartiments lors du clustering.
Lors de la recherche avec des index, la première étape consiste à trouver un certain nombre de compartiments les plus proches du vecteur cible, et la deuxième étape consiste à trouver les k vecteurs les plus similaires dans les compartiments selon la distance vectorielle. nprobe est le nombre de compartiments dans la première étape.
En général, augmenter nlist conduit à davantage de compartiments et à moins de vecteurs dans un compartiment lors du clustering. Par conséquent, la charge de calcul diminue et les performances de recherche s’améliorent. Cependant, avec moins de vecteurs pour la comparaison de similarité, le résultat correct pourrait être manqué.
Augmenter nprobe conduit à davantage de compartiments à rechercher. Par conséquent, la charge de calcul augmente et les performances de recherche se dégradent, mais la précision de recherche s’améliore. La situation peut différer selon les jeux de données ayant des distributions différentes. Vous devez également tenir compte de la taille du jeu de données lors de la définition de nlist et nprobe. En général, il est recommandé que nlist puisse être 4 * sqrt(n), où n est le nombre total de vecteurs. Quant à nprobe, vous devez faire un compromis entre précision et efficacité, et la meilleure façon consiste à déterminer la valeur par essais et erreurs.
Le tableau suivant montre un test utilisant sift50m pour nlist et nprobe. Le type d’index est SQ8.
sq8-index-test-sift50m.
Le tableau compare les performances et la précision de recherche en utilisant différentes valeurs de nlist/nprobe. Seuls les résultats GPU sont affichés, car les tests CPU et GPU donnent des résultats similaires. Dans ce test, à mesure que les valeurs de nlist/nprobe augmentent du même pourcentage, la précision de recherche augmente également. Lorsque nlist = 4096 et que nprobe est égal à 128, Milvus offre les meilleures performances de recherche. En conclusion, lors de la détermination des valeurs de nlist et nprobe, vous devez faire un compromis entre performances et précision en tenant compte des différents jeux de données et exigences.
Résumé
index_file_size : lorsque la taille des données est supérieure à index_file_size, plus la valeur de index_file_size est élevée, meilleures sont les performances de recherche.
nlist et nprobe:vous devez faire un compromis entre performances et précision.
Continuer à lire

Introducing Business Critical Plan: Enterprise-Grade Security and Compliance for Mission-Critical AI Applications
Discover Zilliz Cloud’s Business Critical Plan—offering advanced security, compliance, and uptime for mission-critical AI and vector database workloads.

Build for the Boom: Why AI Agent Startups Should Build Scalable Infrastructure Early
Explore strategies for developing AI agents that can handle rapid growth. Don't let inadequate systems undermine your success during critical breakthrough moments.

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.



