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
Stop Building AI Data Infra for the Wrong Stage
Learn how AI data infrastructure should evolve from prototype to enterprise scale, and when Vector Lakebase becomes the right architecture for AI apps.

Why Not All VectorDBs Are Agent-Ready
Explore why choosing the right vector database is critical for scaling AI agents, and why traditional solutions fall short in production.

Vector Databases vs. Document Databases
Use a vector database for similarity search and AI-powered applications; use a document database for flexible schema and JSON-like data storage.



