Referência do índice ScaNN

Selecione uma versão da documentação:

Esta página fornece material de referência para o índice do ScaNN.

Parâmetros de ajuste

Os parâmetros de índice e as flags de banco de dados a seguir são usados juntos para encontrar o equilíbrio certo de recall e QPS.

Parâmetro de ajuste Descrição Tipo de opção
max_num_levels O número máximo de níveis de centroide da árvore de clusterização K-means.
  • Índice de árvore de dois níveis: definido como 1 por padrão para uma árvore de dois níveis (1 nível de centroide + nível de folha inferior).
  • Índice de árvore de três níveis: definido como 2 por padrão para uma árvore de três níveis (2 níveis de centroide + nível de folha inferior)
  • Defina o valor como 2 se o número de linhas de vetor exceder 100 milhões de linhas.
  • Defina o valor como 1 se o número de linhas de vetor for menor que 10 milhões de linhas.
  • Defina como 1 ou 2 se o número de linhas de vetor estiver entre 10 milhões e 100 milhões de linhas para otimizar o tempo de build do índice (defina como 2) ou otimizar o recall de pesquisa (defina como 1).
Criação de índice
(opcional)
num_leaves O número de partições a serem aplicadas a esse índice. O número de partições que você aplica ao criar um índice afeta o desempenho dele. Ao aumentar as partições para um determinado número de vetores, você cria um índice mais refinado, o que melhora o recall e o desempenho da consulta. No entanto, isso tem o custo de tempos de criação de índice mais longos.

Como as árvores de três níveis são criadas mais rapidamente do que as de dois níveis, é possível aumentar o num_leaves_value ao criar um índice de árvore de três níveis para alcançar um desempenho melhor.
  • Índice de dois níveis: defina esse valor como qualquer valor entre 1 e 1048576.

    Para um índice que equilibra a criação rápida de índice e o bom desempenho de pesquisa, use sqrt(ROWS) como ponto de partida, em que ROWS é o número de linhas de vetor. O número de vetores que cada partição contém é calculado por
    ROWS/sqrt(ROWS) = sqrt(ROWS).

    Como um índice de árvore de dois níveis pode ser criado em um conjunto de dados com menos de 10 milhões de linhas de vetor, cada partição terá menos de (sqrt(10M)) vetores, que é 3200 vetores. Para uma qualidade ideal de pesquisa de vetores, é recomendável minimizar o número de vetores em cada partição. O tamanho de partição recomendado é de cerca de 100 vetores por partição. Portanto, defina num_leaves como ROWS/100. Se você tiver 10 milhões de vetores,defina num_leaves como 100.000.
  • Índice de três níveis: defina esse valor como qualquer valor entre 1 e 1048576.

    Se você não tiver certeza sobre a seleção do valor exato, use power(ROWS, 2/3) como ponto de partida, em que ROWS é o número de linhas de vetor. O número de vetores que cada partição contém é calculado por
    ROWS/power(ROWS, 2/3) = power(ROWS, 1/3).

    Como um índice de árvore de três níveis pode ser criado em um conjunto de dados com mais de 100 milhões de linhas de vetor, cada partição terá mais de
    (power(100M, 1/3)) vetores, que é 465 vetores. Para uma qualidade ideal de pesquisa de vetores, é recomendável minimizar o número de vetores em cada partição. O tamanho de partição recomendado é de cerca de 100 vetores por partição. Portanto, defina num_leaves como ROWS/100. Se você tiver 100 milhões de vetores, defina num_leaves como 1 milhão.
Criação de índice
(obrigatório)
quantizer O tipo de quantizador que você quer usar para a árvore K-means. O valor padrão é definido como SQ8, que oferece melhor desempenho de consulta com perda mínima de recall (normalmente menos de 1 a 2%).

Defina como FLAT se um recall de 99% ou mais for necessário.
Criação de índice
(opcional)
scann.enable_inline_filtering Ativa o suporte a filtros inline que consultam seus dados e aplicam filtros diretamente em uma operação de pesquisa de similaridade vetorial. Essas consultas de similaridade vetorial usam filtros nas mesmas tabelas de banco de dados e concluem a avaliação do filtro ao calcular a distância para a identificação do vizinho mais próximo. Essa opção é desativada por padrão.

Para ativar a filtragem inline, defina esse parâmetro como true. Se você observar deterioração no desempenho, defina como false.

Essa opção está disponível na versão prévia.
Tempo de execução da consulta
(opcional)
scann.enable_pca Ativa a análise de componentes principais (PCA, na sigla em inglês), que é uma técnica de redução de dimensão usada para reduzir automaticamente o tamanho da incorporação quando possível. Essa opção é ativada por padrão.

Defina como false se você observar deterioração no recall.
Criação de índice
(opcional)
scann.num_leaves_to_search Essa flag de banco de dados controla o número absoluto de folhas ou partições a serem pesquisadas, o que permite fazer um trade-off entre recall e QPS. O valor padrão é 1% do valor definido em num_leaves.

Um valor maior resulta em um recall melhor, mas em um QPS menor. Da mesma forma, um valor menor resulta em um recall menor, mas em um QPS maior.
Tempo de execução da consulta
(opcional)
scann.pre_reordering_num_neighbors Quando definida, a flag de banco de dados especifica o número de vizinhos candidatos a serem considerados durante os estágios de reordenação depois que a pesquisa inicial identifica um conjunto de candidatos. Defina esse parâmetro como um valor maior que o número de vizinhos que você quer que a consulta retorne.

Um valor maior resulta em um recall melhor, mas em um QPS menor. Defina esse valor como 0 para desativar a reordenação. O padrão é 0 se a PCA não estiver ativada durante a criação do índice. Caso contrário, o padrão é 50 x K, em que K é o limite especificado na consulta.
Tempo de execução da consulta
(opcional)
scann.num_search_threads O número de linhas de execução de pesquisa para pesquisa multithread. Isso pode ajudar a reduzir a latência de consulta única usando mais de uma linha de execução para a pesquisa ScaNN ANN em aplicativos sensíveis à latência. Essa configuração não melhora a latência de consulta única se o banco de dados já estiver vinculado à CPU. O valor padrão é 2. Tempo de execução da consulta
(opcional)

A seguir