Création d'un index ScaNN
Pour en savoir plus, consultez la documentation de référence sur l'index ScaNN.
Index arborescent à deux niveaux
Pour appliquer des recommandations qui vous aideront à trouver les valeurs optimales de num_leaves et num_leaves_to_search pour votre ensemble de données,
procédez comme suit :
- Pour créer l'index
ScaNNoptimisé pour les cas suivants, définissez le paramètrenum_leavessur la valeur suivante, où "rows" correspond au nombre de lignes de la table indexée :- Équilibrer la durée de la compilation et la qualité de l'index : définissez
num_leavessursqrt(rows). - Qualité : définissez num_leaves sur rows/100.
- Équilibrer la durée de la compilation et la qualité de l'index : définissez
- Exécutez vos requêtes de test en augmentant la valeur de
scann.num_of_leaves_to_searchjusqu'à atteindre la plage de rappel cible (par exemple, 95 %). Pour en savoir plus sur l'analyse de vos requêtes, consultez Analyser vos requêtes. - Notez le rapport entre
scann.num_leaves_to_searchetnum_leavesqui sera utilisé lors des étapes suivantes. Ce rapport fournit une approximation autour de l'ensemble de données qui vous aidera à atteindre votre rappel cible.
Si vous utilisez des vecteurs de haute dimension (500 dimensions ou plus) et que vous souhaitez améliorer le rappel, essayez d'ajuster la valeur descann.pre_reordering_num_neighbors. La valeur par défaut est définie sur la valeur500 * K, oùKcorrespond à la limite que vous avez définie dans votre requête. - Si vos RPS sont trop faibles une fois que vos requêtes ont atteint un rappel cible, procédez comme suit :
- Recréez l'index en augmentant la valeur de
num_leavesetscann.num_leaves_to_searchen suivant les conseils ci-dessous :- Définissez
num_leavessur un facteur plus important de la racine carrée du nombre de lignes. Par exemple, si l'index anum_leavesdéfini sur la racine carrée du nombre de lignes, essayez de le définir sur le double de la racine carrée. Si la valeur est déjà double, essayez de la définir sur le triple de la racine carrée. - Augmentez
scann.num_leaves_to_searchsi nécessaire pour maintenir son rapport avecnum_leaves, que vous avez noté à l'étape 3. - Définissez
num_leavessur une valeur inférieure ou égale au nombre de lignes divisé par 100.
- Définissez
- Exécutez à nouveau les requêtes de test.
Pendant que vous exécutez les requêtes de test, essayez de réduire
scann.num_leaves_to_searchpour trouver une valeur qui augmente les RPS tout en conservant un rappel élevé. Essayez différentes valeurs descann.num_leaves_to_searchsans recréer l'index.
- Recréez l'index en augmentant la valeur de
- Répétez l'étape 4 jusqu'à ce que les RPS et la plage de rappel aient atteint des valeurs acceptables.
Index arborescent à trois niveaux
En plus des recommandations concernant l'index ScaNN arborescent à deux niveaux, suivez les conseils ci-dessous.
Pour appliquer des recommandations qui vous aideront à trouver la valeur optimale des paramètres d'index num_leaves et max_num_levels, procédez comme suit :
Créez l'index
ScaNNavec les combinaisonsnum_leavesetmax_num_levelssuivantes en fonction de vos objectifs de performances :- Équilibrer la durée de la compilation et la qualité de l'index : définissez
max_num_levelssur2etnum_leavessurpower(rows, ⅔). - Optimiser la qualité : définissez
max_num_levelssur2etnum_leavessurrows/100.
- Équilibrer la durée de la compilation et la qualité de l'index : définissez
Exécutez vos requêtes de test. Pour en savoir plus sur l'analyse des requêtes, consultez Analyser vos requêtes.
Notez le rapport entre
scann.num_leaves_to_searchetnum_leavesqui sera utilisé lors des étapes suivantes. Ce rapport fournit une approximation autour de l'ensemble de données qui vous aidera à atteindre votre rappel cible.
Si vous utilisez des vecteurs de haute dimension (500 dimensions ou plus) et que vous souhaitez améliorer le rappel, essayez d'ajuster la valeur de scann.pre_reordering_num_neighbors. La valeur par défaut est définie sur la valeur 500 * K, où K correspond à la limite que vous avez définie dans votre requête.
Si vos RPS sont trop faibles une fois que vos requêtes ont atteint un rappel cible, procédez comme suit :
- Recréez l'index en augmentant la valeur de
num_leavesetscann.num_leaves_to_searchen suivant les conseils ci-dessous : - Définissez
num_leavessur un facteur plus important depower(rows, ⅔). Par exemple, si l'index anum_leavesdéfini surpower(rows, ⅔), essayez de le définir sur le double depower(rows, ⅔). Si la valeur est déjà double, essayez de la définir sur le triple depower(rows, ⅔). - Augmentez
scann.num_leaves_to_searchsi nécessaire pour maintenir son rapport avecnum_leaves, que vous avez noté à l'étape 3. - Définissez
num_leavessur une valeur inférieure ou égale àrows/100. - Exécutez à nouveau les requêtes de test. Pendant que vous exécutez les requêtes de test, essayez de réduire
scann.num_leaves_to_searchpour trouver une valeur qui augmente les RPS tout en conservant un rappel élevé. Essayez différentes valeurs descann.num_leaves_to_searchsans recréer l'index.
- Recréez l'index en augmentant la valeur de
Répétez l'étape 4 jusqu'à ce que les RPS et la plage de rappel aient atteint des valeurs acceptables.
Maintenance des index
Si votre table est sujette à des mises à jour ou des insertions fréquentes, nous vous recommandons de réindexer régulièrement l'index ScaNN existant afin d'améliorer la précision du rappel.
Vous pouvez surveiller les métriques d'index pour afficher les modifications apportées aux distributions de vecteurs ou aux mutations de vecteurs depuis la création de l'index, puis le réindexer en conséquence. Pour en savoir plus sur les métriques, consultez Métriques d'index vectoriel.