Referência do índice ScaNN

Selecione uma versão da documentação:

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

Parâmetros de aperfeiçoamento

Os seguintes parâmetros de índice e flags da base de dados são usados em conjunto para encontrar o equilíbrio certo entre a capacidade de memorização e as QPS.

Parâmetro de aperfeiçoamento 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 predefiniçã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 predefiniçã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 vetoriais exceder 100 milhões de linhas.
  • Defina o valor como 1 se o número de linhas de vetores for inferior a 10 milhões de linhas.
  • Defina como 1 ou 2 se o número de linhas de vetores estiver entre 10 milhões e 100 milhões de linhas para otimizar o tempo de criação do índice (defina como 2) ou otimizar a capacidade de memorização da pesquisa (defina como 1).
Criação de índice
(opcional)
num_leaves O número de partições a aplicar a este índice. O número de partições que aplica quando cria um índice afeta o desempenho do índice. Ao aumentar as partições para um número definido de vetores, cria um índice mais detalhado, o que melhora a capacidade de memorização e o desempenho das consultas. No entanto, isto tem o custo de tempos de criação de índices mais longos.

Uma vez que as árvores de três níveis são criadas mais rapidamente do que as árvores de dois níveis, pode aumentar o num_leaves_value quando cria um índice de árvore de três níveis para alcançar um melhor desempenho.
  • Índice de dois níveis: defina este valor para qualquer valor entre 1 e 1048576.

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

    Uma vez que é possível criar um índice de árvore de dois níveis num conjunto de dados com menos de 10 milhões de linhas de vetores, cada partição contém menos de (sqrt(10M)) vetores, ou seja, 3200 vetores. Para uma qualidade de pesquisa vetorial ideal, recomendamos que minimize o número de vetores em cada partição. O tamanho recomendado da partição é de cerca de 100 vetores por partição, pelo que deve definir num_leaves como ROWS/100. Se tiver 10 milhões de vetores,deve definir num_leaves como 100 000.
  • Índice de três níveis: defina este valor para qualquer valor entre 1 e 1048576.

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

    Uma vez que é possível criar um índice de árvore de três níveis num conjunto de dados com mais de 100 milhões de linhas de vetores, cada partição contém mais de
    (power(100M, 1/3)) vetores, o que equivale a 465 vetores. Para uma qualidade de pesquisa vetorial ideal, recomendamos que minimize o número de vetores em cada partição. O tamanho recomendado da partição é de cerca de 100 vetores por partição, pelo que deve definir num_leaves como ROWS/100. Se tiver 100 milhões de vetores, deve definir num_leaves como 1 milhão.
Criação do índice
(obrigatório)
quantizer O tipo de quantizador que quer usar para a árvore K-means. O valor predefinido é SQ8, que oferece um melhor desempenho das consultas com uma perda mínima de capacidade de memorização (normalmente, inferior a 1 a 2%).

Defina-o como FLAT se for necessária uma capacidade de memorização de 99% ou superior.
Criação de índice
(opcional)
scann.enable_inline_filtering Ativa o suporte de filtragem inline que consulta os seus dados e aplica filtros diretamente numa operação de pesquisa de similaridade vetorial. Estas consultas de semelhança vetorial usam filtros nas mesmas tabelas da base de dados e concluem a avaliação de filtros enquanto calculam a distância para a identificação do vizinho mais próximo. Esta opção está desativada por predefinição.

Para ativar a filtragem inline, defina este parâmetro como true. Se observar uma deterioração no desempenho, defina a opção como false.

Esta opção está disponível na pré-visualização.
Tempo de execução da consulta
(opcional)
scann.enable_pca Ativa a análise de componentes principais (PCA), que é uma técnica de redução de dimensões usada para reduzir automaticamente o tamanho da incorporação sempre que possível. Esta opção está ativada por predefinição.

Defina como false se observar uma deterioração na capacidade de memorização.
Criação de índice
(opcional)
scann.num_leaves_to_search Esta flag da base de dados controla o número absoluto de folhas ou partições a pesquisar, o que lhe permite fazer uma troca entre a capacidade de memorização e as CPS. O valor predefinido é 1% do valor definido em num_leaves.

Um valor mais elevado resulta numa melhor capacidade de memorização, mas num QPS mais baixo. Da mesma forma, um valor mais baixo resulta numa capacidade de memorização mais baixa, mas num QPS mais elevado.
Tempo de execução da consulta
(opcional)
scann.pre_reordering_num_neighbors Quando definida, a flag da base de dados especifica o número de vizinhos candidatos a considerar durante as fases de reordenação após a pesquisa inicial identificar um conjunto de candidatos. Defina este parâmetro para um valor superior ao número de vizinhos que quer que a consulta devolva.

Um valor mais elevado resulta numa melhor capacidade de memorização, mas num QPS mais baixo. Defina este valor como 0 para desativar a reordenação. A predefinição é 0 se a PCA não estiver ativada durante a criação do índice. Caso contrário, a predefiniçã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 threads de pesquisa para a pesquisa com várias threads. Isto pode ajudar a reduzir a latência de consulta única através da utilização de mais do que um segmento para a pesquisa de ANN do ScaNN em aplicações sensíveis à latência. Esta definição não melhora a latência de consulta única se a base de dados já estiver limitada pela CPU. O valor predefinido é 2. Tempo de execução da consulta
(opcional)

O que se segue?