Como selecionar parâmetros de índice para o índice IVF
Em Melhores Práticas para Configuração do Milvus, foram apresentadas algumas melhores práticas para a configuração do Milvus 0.6.0. Neste artigo, também apresentaremos algumas melhores práticas para definir parâmetros-chave em clientes Milvus para operações incluindo criação de uma tabela, criação de índices e busca. Esses parâmetros podem afetar o desempenho da busca.
1. index_file_size
Ao criar uma tabela, o parâmetro index_file_size é usado para especificar o tamanho, em MB, de um único arquivo para armazenamento de dados. O padrão é 1024. Quando dados vetoriais estão sendo importados, o Milvus combina incrementalmente os dados em arquivos. Quando o tamanho do arquivo atinge index_file_size, esse arquivo não aceita novos dados e o Milvus salva novos dados em outro arquivo. Esses são todos arquivos de dados brutos. Quando um índice é criado, o Milvus gera um arquivo de índice para cada arquivo de dados brutos. Para o tipo de índice IVFLAT, o tamanho do arquivo de índice é aproximadamente igual ao tamanho do arquivo de dados brutos correspondente. Para o índice SQ8, o tamanho de um arquivo de índice é aproximadamente 30 por cento do arquivo de dados brutos correspondente.
Durante uma busca, o Milvus pesquisa cada arquivo de índice um por um. Pela nossa experiência, quando index_file_size muda de 1024 para 2048, o desempenho da busca melhora de 30 por cento a 50 por cento. No entanto, se o valor for grande demais, arquivos grandes podem falhar ao serem carregados na memória da GPU (ou até mesmo na memória da CPU). Por exemplo, se a memória da GPU for 2 GB e index_file_size for 3 GB, o arquivo de índice não poderá ser carregado na memória da GPU. Normalmente, definimos index_file_size como 1024 MB ou 2048 MB.
A tabela a seguir mostra um teste usando sift50m para index_file_size. O tipo de índice é SQ8.
1-sift50m-test-results-milvus.
Podemos ver que, no modo CPU e no modo GPU, quando index_file_size é 2048 MB em vez de 1024 MB, o desempenho da busca melhora significativamente.
2. nlist e nprobe
O parâmetro nlist é usado para criar índices e o parâmetro nprobe é usado para busca. IVFLAT e SQ8 ambos usam algoritmos de agrupamento para dividir um grande número de vetores em clusters, ou buckets. nlist é o número de buckets durante o agrupamento.
Ao buscar usando índices, a primeira etapa é encontrar um determinado número de buckets mais próximos do vetor-alvo e a segunda etapa é encontrar os k vetores mais semelhantes a partir dos buckets pela distância vetorial. nprobe é o número de buckets na etapa um.
Geralmente, aumentar nlist leva a mais buckets e menos vetores em um bucket durante o agrupamento. Como resultado, a carga computacional diminui e o desempenho da busca melhora. No entanto, com menos vetores para comparação de similaridade, o resultado correto pode ser perdido.
Aumentar nprobe leva a mais buckets para pesquisar. Como resultado, a carga computacional aumenta e o desempenho da busca se deteriora, mas a precisão da busca melhora. A situação pode diferir conforme conjuntos de dados com diferentes distribuições. Você também deve considerar o tamanho do conjunto de dados ao definir nlist e nprobe. Geralmente, recomenda-se que nlist possa ser 4 * sqrt(n), onde n é o número total de vetores. Quanto a nprobe, você deve fazer uma compensação entre precisão e eficiência, e a melhor maneira é determinar o valor por tentativa e erro.
A tabela a seguir mostra um teste usando sift50m para nlist e nprobe. O tipo de índice é SQ8.
sq8-index-test-sift50m.
A tabela compara o desempenho e a precisão da busca usando diferentes valores de nlist/nprobe. Apenas os resultados de GPU são exibidos porque os testes de CPU e GPU têm resultados semelhantes. Neste teste, à medida que os valores de nlist/nprobe aumentam na mesma porcentagem, a precisão da busca também aumenta. Quando nlist = 4096 e nprobe é 128, o Milvus tem o melhor desempenho de busca. Em conclusão, ao determinar os valores de nlist e nprobe, você deve fazer uma compensação entre desempenho e precisão, considerando diferentes conjuntos de dados e requisitos.
Resumo
index_file_size: Quando o tamanho dos dados é maior que index_file_size, quanto maior o valor de index_file_size, melhor o desempenho da busca.
nlist e nprobe:Você deve fazer uma compensação entre desempenho e precisão.
Continue lendo

Introducing Zilliz Cloud Global Cluster: Region-Level Resilience for Mission-Critical AI
Zilliz Cloud Global Cluster delivers multi-region resilience, automatic failover, and fast global AI search with built-in security and compliance.

Zilliz Cloud Update: Smarter Autoscaling for Cost Savings, Stronger Compliance with Audit Logs, and More
What's new in Zilliz Cloud? Smarter autoscaling with scale-down, audit logs GA, enhanced SSO, and Milvus 2.6 in Private Preview.
Milvus/Zilliz + Surveillance: How Vector Databases Transform Multi-Camera Tracking
See how Milvus vector database enhances multi-camera tracking with similarity-based matching for better surveillance in retail, warehouses and transport hubs.



