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 que ajudem você a encontrar os valores ideais de num_leaves e num_leaves_to_search para seu conjunto de dados,
siga estas etapas recomendadas:
- Para criar o índice
ScaNNotimizado para os casos a seguir, defina o parâmetronum_leavescomo o valor a seguir, em que "rows" é o número de linhas na tabela indexada:- Tempo e qualidade de build de índice equilibrados : defina
num_leavescomosqrt(rows). - Qualidade : defina num_leaves como rows/100.
- Tempo e qualidade de build de índice equilibrados : defina
- Execute as consultas de teste, aumentando o valor de
scann.num_of_leaves_to_search, até atingir o intervalo de recall desejado, por exemplo, 95%. Para mais informações sobre como analisar suas consultas, consulte Analisar consultas. - Anote a proporção entre
scann.num_leaves_to_searchenum_leavesque será usada nas etapas subsequentes. Essa proporção fornece uma aproximação em torno do conjunto de dados que vai ajudar você a alcançar o recall desejado.
Se você estiver trabalhando com vetores de alta dimensão (500 dimensões ou mais) e quiser melhorar o recall, tente ajustar o valor descann.pre_reordering_num_neighbors. O valor padrão é definido como500 * K, em queKé o limite definido na consulta. - Se o QPS for muito baixo depois que as consultas atingirem um recall desejado, siga estas etapas:
- Recrie o índice, aumentando o valor de
num_leavesescann.num_leaves_to_searchde acordo com as orientações a seguir:- Defina
num_leavescomo um fator maior da raiz quadrada da contagem de linhas. Por exemplo, se o índice tivernum_leavesdefinido como a raiz quadrada da contagem de linhas, tente defini-lo como o dobro da raiz quadrada. Se o valor já for o dobro, tente defini-lo como o triplo da raiz quadrada. - Aumente
scann.num_leaves_to_searchconforme necessário para manter a proporção comnum_leaves, que você observou na etapa 3. - Defina
num_leavescomo um valor menor ou igual à contagem de linhas dividida por 100.
- Defina
- Execute as consultas de teste novamente.
Enquanto você executa as consultas de teste, experimente reduzir
scann.num_leaves_to_search, encontrando um valor que aumente o QPS, mantendo o recall alto. Tente valores diferentes descann.num_leaves_to_searchsem recriar o índice.
- Recrie o índice, aumentando o valor de
- Repita a etapa 4 até que o QPS e o intervalo de recall atinjam valores aceitáveis.
Índice de árvore de três níveis
Além das recomendações para o índice de árvore de dois níveis ScaNN, 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
ScaNNcom as seguintes combinações denum_leavesemax_num_levelscom base nas suas metas de performance:- Equilibrar o tempo de build e a qualidade do índice: defina
max_num_levelscomo2enum_leavescomopower(rows, ⅔). - Otimizar a qualidade: defina
max_num_levelscomo2enum_leavescomorows/100.
- Equilibrar o tempo de build e a qualidade do índice: defina
Execute as consultas de teste. Para mais informações sobre como analisar consultas, consulte Analisar consultas.
Anote a proporção entre
scann.num_leaves_to_searchenum_leavesque será usada nas etapas subsequentes. Essa proporção fornece uma aproximação em torno do conjunto de dados que vai ajudar você a alcançar o recall desejado.
Se você estiver trabalhando com vetores de alta dimensão (500 dimensões ou mais) e quiser melhorar o recall, tente ajustar o valor de scann.pre_reordering_num_neighbors. O valor padrão é definido como 500 * K, em que K é o limite definido na consulta.
Se o QPS for muito baixo depois que as consultas atingirem um recall desejado, siga estas etapas:
- Recrie o índice, aumentando o valor de
num_leavesescann.num_leaves_to_searchde acordo com as orientações a seguir: - Defina
num_leavescomo um fator maior depower(rows, ⅔). Por exemplo, se o índice tivernum_leavesdefinido comopower(rows, ⅔), tente defini-lo como o dobro depower(rows, ⅔). Se o valor já for o dobro, tente defini-lo como o triplo depower(rows, ⅔). - Aumente
scann.num_leaves_to_searchconforme necessário para manter a proporção comnum_leaves, que você observou na etapa 3. - Defina
num_leavescomo um valor menor ou igual arows/100. - Execute as consultas de teste novamente. Enquanto você executa as consultas de teste, experimente reduzir
scann.num_leaves_to_search, encontrando um valor que aumente o QPS, mantendo o recall alto. Tente valores diferentes descann.num_leaves_to_searchsem recriar o índice.
- Recrie o índice, aumentando o valor de
Repita a etapa 4 até que o QPS e o intervalo de recall atinjam valores aceitáveis.
Manutenção de índice
Se a sua tabela está sujeita a atualizações ou inserções frequentes, recomendamos reindexar periodicamente o índice ScaNN atual para melhorar a acurácia de recall.
Você pode monitorar as métricas de índice para visualizar alterações nas distribuições de vetores ou mutações de vetores desde que o índice foi criado e, em seguida, reindexá-lo corretamente. Para mais informações sobre métricas, consulte Métricas de índice vetorial.