Référence de l'index ScaNN

Cette page fournit des documents de référence sur l'indice ScaNN.

Paramètres de réglage

Les paramètres d'index et les indicateurs de base de données suivants sont utilisés ensemble pour trouver le bon équilibre entre le rappel et le RPS.

Paramètre de réglage Description Type d'option
max_num_levels Nombre maximal de niveaux de centroïde de l'arbre de clustering k-moyennes.
  • Indice d'arborescence à deux niveaux: par défaut, cette valeur est définie sur 1 pour une arborescence à deux niveaux (un niveau de centroide et un niveau de feuille inférieur).
  • Index d'arborescence à trois niveaux: par défaut, cette valeur est définie sur 2 pour un arbre à trois niveaux (deux niveaux de centroids + niveau de feuille inférieur).
  • Définissez la valeur sur 2 si le nombre de lignes vectorielles dépasse 100 millions.
  • Définissez la valeur sur 1 si le nombre de lignes vectorielles est inférieur à 10 millions.
  • Définissez la valeur sur 1 ou 2 si le nombre de lignes de vecteurs est compris entre 10 et 100 millions de lignes pour optimiser le temps de création de l'index (défini sur 2) ou l'évocation de la recherche (défini sur 1).
Création d'index
(facultatif)
num_leaves Nombre de partitions à appliquer à cet indice. Le nombre de partitions auxquelles vous appliquez un index lors de sa création affecte ses performances. En augmentant le nombre de partitions pour un nombre défini de vecteurs, vous créez un index plus précis, ce qui améliore le rappel et les performances des requêtes. Toutefois, cela entraîne des temps de création d'index plus longs.

Étant donné que les arbres à trois niveaux sont créés plus rapidement que les arbres à deux niveaux, vous pouvez augmenter la valeur num_leaves_value lorsque vous créez un indice d'arbre à trois niveaux pour obtenir de meilleures performances.
  • Index à deux niveaux: définissez cette valeur sur une valeur comprise entre 1 et 1048576.

    Pour un index qui équilibre la création rapide d'index et de bonnes performances de recherche, utilisez sqrt(ROWS) comme point de départ, où ROWS correspond au nombre de lignes vectorielles. Le nombre de vecteurs stockés par chaque partition est calculé par
    ROWS/sqrt(ROWS) = sqrt(ROWS).

    Étant donné qu'un indice en arbre à deux niveaux peut être créé sur un ensemble de données comportant moins de 10 millions de lignes de vecteurs, chaque partition contiendra moins de (sqrt(10M)) vecteurs, soit 3200 vecteurs. Pour une qualité de recherche vectorielle optimale, nous vous recommandons de réduire au maximum le nombre de vecteurs dans chaque partition. La taille de partition recommandée est d'environ 100 vecteurs par partition. Définissez donc num_leaves sur ROWS/100. Si vous avez 10 millions de vecteurs,définissez num_leaves sur 100 000.
  • Index à trois niveaux: définissez cette valeur sur une valeur comprise entre 1 et 1048576.

    Si vous ne savez pas quelle valeur exacte sélectionner, utilisez power(ROWS, 2/3) comme point de départ, où ROWS correspond au nombre de lignes de vecteurs. Le nombre de vecteurs stockés par chaque partition est calculé par
    ROWS/power(ROWS, 2/3) = power(ROWS, 1/3).

    Étant donné qu'un indice en arbre à trois niveaux peut être créé sur un ensemble de données dont les lignes vectorielles dépassent 100 millions, chaque partition contiendra plus de
    (power(100M, 1/3)) vecteurs, soit 465 vecteurs. Pour une qualité de recherche vectorielle optimale, nous vous recommandons de réduire au maximum le nombre de vecteurs dans chaque partition. La taille de partition recommandée est d'environ 100 vecteurs par partition. Définissez donc num_leaves sur ROWS/100. Si vous avez 100 millions de vecteurs, définissez num_leaves sur 1 million.
Création d'index 
(obligatoire)
quantizer Type de quantizeur que vous souhaitez utiliser pour l'arborescence k-means. La valeur par défaut est définie sur SQ8, ce qui offre de meilleures performances de requête avec une perte de rappel minimale (généralement inférieure à 1 à 2%).

Définissez-la sur FLAT si un rappel de 99% ou plus est requis.
Création d'index
(facultatif)
scann.enable_pca Active l'analyse des composants principaux (ACP), une technique de réduction des dimensions utilisée pour réduire automatiquement la taille de l'encapsulation lorsque cela est possible. Cette option est activée par défaut.

Définir sur false si vous constatez une dégradation de la mémorisation.
Création d'index
(facultatif)
scann.num_leaves_to_search Cet indicateur de base de données contrôle le nombre absolu de feuilles ou de partitions à rechercher, ce qui vous permet de trouver un équilibre entre le rappel et le RPS. La valeur par défaut est de 1% de la valeur définie dans num_leaves.

Une valeur plus élevée améliore le rappel, mais réduit le RPS. De même, une valeur plus faible entraîne un rappel plus faible, mais RPS plus élevé.
Exécution de la requête
(facultatif)
scann.pre_reordering_num_neighbors Lorsque l'indicateur de base de données est défini, il spécifie le nombre de voisins candidats à prendre en compte lors des étapes de réorganisation après que la recherche initiale a identifié un ensemble de candidats. Définissez ce paramètre sur une valeur supérieure au nombre de voisins que vous souhaitez que la requête renvoie.

Une valeur plus élevée améliore le rappel, mais diminue le RPS. Définissez cette valeur sur 0 pour désactiver le réordonnancement. La valeur par défaut est 0 si la PCA n'est pas activée lors de la création de l'index. Sinon, la valeur par défaut est 50 x K, où K est la limite spécifiée dans la requête.
Exécution de la requête
(facultatif)
scann.num_search_threads Nombre de threads de recherche pour la recherche multithread. Cela peut contribuer à réduire la latence d'une seule requête en utilisant plusieurs threads pour la recherche de réseau de neurones artificiels ScaNN dans les applications sensibles à la latence. Ce paramètre n'améliore pas la latence d'une seule requête si la base de données est déjà limitée par le processeur. La valeur par défaut est 2. Exécution de la requête
(facultatif)

Étape suivante