Referência do índice ScaNN

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

Parâmetros de ajuste

Os parâmetros de índice e as flags do banco de dados a seguir são usados juntos para encontrar o equilíbrio certo de recuperação 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 (um 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 do vetor exceder 100 milhões.
  • Defina o valor como 1 se o número de linhas do vetor for inferior a 10 milhões.
  • Defina como 1 ou 2 se o número de linhas do vetor estiver entre 10 milhões e 100 milhões para otimizar o tempo de criação do índice (definido como 2) ou a recuperação de pesquisa (definido 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 em que você aplica ao criar um índice afeta a performance do índice. Ao aumentar as partições para um número definido de vetores, você cria um índice mais refinado, o que melhora a recuperação e a performance da consulta. No entanto, isso tem o custo de tempos mais longos de criação de índices.

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 ter 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 índices e uma boa performance de pesquisa, use sqrt(ROWS) como ponto de partida, em que ROWS é o número de linhas vetoriais. O número de vetores que cada partição contém é calculado por
    ROWS/sqrt(ROWS) = sqrt(ROWS).

    Como é possível criar um índice de árvore de dois níveis em um conjunto de dados com menos de 10 milhões de linhas de vetor, cada partição vai conter menos de (sqrt(10M)) vetores, ou seja, 3200. Para uma qualidade ideal da pesquisa de vetores, é recomendável minimizar o número de vetores em cada partição. O tamanho recomendado da partição é 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 do 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 vai conter mais de
    (power(100M, 1/3)), ou seja, 465. Para uma qualidade ideal da pesquisa de vetores, é recomendável minimizar o número de vetores em cada partição. O tamanho recomendado da partição é 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, o que oferece melhor desempenho de consulta com perda mínima de recuperação (normalmente menos de 1 a 2%).

Defina como FLAT se uma recuperação de 99% ou mais for necessária.
Criação de índice
(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ê notar uma deterioração na recuperação.
Criação de índice
(opcional)
scann.num_leaves_to_search Essa flag do banco de dados controla o número absoluto de folhas ou partições a serem pesquisadas, o que permite trocar a recuperação e a QPS. O valor padrão é 1% do valor definido em num_leaves.

Um valor mais alto resulta em um recall melhor, mas em um QPS menor. Da mesma forma, um valor mais baixo resulta em um recall menor, mas em um QPS maior.
Consultar o tempo de execução
(opcional)
scann.pre_reordering_num_neighbors A flag do banco de dados, quando definida, especifica o número de vizinhos candidatos a serem considerados durante as fases de reordenação depois que a pesquisa inicial identifica um conjunto de candidatos. Defina esse parâmetro como 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 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.
Consultar o tempo de execução
(opcional)
scann.num_search_threads O número de linhas de execução de pesquisa para pesquisa com várias linhas de execução. Isso pode ajudar a reduzir a latência de uma única consulta usando mais de uma linha de execução para a pesquisa de rede neural artificial 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 limitado à CPU. O valor padrão é 2. Consultar o tempo de execução
(opcional)

A seguir