Criação do í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 ajudam a encontrar os valores ideais de num_leaves
e num_leaves_to_search
para o seu conjunto de dados,
siga estes passos recomendados:
- Para criar o índice
ScaNN
otimizado para os seguintes casos, defina o parâmetronum_leaves
para o seguinte valor, em que rows é o número de linhas na tabela indexada:- Tempo de criação e qualidade do índice equilibrados definidos
num_leaves
parasqrt(rows)
. - quality defina num_leaves como rows/100.
- Tempo de criação e qualidade do índice equilibrados definidos
- Execute as suas consultas de teste, aumentando o valor de
scann.num_of_leaves_to_search
, até atingir o intervalo de recall alvo, por exemplo, 95%. Para mais informações sobre a análise das suas consultas, consulte o artigo Analise as suas consultas. - Tome nota da proporção entre
scann.num_leaves_to_search
enum_leaves
que vai ser usada nos passos seguintes. Esta proporção fornece uma aproximação em torno do conjunto de dados que vai ajudar a alcançar a sua capacidade de memorização alvo.
Se estiver a trabalhar com vetores de alta dimensão (500 dimensões ou mais) e quiser melhorar a capacidade de memorização, experimente ajustar o valor descann.pre_reordering_num_neighbors
. O valor predefinido é definido como o valor500 * K
, em queK
é o limite que definiu na sua consulta. - Se o seu QPS for demasiado baixo depois de as suas consultas atingirem uma taxa de obtenção alvo, siga estes passos:
- Recrie o índice, aumentando o valor de
num_leaves
escann.num_leaves_to_search
de acordo com as seguintes orientações:- Defina
num_leaves
para um fator maior da raiz quadrada da contagem de linhas. Por exemplo, se o índice tivernum_leaves
definido como a raiz quadrada da contagem de linhas, experimente defini-lo como o dobro da raiz quadrada. Se o valor já for o dobro, experimente defini-lo como o triplo da raiz quadrada. - Aumente
scann.num_leaves_to_search
conforme necessário para manter a respetiva proporção comnum_leaves
, que indicou no passo 3. - Defina
num_leaves
para um valor inferior ou igual à contagem de linhas dividida por 100.
- Defina
- Execute novamente as consultas de teste.
Enquanto executa as consultas de teste, experimente reduzir
scann.num_leaves_to_search
e encontrar um valor que aumente as QPS, mantendo a taxa de recordação elevada. Experimente valores diferentes descann.num_leaves_to_search
sem reconstruir o índice.
- Recrie o índice, aumentando o valor de
- Repita o passo 4 até o QPS e o intervalo de recolha terem atingido valores aceitáveis.
Índice de árvore de três níveis
Além das recomendações para o índice de árvore de 2 níveis ScaNN
, use as seguintes orientações.
Para aplicar recomendações para encontrar o valor ideal dos parâmetros de índice num_leaves
e max_num_levels
, siga estes passos:
Crie o índice
ScaNN
com as seguintes combinações denum_leaves
emax_num_levels
com base nos seus objetivos de desempenho:- Equilibrar o tempo de compilação e a qualidade do índice: defina
max_num_levels
como2
enum_leaves
comopower(rows, ⅔)
. - Otimize em função da qualidade: defina
max_num_levels
como2
enum_leaves
comorows/100
.
- Equilibrar o tempo de compilação e a qualidade do índice: defina
Execute as suas consultas de teste. Para mais informações sobre a análise de consultas, consulte o artigo Analise as suas consultas.
Tome nota da relação entre
scann.num_leaves_to_search
enum_leaves
que vai ser usada nos passos seguintes. Esta proporção fornece uma aproximação em torno do conjunto de dados que ajuda a alcançar a taxa de recordação alvo.
Se estiver a trabalhar com vetores de alta dimensão (500 dimensões ou mais) e quiser melhorar a capacidade de memorização, experimente ajustar o valor de scann.pre_reordering_num_neighbors
. O valor predefinido é definido como o valor 500 * K
, em que K
é o limite que definiu na sua consulta.
Se o seu QPS for demasiado baixo depois de as suas consultas atingirem uma taxa de recolha alvo, siga estes passos:
- Recrie o índice, aumentando o valor de
num_leaves
escann.num_leaves_to_search
de acordo com as seguintes orientações: - Defina
num_leaves
para um fator maior depower(rows, ⅔)
. Por exemplo, se o índice tivernum_leaves
definido comopower(rows, ⅔)
, experimente defini-lo como o dobro depower(rows, ⅔)
. Se o valor já for o dobro, experimente defini-lo para o triplo depower(rows, ⅔)
. - Aumente
scann.num_leaves_to_search
conforme necessário para manter a sua proporção comnum_leaves
, que anotou no passo 3. - Defina
num_leaves
para um valor inferior ou igual arows/100
. - Execute novamente as consultas de teste. Enquanto executa as consultas de teste, experimente reduzir
scann.num_leaves_to_search
e encontrar um valor que aumente as QPS, mantendo a taxa de recordação elevada. Experimente valores diferentes descann.num_leaves_to_search
sem reconstruir o índice.
- Recrie o índice, aumentando o valor de
Repita o passo 4 até o QPS e o intervalo de recolha terem atingido valores aceitáveis.
Manutenção do índice
Se a sua tabela for propensa a atualizações ou inserções frequentes, recomendamos que reindexe periodicamente o índice ScaNN
existente para melhorar a precisão da obtenção.
Pode monitorizar as métricas de índice para ver as alterações nas distribuições de vetores ou nas mutações de vetores desde a criação do índice e, em seguida, reindexar em conformidade. Para mais informações sobre métricas, consulte o artigo Métricas do índice de vetores.