Les paramètres recommandés pour l'index ScaNN
varient selon que vous choisissez de créer un indice en arborescence à deux ou trois niveaux. Cette page fournit des recommandations sur l'ajustement des paramètres d'index pour obtenir un équilibre optimal entre le rappel et le RPS.
Création d'index ScaNN
Pour en savoir plus, consultez la documentation de référence sur l'indice 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, suivez ces étapes recommandées:
- Pour créer l'index
ScaNN
optimisé pour les cas suivants, définissez le paramètrenum_leaves
sur la valeur suivante, où "rows" correspond au nombre de lignes dans la table indexée :- Pour équilibrer le temps de création de l'index et la qualité, définissez
num_leaves
sursqrt(rows)
. - quality définit num_leaves sur lignes/100.
- Pour équilibrer le temps de création de l'index et la qualité, définissez
- Exécutez vos requêtes de test, en augmentant la valeur de
scann.num_of_leaves_to_search
, jusqu'à 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 ratio entre
scann.num_leaves_to_search
etnum_leaves
qui sera utilisé dans les étapes suivantes. Ce ratio fournit une approximation autour de l'ensemble de données qui vous aidera à atteindre votre rappel cible.
Si vous travaillez avec des vecteurs à dimension élevée (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 sur500 * K
, oùK
correspond à la limite que vous définissez dans votre requête. - Si votre RPS est trop faible 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_leaves
etscann.num_leaves_to_search
conformément aux instructions suivantes :- Définissez
num_leaves
sur un facteur plus élevé de la racine carrée du nombre de lignes. Par exemple, sinum_leaves
est défini sur la racine carrée du nombre de lignes de l'index, essayez de le définir sur le double de la racine carrée. Si la valeur est déjà doublée, essayez de la définir sur le triple de la racine carrée. - Augmentez
scann.num_leaves_to_search
si nécessaire pour maintenir son ratio avecnum_leaves
, que vous avez noté à l'étape 3. - Définissez
num_leaves
sur une valeur inférieure ou égale au nombre de lignes divisé par 100.
- Définissez
- Exécutez à nouveau les requêtes de test.
Lorsque vous exécutez les requêtes de test, essayez de réduire
scann.num_leaves_to_search
afin de trouver une valeur qui augmente le RPS tout en maintenant un taux de rappel élevé. Essayez différentes valeurs descann.num_leaves_to_search
sans reconstruire l'index.
- Recréez l'index en augmentant la valeur de
- Répétez l'étape 4 jusqu'à ce que la plage de RPS et le débit de requêtes par seconde atteignent des valeurs acceptables.
Index arborescent à trois niveaux
En plus des recommandations concernant l'index ScaNN
en arbre à deux niveaux, suivez les conseils ci-dessous.
Pour appliquer des recommandations afin de trouver la valeur optimale des paramètres d'index num_leaves
et max_num_levels
, procédez comme suit:
Créez l'index
ScaNN
avec les combinaisonsnum_leaves
etmax_num_levels
suivantes en fonction de vos objectifs de performances:- Équilibrer le temps de création de l'index et la qualité: définissez
max_num_levels
sur2
etnum_leaves
surpower(rows, ⅔)
. - Optimiser pour la qualité: définissez
max_num_levels
sur2
etnum_leaves
surrows/100
.
- Équilibrer le temps de création de l'index et la qualité: 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 ratio entre
scann.num_leaves_to_search
etnum_leaves
qui sera utilisé dans les étapes suivantes. Ce ratio fournit une approximation de l'ensemble de données qui vous aidera à atteindre votre rappel cible.
Si vous travaillez avec des vecteurs à dimension élevée (500 dimensions ou plus) et que vous souhaitez améliorer la mémorisation, essayez d'ajuster la valeur de scann.pre_reordering_num_neighbors
. La valeur par défaut est définie sur 500 * K
, où K
correspond à la limite que vous définissez dans votre requête.
Si votre RPS est trop faible 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_leaves
etscann.num_leaves_to_search
conformément aux instructions suivantes: - Définissez
num_leaves
sur un facteur plus élevé quepower(rows, ⅔)
. Par exemple, sinum_leaves
est défini surpower(rows, ⅔)
dans l'index, essayez de le définir sur le double depower(rows, ⅔)
. Si la valeur est déjà doublée, essayez de la définir sur le triple depower(rows, ⅔)
. - Augmentez
scann.num_leaves_to_search
si nécessaire pour maintenir son ratio avecnum_leaves
, que vous avez noté à l'étape 3. - Définissez
num_leaves
sur une valeur inférieure ou égale àrows/100
. - Exécutez à nouveau les requêtes de test. Lorsque vous exécutez les requêtes de test, essayez de réduire
scann.num_leaves_to_search
afin de trouver une valeur qui augmente le RPS tout en maintenant un taux de rappel élevé. Essayez différentes valeurs descann.num_leaves_to_search
sans reconstruire l'index.
- Recréez l'index en augmentant la valeur de
Répétez l'étape 4 jusqu'à ce que la plage de RPS et le débit de requêtes par seconde atteignent 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 de la récupération.
Vous pouvez surveiller les métriques de l'index pour afficher les modifications apportées aux distributions ou aux mutations de vecteurs depuis la création de l'index, puis réindexer en conséquence. Pour en savoir plus sur les métriques, consultez Afficher les métriques de l'index vectoriel.