Acelerando a Busca por Similaridade em Dados Realmente Grandes com Indexação Vetorial
Da visão computacional à descoberta de novos medicamentos, os mecanismos de busca por similaridade vetorial impulsionam muitas aplicações populares de inteligência artificial (IA). Um grande componente do que torna possível consultar com eficiência os conjuntos de dados de milhões, bilhões ou até trilhões de vetores dos quais os mecanismos de busca por similaridade dependem é a indexação, um processo de organização de dados que acelera drasticamente a busca em big data. Este artigo aborda o papel que a indexação desempenha para tornar a busca por similaridade vetorial eficiente, diferentes tipos de índices de arquivo invertido vetorial (IVF) e conselhos sobre qual índice usar em diferentes cenários.
Ir para:
- Como a indexação vetorial acelera a busca por similaridade e o aprendizado de máquina?
- Quais são os diferentes tipos de índices IVF e para quais cenários eles são mais adequados?
- FLAT: Bom para pesquisar conjuntos de dados relativamente pequenos (na escala de milhões) quando é necessário 100% de recall.
- IVF_FLAT: Melhora a velocidade às custas da precisão (e vice-versa).
- IVF_SQ8: Mais rápido e menos exigente em recursos do que IVF_FLAT, mas também menos preciso.
- IVF_SQ8H: Nova abordagem híbrida GPU/CPU que é ainda mais rápida do que IVF_SQ8.
- Saiba mais sobre o Milvus, uma plataforma de gerenciamento de dados vetoriais em escala massiva.
Como a indexação vetorial acelera a busca por similaridade e o aprendizado de máquina?
Os mecanismos de busca por similaridade funcionam comparando uma entrada a um banco de dados para encontrar objetos que sejam mais semelhantes à entrada. A indexação é o processo de organizar dados de forma eficiente, e desempenha um papel importante em tornar a busca por similaridade útil ao acelerar drasticamente consultas demoradas em grandes conjuntos de dados. Depois que um conjunto de dados vetoriais massivo é indexado, as consultas podem ser direcionadas para clusters, ou subconjuntos de dados, que têm maior probabilidade de conter vetores semelhantes a uma consulta de entrada. Na prática, isso significa que um certo grau de precisão é sacrificado para acelerar consultas em dados vetoriais realmente grandes.
Uma analogia pode ser feita com um dicionário, onde as palavras são organizadas em ordem alfabética. Ao procurar uma palavra, é possível navegar rapidamente para uma seção que contém apenas palavras com a mesma inicial — acelerando drasticamente a busca pela definição da palavra de entrada.
Quais são os diferentes tipos de índices IVF e para quais cenários eles são mais adequados?
Há inúmeros índices projetados para busca por similaridade vetorial de alta dimensionalidade, e cada um traz compensações em desempenho, precisão e requisitos de armazenamento. Este artigo aborda vários tipos comuns de índices IVF, seus pontos fortes e fracos, bem como resultados de testes de desempenho para cada tipo de índice. Os testes de desempenho quantificam o tempo de consulta e as taxas de recall para cada tipo de índice no Milvus, uma plataforma de gerenciamento de dados vetoriais de código aberto. Para informações adicionais sobre o ambiente de teste, consulte a seção de metodologia no final deste artigo.
FLAT: Bom para pesquisar conjuntos de dados relativamente pequenos (na escala de milhões) quando é necessário 100% de recall.
Para aplicações de busca por similaridade vetorial que exigem precisão perfeita e dependem de conjuntos de dados relativamente pequenos (na escala de milhões), o índice FLAT é uma boa escolha. FLAT não comprime vetores e é o único índice que pode garantir resultados de busca exatos. Os resultados do FLAT também podem ser usados como ponto de comparação para resultados produzidos por outros índices que têm menos de 100% de recall.
FLAT é preciso porque adota uma abordagem exaustiva para a busca, o que significa que, para cada consulta, a entrada-alvo é comparada com todos os vetores em um conjunto de dados. Isso torna o FLAT o índice mais lento da nossa lista e pouco adequado para consultar dados vetoriais massivos. Não há parâmetros para o índice FLAT no Milvus, e usá-lo não requer treinamento de dados nem armazenamento adicional.
Resultados do teste de desempenho do FLAT:
O teste de desempenho do tempo de consulta do FLAT foi conduzido no Milvus usando um conjunto de dados composto por 2 milhões de vetores de 128 dimensões.
Resultados do teste de tempo de consulta para o índice FLAT no Milvus.
Principais conclusões:
- À medida que nq (o número de vetores-alvo para uma consulta) aumenta, o tempo de consulta aumenta.
- Usando o índice FLAT no Milvus, podemos ver que o tempo de consulta aumenta acentuadamente quando nq ultrapassa 200.
- Em geral, o índice FLAT é mais rápido e mais consistente ao executar o Milvus em GPU em comparação com CPU. No entanto, consultas FLAT em CPU são mais rápidas quando nq está abaixo de 20.
IVF_FLAT: Melhora a velocidade às custas da precisão (e vice-versa).
Uma forma comum de acelerar o processo de busca por similaridade às custas da precisão é realizar uma busca aproximada pelo vizinho mais próximo (ANN). Algoritmos ANN reduzem os requisitos de armazenamento e a carga computacional ao agrupar vetores semelhantes, resultando em uma busca vetorial mais rápida. IVF_FLAT é o tipo mais básico de índice de arquivo invertido e se baseia em uma forma de busca ANN.
O IVF_FLAT divide os dados vetoriais em um número de unidades de cluster (nlist) e então compara as distâncias entre o vetor de entrada-alvo e o centro de cada cluster. Dependendo do número de clusters que o sistema está configurado para consultar (nprobe), os resultados da busca por similaridade são retornados com base em comparações entre a entrada-alvo e os vetores apenas no(s) cluster(s) mais semelhante(s) — reduzindo drasticamente o tempo de consulta.
Ao ajustar nprobe, é possível encontrar um equilíbrio ideal entre precisão e velocidade para um determinado cenário. Os resultados do nosso teste de desempenho do IVF_FLAT demonstram que o tempo de consulta aumenta acentuadamente à medida que tanto o número de vetores de entrada-alvo (nq) quanto o número de clusters a pesquisar (nprobe) aumentam. No entanto, o IVF_FLAT não comprime os dados vetoriais; os arquivos de índice incluem metadados que aumentam marginalmente os requisitos de armazenamento em comparação com o conjunto de dados vetoriais bruto não indexado.
Resultados do teste de desempenho do IVF_FLAT:
O teste de desempenho do tempo de consulta do IVF_FLAT foi conduzido no Milvus usando o conjunto de dados público 1B SIFT, que contém 1 bilhão de vetores de 128 dimensões.
Resultados do teste de tempo de consulta para o índice IVF_FLAT no Milvus.
Principais conclusões:
- Ao executar em CPU, o tempo de consulta para o índice IVF_FLAT no Milvus aumenta tanto com nprobe quanto com nq. Isso significa que quanto mais vetores de entrada uma consulta contém, ou quanto mais clusters uma consulta pesquisa, maior será o tempo de consulta.
- Em GPU, o índice apresenta menor variação de tempo em relação às mudanças em nq e nprobe. Isso ocorre porque os dados do índice são grandes, e copiar dados da memória da CPU para a memória da GPU representa a maior parte do tempo total de consulta.
- Em todos os cenários, exceto quando nq = 1.000 e nprobe = 32, o índice IVF_FLAT é mais eficiente ao executar em CPU.
O teste de desempenho de recall do IVF_FLAT foi conduzido no Milvus usando tanto o conjunto de dados público 1M SIFT, que contém 1 milhão de vetores de 128 dimensões, quanto o conjunto de dados glove-200-angular, que contém mais de 1 milhão de vetores de 200 dimensões, para a construção do índice (nlist = 16.384).
Resultados do teste de taxa de recall para o índice IVF_FLAT no Milvus.
Principais conclusões:
- O índice IVF_FLAT pode ser otimizado para precisão, alcançando uma taxa de recall acima de 0,99 no conjunto de dados 1M SIFT quando nprobe = 256.
IVF_SQ8: Mais rápido e consome menos recursos que o IVF_FLAT, mas também é menos preciso.
O IVF_FLAT não realiza nenhuma compressão, portanto os arquivos de índice que ele produz têm aproximadamente o mesmo tamanho que os dados vetoriais originais, brutos e não indexados. Por exemplo, se o dataset SIFT 1B original tem 476 GB, seus arquivos de índice IVF_FLAT serão ligeiramente maiores (~470 GB). Carregar todos os arquivos de índice na memória consumirá 470 GB de armazenamento.
Quando os recursos de memória de disco, CPU ou GPU são limitados, o IVF_SQ8 é uma opção melhor que o IVF_FLAT. Esse tipo de índice pode converter cada FLOAT (4 bytes) em UINT8 (1 byte) realizando quantização escalar. Isso reduz o consumo de memória de disco, CPU e GPU em 70–75%. Para o dataset SIFT 1B, os arquivos de índice IVF_SQ8 exigem apenas 140 GB de armazenamento.
Resultados do teste de desempenho do IVF_SQ8:
O teste de tempo de consulta do IVF_SQ8 foi conduzido no Milvus usando o dataset público SIFT 1B, que contém 1 bilhão de vetores de 128 dimensões, para a construção do índice.
Resultados do teste de tempo de consulta para o índice IVF_SQ8 no Milvus.
Principais conclusões:
- Ao reduzir o tamanho do arquivo de índice, o IVF_SQ8 oferece melhorias de desempenho marcantes em relação ao IVF_FLAT. O IVF_SQ8 segue uma curva de desempenho semelhante à do IVF_FLAT, com o tempo de consulta aumentando com nq e nprobe.
- Semelhante ao IVF_FLAT, o IVF_SQ8 apresenta desempenho mais rápido ao ser executado em CPU e quando nq e nprobe são menores.
O teste de desempenho de recall do IVF_SQ8 foi conduzido no Milvus usando tanto o dataset público SIFT 1M, que contém 1 milhão de vetores de 128 dimensões, quanto o dataset glove-200-angular, que contém mais de 1 milhão de vetores de 200 dimensões, para a construção do índice (nlist = 16,384).
Resultados do teste de taxa de recall para o índice IVF_SQ8 no Milvus.
Principais conclusões:
- Apesar de comprimir os dados originais, o IVF_SQ8 não apresenta uma diminuição significativa na precisão da consulta. Em várias configurações de nprobe, o IVF_SQ8 tem no máximo uma taxa de recall 1% menor que a do IVF_FLAT.
IVF_SQ8H: Nova abordagem híbrida GPU/CPU que é ainda mais rápida que o IVF_SQ8.
O IVF_SQ8H é um novo tipo de índice que melhora o desempenho de consulta em comparação com o IVF_SQ8. Quando um índice IVF_SQ8 executado em CPU é consultado, a maior parte do tempo total de consulta é gasta encontrando clusters nprobe que estão mais próximos do vetor de entrada alvo. Para reduzir o tempo de consulta, o IVF_SQ8 copia os dados para operações do quantizador grosseiro, que são menores que os arquivos de índice, para a memória da GPU — acelerando muito as operações do quantizador grosseiro. Em seguida, gpu_search_threshold determina qual dispositivo executa a consulta. Quando nq >= gpu_search_threshold, a GPU executa a consulta; caso contrário, a CPU executa a consulta.
O IVF_SQ8H é um tipo de índice híbrido que exige que a CPU e a GPU trabalhem juntas. Ele só pode ser usado com o Milvus com GPU habilitada.
Resultados do teste de desempenho do IVF_SQ8H:
O teste de desempenho de tempo de consulta do IVF_SQ8H foi conduzido no Milvus usando o dataset público SIFT 1B, que contém 1 bilhão de vetores de 128 dimensões, para a construção do índice.
Resultados do teste de tempo de consulta para o índice IVF_SQ8H no Milvus.
Principais conclusões:
- Quando nq é menor ou igual a 1.000, o IVF_SQ8H apresenta tempos de consulta quase duas vezes mais rápidos que o IVFSQ8.
- Quando nq = 2000, os tempos de consulta para IVFSQ8H e IVF_SQ8 são os mesmos. No entanto, se o parâmetro gpu_search_threshold for menor que 2000, o IVF_SQ8H superará o IVF_SQ8.
- A taxa de recall de consulta do IVF_SQ8H é idêntica à do IVF_SQ8, o que significa que um menor tempo de consulta é alcançado sem perda de precisão na busca.
Saiba mais sobre o Milvus, uma plataforma de gerenciamento de dados vetoriais em escala massiva.
Milvus é uma plataforma de gerenciamento de dados vetoriais que pode impulsionar aplicações de busca por similaridade em campos que abrangem inteligência artificial, deep learning, cálculos vetoriais tradicionais e muito mais. Para obter informações adicionais sobre o Milvus, confira os seguintes recursos:
- O Milvus está disponível sob uma licença de código aberto no GitHub.
- Tipos de índice adicionais, incluindo índices baseados em grafos e árvores, são suportados no Milvus. Para uma lista abrangente dos tipos de índice suportados, consulte a documentação para índices vetoriais no Milvus.
- Para saber mais sobre a empresa que lançou o Milvus, visite Zilliz.com.
- Converse com a comunidade Milvus ou obtenha ajuda com um problema no Slack.
Metodologia
Ambiente de teste de desempenho
A configuração do servidor usada nos testes de desempenho referenciados neste artigo é a seguinte:
- Intel (R) Xeon (R) Platinum 8163 @ 2.50GHz, 24 núcleos
- GeForce GTX 2080Ti x 4
- 768 GB de memória
Conceitos técnicos relevantes
Embora não sejam necessários para compreender este artigo, aqui estão alguns conceitos técnicos que são úteis para interpretar os resultados dos nossos testes de desempenho de índices:
Blog_Accelerating Similarity Search on Really Big Data with Vector Indexing_8.png
Recursos
As seguintes fontes foram usadas para este artigo:
- “Enciclopédia de sistemas de banco de dados,” Ling Liu e M. Tamer Özsu.
O que vem a seguir
Continue lendo Acelerando a busca por similaridade em dados realmente grandes com indexação vetorial: Parte II.
Continue lendo

Introducing Loon: A New Storage Engine for Vector Data That Never Stops Changing
Loon is a new storage engine for Milvus 3.0 and Zilliz Vector Lakebase, built to manage evolving vector datasets with ColumnGroups, row ID alignment, and Manifests.

Introducing Zilliz CLI and Agent Skills for Zilliz Cloud
Manage your vector database from your terminal or AI coding agent. Zilliz CLI and Agent Skills work with Claude Code, Cursor, Codex, and Copilot.

Zilliz Cloud Audit Logs Goes GA: Security, Compliance, and Transparency at Scale
Zilliz Cloud Audit Logs are now GA, giving enterprises real-time visibility, compliance-ready trails, and stronger security across AWS, GCP, and Azure.



