Os parâmetros recomendados para o índice ScaNN
são diferentes dependendo se você escolhe criar um índice de árvore de dois ou três níveis. Esta página fornece recomendações sobre como ajustar os parâmetros de índice para um equilíbrio ideal entre recuperação e QPS.
Criação de índice ScaNN
Para mais informações, consulte a referência do índice SCANN.
Índice de árvore de dois níveis
Para aplicar recomendações e encontrar os valores ideais de num_leaves
e num_leaves_to_search
para seu conjunto de dados, siga estas etapas:
- Para criar o índice
ScaNN
otimizado para os casos a seguir, defina o parâmetronum_leaves
como o valor a seguir, em que linhas é o número de linhas na tabela indexada:- tempo e qualidade de build de índice equilibrados definiram
num_leaves
comosqrt(rows)
. - quality define num_leaves como linhas/100.
- tempo e qualidade de build de índice equilibrados definiram
- Execute as consultas de teste, aumentando o valor de
scann.num_of_leaves_to_search
, até atingir o intervalo de recuperação desejado, por exemplo, 95%. Para mais informações sobre como analisar suas consultas, consulte Analisar suas consultas. - Anote a proporção entre
scann.num_leaves_to_search
enum_leaves
que será usada nas próximas etapas. Essa proporção fornece uma aproximação do conjunto de dados que vai ajudar a alcançar a recuperação desejada.
Se você estiver trabalhando com vetores de alta dimensão (500 ou mais) e quiser melhorar a recuperação, tente ajustar o valor descann.pre_reordering_num_neighbors
. O valor padrão é definido como500 * K
, em queK
é o limite que você definiu na consulta. - Se a QPS estiver muito baixa depois que as consultas atingirem uma recuperação desejada, siga estas etapas:
- Recrie o índice, aumentando o valor de
num_leaves
escann.num_leaves_to_search
de acordo com as seguintes orientações:- Defina
num_leaves
como 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, tente definir o dobro da raiz quadrada. Se o valor já for o dobro, tente definir o valor para triplicar a raiz quadrada. - Aumente
scann.num_leaves_to_search
conforme necessário para manter a proporção comnum_leaves
, que você anotou na etapa 3. - Defina
num_leaves
como um valor menor ou igual à contagem de linhas dividida por 100.
- Defina
- Execute as consultas de teste novamente.
Enquanto executa as consultas de teste, tente reduzir
scann.num_leaves_to_search
, encontrando um valor que aumente a QPS mantendo o recall alto. Tente valores diferentes descann.num_leaves_to_search
sem reconstruir o índice.
- Recrie o índice, aumentando o valor de
- Repita a etapa 4 até que a QPS e o intervalo de recuperação atinjam valores aceitáveis.
Índice de árvore de três níveis
Além das recomendações para o índice ScaNN
de árvore de dois níveis, use as orientações a seguir.
Para aplicar recomendações e encontrar o valor ideal dos parâmetros de índice num_leaves
e max_num_levels
, siga estas etapas:
Crie o índice
ScaNN
com as seguintes combinações denum_leaves
emax_num_levels
com base nas suas metas de performance:- balance index build time & quality: defina
max_num_levels
como2
enum_leaves
comopower(rows, ⅔)
. - otimizar para qualidade: defina
max_num_levels
como2
enum_leaves
comorows/100
.
- balance index build time & quality: defina
Execute as consultas de teste. Para mais informações sobre como analisar consultas, consulte Analisar suas consultas.
Anote a proporção entre
scann.num_leaves_to_search
enum_leaves
que será usada nas próximas etapas. Essa proporção fornece uma estimativa do conjunto de dados que vai ajudar você a alcançar a lembrança desejada.
Se você estiver trabalhando com vetores de alta dimensão (500 dimensões ou mais) e quiser melhorar a recuperação, tente ajustar o valor de scann.pre_reordering_num_neighbors
. O valor padrão é definido como 500 * K
, em que K
é o limite que você definiu na consulta.
Se a QPS estiver muito baixa depois que as consultas atingirem uma recuperação de destino, siga estas etapas:
- Recrie o índice, aumentando o valor de
num_leaves
escann.num_leaves_to_search
de acordo com as seguintes orientações: - Defina
num_leaves
como um fator maior dopower(rows, ⅔)
. Por exemplo, se o índice tivernum_leaves
definido comopower(rows, ⅔)
, tente definir o dobro dopower(rows, ⅔)
. Se o valor já for o dobro, tente definir o valor para triplicar opower(rows, ⅔)
. - Aumente
scann.num_leaves_to_search
conforme necessário para manter a proporção comnum_leaves
, que você anotou na etapa 3. - Defina
num_leaves
como um valor menor ou igual arows/100
. - Execute as consultas de teste novamente. Enquanto executa as consultas de teste, tente reduzir
scann.num_leaves_to_search
, encontrando um valor que aumente a QPS mantendo o recall alto. Tente valores diferentes descann.num_leaves_to_search
sem reconstruir o índice.
- Recrie o índice, aumentando o valor de
Repita a etapa 4 até que a QPS e o intervalo de recuperação atinjam valores aceitáveis.
Manutenção de índice
Se a tabela for propensa a atualizações ou inserções frequentes, recomendamos reindexar periodicamente o índice ScaNN
para melhorar a precisão da recuperação.
É possível monitorar as métricas do índice para conferir mudanças nas distribuições ou mutações de vetor desde que o índice foi criado e, em seguida, reindexar de acordo. Para mais informações sobre métricas, consulte Conferir métricas do índice vetorial.