Referência do índice ScaNN

Selecione uma versão da documentação:

Nesta página, você encontra material de referência para o índice do ScaNN.

Parâmetros de ajuste

Os parâmetros de índice e 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 clustering 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 (dois 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.
  • Defina o valor como 1 se o número de linhas de vetor for inferior a 10 milhões.
  • Defina como 1 ou 2 se o número de linhas de vetor estiver entre 10 milhões e 100 milhões para otimizar o tempo de criação do índice (defina como 2) ou otimizar a recuperação da pesquisa (defina como 1).
Criação de índice
(opcional)
num_leaves O número de partições a serem aplicadas a este índice. O número de partições aplicadas 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 a recuperação e o desempenho da consulta. No entanto, isso aumenta o tempo de criação do índice.

Como as árvores de três níveis são criadas mais rápido 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 melhorar o desempenho.
  • Í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 um 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 vetores, cada partição terá menos de (sqrt(10M)) vetores, que são 3200 vetores. Para uma qualidade ideal da pesquisa de vetores, é recomendável minimizar o número de vetores em cada partição. O tamanho 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 o 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 são 465 vetores. Para uma qualidade ideal da pesquisa de vetores, é recomendável minimizar o número de vetores em cada partição. O tamanho 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 é SQ8, que oferece melhor desempenho de consulta com perda mínima de recall (normalmente menos de 1 a 2%).

Defina como FLAT se for necessário um recall de 99% ou mais.
Criação de índice
(opcional)
scann.enable_pca Ativa a análise de componentes principais (PCA), uma técnica de redução de dimensão usada para reduzir automaticamente o tamanho do encadeamento quando possível. Essa opção é ativada por padrão.

Defina como false se você notar uma deterioração na capacidade de 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, permitindo que você faça uma troca 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 recall menor, mas QPS maior.
Tempo de execução da consulta
(opcional)
scann.pre_reordering_num_neighbors Quando definida, a flag do banco de dados especifica o número de vizinhos candidatos a serem considerados durante as etapas de reordenação depois que a pesquisa inicial identifica um conjunto de candidatos. Defina esse parâmetro com um valor maior do que o número de vizinhos que você quer que a consulta retorne.

Um valor mais alto resulta em um recall melhor, mas em um QPS mais baixo. 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 LIMIT 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 de rede neural aproximada (ANN) do ScaNN em aplicativos sensíveis à latência. Essa configuração não melhora a latência de uma única consulta se o banco de dados já estiver vinculado à CPU. O valor padrão é 2. Tempo de execução da consulta
(opcional)

A seguir