Práticas recomendadas para ajustar índices ScaNN

Os parâmetros recomendados para o índice ScaNN são diferentes dependendo se você escolhe criar um índice de árvore de dois ou três níveis. Esta página fornece recomendações sobre como ajustar os parâmetros de índice para um equilíbrio ideal entre recuperação e QPS.

Criação de índice ScaNN

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

Índice de árvore de dois níveis

Para aplicar recomendações e encontrar os valores ideais de num_leaves e num_leaves_to_search para seu conjunto de dados, siga estas etapas:

  1. Para criar o índice ScaNN otimizado para os casos a seguir, defina o parâmetro num_leaves como o valor a seguir, em que linhas é o número de linhas na tabela indexada:
    • tempo e qualidade de build de índice equilibrados definiram num_leaves como sqrt(rows).
    • quality define num_leaves como linhas/100.
  2. Execute as consultas de teste, aumentando o valor de scann.num_of_leaves_to_search, até atingir o intervalo de recuperação desejado, por exemplo, 95%. Para mais informações sobre como analisar suas consultas, consulte Analisar suas consultas.
  3. Anote a proporção entre scann.num_leaves_to_search e num_leaves que será usada nas próximas etapas. Essa proporção fornece uma aproximação do conjunto de dados que vai ajudar a alcançar a recuperação desejada.

    Se você estiver trabalhando com vetores de alta dimensão (500 ou mais) e quiser melhorar a recuperação, tente ajustar o valor de scann.pre_reordering_num_neighbors. O valor padrão é definido como 500 * K, em que K é o limite que você definiu na consulta.
  4. Se a QPS estiver muito baixa depois que as consultas atingirem uma recuperação desejada, siga estas etapas:
    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 como 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, tente definir o dobro da raiz quadrada. Se o valor já for o dobro, tente definir o valor para triplicar a raiz quadrada.
      • Aumente scann.num_leaves_to_search conforme necessário para manter a proporção com num_leaves, que você anotou na etapa 3.
      • Defina num_leaves como um valor menor ou igual à contagem de linhas dividida por 100.
    2. Execute as consultas de teste novamente. Enquanto executa as consultas de teste, tente reduzir scann.num_leaves_to_search, encontrando um valor que aumente a QPS mantendo o recall alto. Tente valores diferentes de scann.num_leaves_to_search sem reconstruir o índice.
  5. Repita a etapa 4 até que a QPS e o intervalo de recuperação atinjam valores aceitáveis.

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

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

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

  1. Crie o índice ScaNN com as seguintes combinações de num_leaves e max_num_levels com base nas suas metas de performance:

    • balance index build time & quality: defina max_num_levels como 2 e num_leaves como power(rows, ⅔).
    • otimizar para qualidade: defina max_num_levels como 2 e num_leaves como rows/100.
  2. Execute as consultas de teste. Para mais informações sobre como analisar consultas, consulte Analisar suas consultas.

  3. Anote a proporção entre scann.num_leaves_to_search e num_leaves que será usada nas próximas etapas. Essa proporção fornece uma estimativa do conjunto de dados que vai ajudar você a alcançar a lembrança desejada.

Se você estiver trabalhando com vetores de alta dimensão (500 dimensões ou mais) e quiser melhorar a recuperação, tente ajustar o valor de scann.pre_reordering_num_neighbors. O valor padrão é definido como 500 * K, em que K é o limite que você definiu na consulta.

  1. Se a QPS estiver muito baixa depois que as consultas atingirem uma recuperação de destino, siga estas etapas:

    • 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 como um fator maior do power(rows, ⅔). Por exemplo, se o índice tiver num_leaves definido como power(rows, ⅔), tente definir o dobro do power(rows, ⅔). Se o valor já for o dobro, tente definir o valor para triplicar o power(rows, ⅔).
    • Aumente scann.num_leaves_to_search conforme necessário para manter a proporção com num_leaves, que você anotou na etapa 3.
    • Defina num_leaves como um valor menor ou igual a rows/100.
    • Execute as consultas de teste novamente. Enquanto executa as consultas de teste, tente reduzir scann.num_leaves_to_search, encontrando um valor que aumente a QPS mantendo o recall alto. Tente valores diferentes de scann.num_leaves_to_search sem reconstruir o índice.
  2. Repita a etapa 4 até que a QPS e o intervalo de recuperação atinjam valores aceitáveis.

Manutenção de índice

Se a tabela for propensa a atualizações ou inserções frequentes, recomendamos reindexar periodicamente o índice ScaNN para melhorar a precisão da recuperação. É possível monitorar as métricas do índice para conferir mudanças nas distribuições ou mutações de vetor desde que o índice foi criado e, em seguida, reindexar de acordo. Para mais informações sobre métricas, consulte Conferir métricas do índice vetorial.

A seguir