1. index_file_size
Les meilleures pratiques pour la configuration de Milvus ont été présentées dans l'article Meilleures pratiques pour la configuration de Milvus 0.6.0. Dans cet article, nous présenterons également quelques bonnes pratiques pour définir des 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. Lors de l'importation de données vectorielles, Milvus combine progressivement les données dans des fichiers. Lorsque la taille du fichier atteint index_file_size, ce fichier n'accepte pas de nouvelles données et Milvus enregistre les nouvelles données dans un autre fichier. Il s'agit de 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 est d'environ 30 % du fichier de données brutes correspondant.
Au cours d'une recherche, Milvus examine chaque fichier d'index un par un. D'après notre expérience, lorsque la taille du fichier d'index passe de 1024 à 2048, les performances de recherche s'améliorent de 30 à 50 %. Toutefois, si la valeur est trop élevée, les fichiers volumineux risquent de ne pas être chargés dans la mémoire GPU (ou même dans la mémoire CPU). Par exemple, si la mémoire du GPU est de 2 Go et que index_file_size est de 3 Go, le fichier d'index ne pourra pas être chargé dans la mémoire du GPU. En général, nous fixons la taille du fichier d'index à 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.png
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 de manière significative.
2. nlist
et nprobe
Le paramètre nlist
est utilisé pour la création de l'index et le paramètre nprobe
est utilisé pour la recherche. IVFLAT et SQ8 utilisent tous deux des algorithmes de regroupement pour diviser un grand nombre de vecteurs en grappes, ou buckets. nlist
est le nombre de buckets pendant le regroupement.
Lors d'une recherche à l'aide d'index, la première étape consiste à trouver un certain nombre d'ensembles les plus proches du vecteur cible et la deuxième étape consiste à trouver les k vecteurs les plus similaires à partir des ensembles en fonction de la distance vectorielle. nprobe
est le nombre d'ensembles lors de la première étape.
En règle générale, l'augmentation de nlist
entraîne une augmentation du nombre de godets et une diminution du nombre de vecteurs dans un godet lors du regroupement. Par conséquent, la charge de calcul diminue et les performances de recherche s'améliorent. Cependant, avec moins de vecteurs pour la comparaison des similitudes, le résultat correct peut être manqué.
L'augmentation de nprobe
entraîne une augmentation du nombre de godets à rechercher. Par conséquent, la charge de calcul augmente et les performances de recherche se détériorent, mais la précision de la recherche s'améliore. La situation peut varier selon les ensembles de données dont la distribution est différente. Vous devez également tenir compte de la taille de l'ensemble de données lorsque vous définissez nlist
et nprobe
. En règle générale, il est recommandé que nlist
soit 4 * sqrt(n)
, oĂą n est le nombre total de vecteurs. Comme pour nprobe
, vous devez faire un compromis entre la précision et l'efficacité et la meilleure façon est de 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.png
Le tableau compare les performances de recherche et la précision 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, lorsque les valeurs de nlist
/nprobe
augmentent du même pourcentage, la précision de la recherche augmente également. Lorsque nlist
= 4096 et nprobe
est 128, Milvus a les meilleures performances de recherche. En conclusion, lorsque vous déterminez les valeurs de nlist
et nprobe
, vous devez faire un compromis entre les performances et la précision en tenant compte des différents ensembles de données et des 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 les performances et la précision.
- 2. nlist et nprobe
- Résumé
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word