Práticas recomendadas para ajustar índices do ScaNN

Selecione uma versão da documentação:

Esta página oferece recomendações sobre como ajustar os parâmetros de índice do AlloyDB Omni para um equilíbrio ideal entre recall e QPS. Os parâmetros recomendados para o índice do vizinho mais próximo escalonável (ScaNN, na sigla em inglês) variam dependendo se você escolhe criar um índice de árvore de dois ou três níveis.

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 que ajudem você a encontrar os valores ideais de num_leaves e num_leaves_to_search para seu conjunto de dados, siga estas etapas recomendadas:

  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 "rows" é o número de linhas na tabela indexada:
    • Tempo e qualidade de build de índice equilibrados : defina num_leaves como sqrt(rows).
    • Qualidade : defina num_leaves como rows/100.
  2. Execute as consultas de teste, aumentando o valor de scann.num_of_leaves_to_search, até atingir o intervalo de recall 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 etapas subsequentes. Essa proporção fornece uma aproximação em torno do conjunto de dados que vai ajudar você a alcançar o recall desejado.

    Se você estiver trabalhando com vetores de alta dimensão (500 dimensões ou mais) e quiser melhorar o recall, tente ajustar o valor de scann.pre_reordering_num_neighbors. O valor padrão é definido como 500 * K, em que K é o limite definido na consulta.
  4. Se o QPS for muito baixo depois que as consultas atingirem um recall desejado, siga estas etapas:
    1. Recrie o índice, aumentando o valor de num_leaves e scann.num_leaves_to_search de acordo com as orientações a seguir:
      • 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 defini-lo como o dobro da raiz quadrada. Se o valor já for o dobro, tente defini-lo como o triplo da raiz quadrada.
      • Aumente scann.num_leaves_to_search conforme necessário para manter a proporção com num_leaves, que você observou 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 você executa as consultas de teste, experimente reduzir scann.num_leaves_to_search, encontrando um valor que aumente o QPS, mantendo o recall alto. Tente valores diferentes de scann.num_leaves_to_search sem recriar o índice.
  5. Repita a etapa 4 até que o QPS e o intervalo de recall atinjam valores aceitáveis.

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

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

Para aplicar recomendações para 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:

    • Equilibrar o tempo de build e a qualidade do índice: defina max_num_levels como 2 e num_leaves como power(rows, ⅔).
    • Otimizar a 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 etapas subsequentes. Essa proporção fornece uma aproximação em torno do conjunto de dados que vai ajudar você a alcançar o recall desejado.

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

  1. Se o QPS for muito baixo depois que as consultas atingirem um recall desejado, siga estas etapas:

    • Recrie o índice, aumentando o valor de num_leaves e scann.num_leaves_to_search de acordo com as orientações a seguir:
    • Defina num_leaves como um fator maior de power(rows, ⅔). Por exemplo, se o índice tiver num_leaves definido como power(rows, ⅔), tente defini-lo como o dobro de power(rows, ⅔). Se o valor já for o dobro, tente defini-lo como o triplo de power(rows, ⅔).
    • Aumente scann.num_leaves_to_search conforme necessário para manter a proporção com num_leaves, que você observou na etapa 3.
    • Defina num_leaves como um valor menor ou igual a rows/100.
    • Execute as consultas de teste novamente. Enquanto você executa as consultas de teste, experimente reduzir scann.num_leaves_to_search, encontrando um valor que aumente o QPS, mantendo o recall alto. Tente valores diferentes de scann.num_leaves_to_search sem recriar o índice.
  2. Repita a etapa 4 até que o QPS e o intervalo de recall atinjam valores aceitáveis.

Manutenção de índice

Se a sua tabela está sujeita a atualizações ou inserções frequentes, recomendamos reindexar periodicamente o índice ScaNN atual para melhorar a acurácia de recall. Você pode monitorar as métricas de índice para visualizar alterações nas distribuições de vetores ou mutações de vetores desde que o índice foi criado e, em seguida, reindexá-lo corretamente. Para mais informações sobre métricas, consulte Métricas de índice vetorial.

A seguir