milvus-logo
LFAI
Home
  • FAQs

FAQ sobre desempenho

Como definir nlist e nprobe para índices IVF?

A definição de nlist é específica do cenário. Como regra geral, o valor recomendado de nlist é 4 × sqrt(n), em que n é o número total de entidades num segmento.

O tamanho de cada segmento é determinado pelo parâmetro datacoord.segment.maxSize, que é definido para 512 MB por padrão. O número total de entidades num segmento n pode ser estimado dividindo datacoord.segment.maxSize pelo tamanho de cada entidade.

A definição de nprobe é específica do conjunto de dados e do cenário, e envolve um compromisso entre a precisão e o desempenho da consulta. Recomendamos que encontre o valor ideal através de experiências repetidas.

Os gráficos a seguir são resultados de um teste executado no conjunto de dados sift50m e no índice IVF_SQ8, que compara a recuperação e o desempenho da consulta de diferentes pares nlist/nprobe.

Accuracy test Teste de precisão Performance testTeste de desempenho

Porque é que as consultas por vezes demoram mais tempo em conjuntos de dados mais pequenos?

As operações de consulta são efectuadas em segmentos. Os índices reduzem o tempo necessário para consultar um segmento. Se um segmento não tiver sido indexado, o Milvus recorre à pesquisa de força bruta nos dados em bruto - aumentando drasticamente o tempo de consulta.

Portanto, normalmente demora mais tempo a consultar um pequeno conjunto de dados (coleção) porque não tem um índice construído. Isto deve-se ao facto de os tamanhos dos seus segmentos não terem atingido o limiar de construção de índices definido por rootCoord.minSegmentSizeToEnableindex. Chame create_index() para forçar o Milvus a indexar os segmentos que atingiram o limiar mas ainda não foram indexados automaticamente, melhorando significativamente o desempenho da consulta.

Que factores afectam a utilização da CPU?

O uso da CPU aumenta quando o Milvus está construindo índices ou executando consultas. Em geral, a construção de índices é intensiva em CPU, exceto quando se usa Annoy, que é executado em um único thread.

Ao executar consultas, o uso da CPU é afetado por nq e nprobe. Quando nq e nprobe são pequenos, a concorrência é baixa e o uso da CPU permanece baixo.

A inserção simultânea de dados e a pesquisa afectam o desempenho da consulta?

As operações de inserção não consomem muita CPU. No entanto, como os novos segmentos podem não ter atingido o limite para a construção do índice, o Milvus recorre à pesquisa de força bruta - afetando significativamente o desempenho da consulta.

O parâmetro rootcoord.minSegmentSizeToEnableIndex determina o limite de construção de índice para um segmento, e é definido para 1024 linhas por padrão. Consulte Configuração do sistema para obter mais informações.

A indexação de um campo VARCHAR pode melhorar a velocidade de exclusão?

A indexação de um campo VARCHAR pode acelerar as operações "Eliminar por expressão", mas apenas em determinadas condições:

  • Índice INVERTED: Este índice ajuda para IN ou == expressões em campos VARCHAR de chave não primária.
  • Índice Trie: Este índice ajuda nas consultas de prefixo (por exemplo, LIKE prefix%) em campos VARCHAR não primários.

No entanto, a indexação de um campo VARCHAR não acelera:

  • Eliminação por IDs: Quando o campo VARCHAR é a chave primária.
  • Expressões não relacionadas: Quando o campo VARCHAR não faz parte da expressão de exclusão.

Ainda tem dúvidas?

Você pode:

  • Verificar o Milvus no GitHub. Sinta-se à vontade para fazer perguntas, compartilhar ideias e ajudar outras pessoas.
  • Junte-se ao nosso Canal Slack para encontrar suporte e envolver-se com a nossa comunidade de código aberto.

Traduzido porDeepL

Tabela de conteúdos

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

Esta página foi útil?