Práticas recomendadas para otimizar os índices do ScaNN

Selecione uma versão da documentação:

Esta página fornece recomendações sobre como ajustar os parâmetros do índice do AlloyDB Omni para um equilíbrio ideal entre a capacidade de memorização e as QPS. Os parâmetros recomendados para o índice de vizinhos mais próximos escalável (ScaNN) diferem consoante opte por criar um índice de árvore de dois ou três níveis.

Criação do índice ScaNN

Para mais informações, consulte a referência do índice ScaNN.

Índice de árvore de dois níveis

Para aplicar recomendações que ajudam a encontrar os valores ideais de num_leaves e num_leaves_to_search para o seu conjunto de dados, siga estes passos recomendados:

  1. Para criar o índice ScaNN otimizado para os seguintes casos, defina o parâmetro num_leaves para o seguinte valor, em que rows é o número de linhas na tabela indexada:
    • Tempo de criação e qualidade do índice equilibrados definidos num_leaves para sqrt(rows).
    • quality defina num_leaves como rows/100.
  2. Execute as suas consultas de teste, aumentando o valor de scann.num_of_leaves_to_search, até atingir o intervalo de recall alvo, por exemplo, 95%. Para mais informações sobre a análise das suas consultas, consulte o artigo Analise as suas consultas.
  3. Tome nota da proporção entre scann.num_leaves_to_search e num_leaves que vai ser usada nos passos seguintes. Esta proporção fornece uma aproximação em torno do conjunto de dados que vai ajudar a alcançar a sua capacidade de memorização alvo.

    Se estiver a trabalhar com vetores de alta dimensão (500 dimensões ou mais) e quiser melhorar a capacidade de memorização, experimente ajustar o valor de scann.pre_reordering_num_neighbors. O valor predefinido é definido como o valor 500 * K, em que K é o limite que definiu na sua consulta.
  4. Se o seu QPS for demasiado baixo depois de as suas consultas atingirem uma taxa de obtenção alvo, siga estes passos:
    1. Recrie o índice, aumentando o valor de num_leaves e scann.num_leaves_to_search de acordo com as seguintes orientações:
      • Defina num_leaves para um fator maior da raiz quadrada da contagem de linhas. Por exemplo, se o índice tiver num_leaves definido como a raiz quadrada da contagem de linhas, experimente defini-lo como o dobro da raiz quadrada. Se o valor já for o dobro, experimente defini-lo como o triplo da raiz quadrada.
      • Aumente scann.num_leaves_to_search conforme necessário para manter a respetiva proporção com num_leaves, que indicou no passo 3.
      • Defina num_leaves para um valor inferior ou igual à contagem de linhas dividida por 100.
    2. Execute novamente as consultas de teste. Enquanto executa as consultas de teste, experimente reduzir scann.num_leaves_to_search e encontrar um valor que aumente as QPS, mantendo a taxa de recordação elevada. Experimente valores diferentes de scann.num_leaves_to_search sem reconstruir o índice.
  5. Repita o passo 4 até o QPS e o intervalo de recolha terem atingido valores aceitáveis.

Índice de árvore de três níveis

Além das recomendações para o índice de árvore de 2 níveis ScaNN, use as seguintes orientações.

Para aplicar recomendações para encontrar o valor ideal dos parâmetros de índice num_leaves e max_num_levels, siga estes passos:

  1. Crie o índice ScaNN com as seguintes combinações de num_leaves e max_num_levels com base nos seus objetivos de desempenho:

    • Equilibrar o tempo de compilação e a qualidade do índice: defina max_num_levels como 2 e num_leaves como power(rows, ⅔).
    • Otimize em função da qualidade: defina max_num_levels como 2 e num_leaves como rows/100.
  2. Execute as suas consultas de teste. Para mais informações sobre a análise de consultas, consulte o artigo Analise as suas consultas.

  3. Tome nota da relação entre scann.num_leaves_to_search e num_leaves que vai ser usada nos passos seguintes. Esta proporção fornece uma aproximação em torno do conjunto de dados que ajuda a alcançar a taxa de recordação alvo.

Se estiver a trabalhar com vetores de alta dimensão (500 dimensões ou mais) e quiser melhorar a capacidade de memorização, experimente ajustar o valor de scann.pre_reordering_num_neighbors. O valor predefinido é definido como o valor 500 * K, em que K é o limite que definiu na sua consulta.

  1. Se o seu QPS for demasiado baixo depois de as suas consultas atingirem uma taxa de recolha alvo, siga estes passos:

    • Recrie o índice, aumentando o valor de num_leaves e scann.num_leaves_to_search de acordo com as seguintes orientações:
    • Defina num_leaves para um fator maior de power(rows, ⅔). Por exemplo, se o índice tiver num_leaves definido como power(rows, ⅔), experimente defini-lo como o dobro de power(rows, ⅔). Se o valor já for o dobro, experimente defini-lo para o triplo de power(rows, ⅔).
    • Aumente scann.num_leaves_to_search conforme necessário para manter a sua proporção com num_leaves, que anotou no passo 3.
    • Defina num_leaves para um valor inferior ou igual a rows/100.
    • Execute novamente as consultas de teste. Enquanto executa as consultas de teste, experimente reduzir scann.num_leaves_to_search e encontrar um valor que aumente as QPS, mantendo a taxa de recordação elevada. Experimente valores diferentes de scann.num_leaves_to_search sem reconstruir o índice.
  2. Repita o passo 4 até o QPS e o intervalo de recolha terem atingido valores aceitáveis.

Manutenção do índice

Se a sua tabela for propensa a atualizações ou inserções frequentes, recomendamos que reindexe periodicamente o índice ScaNN existente para melhorar a precisão da obtenção. Pode monitorizar as métricas de índice para ver as alterações nas distribuições de vetores ou nas mutações de vetores desde a criação do índice e, em seguida, reindexar em conformidade. Para mais informações sobre métricas, consulte o artigo Métricas do índice de vetores.

O que se segue?