Explorando a busca vetorial acelerada por GPU no Elasticsearch com NVIDIA: Capítulo I

Com tecnologia NVIDIA cuVS, a colaboração busca fornecer aos desenvolvedores aceleração de GPU para pesquisa vetorial no Elasticsearch.

Da busca vetorial às poderosas REST APIs, o Elasticsearch oferece aos desenvolvedores o kit de ferramentas de busca mais abrangente. Mergulhe em notebooks de exemplo no GitHub para experimentar algo novo. Você também pode iniciar seu teste gratuito ou executar o Elasticsearch localmente hoje mesmo.

Nós da organização Elastic Engineering estamos ocupados otimizando o desempenho do banco de dados vetorial há algum tempo. Nossa missão: tornar o Lucene e o Elasticsearch o melhor banco de dados vetorial. Por meio de instruções SIMD de CPU aceleradas por hardware, introduzindo novas inovações em compressão de dados vetoriais (melhor quantização binária, também conhecida como BBQ) e, em seguida, superando as expectativas ao atualizar a abordagem algorítmica do BBQ para obter ainda mais benefícios, além de tornar o HNSW filtrado mais rápido. Você entendeu a essência: estamos construindo um sistema mais rápido, melhor e mais eficiente. banco de dados vetorial para os desenvolvedores resolverem aqueles problemas RAG-gedy!

Como parte da nossa missão de não deixar nada para trás em termos de eficiência, estamos explorando oportunidades de aceleração com esses curiosos chips de computador, dos quais você provavelmente já ouviu falar: GPUs NVIDIA! (Sério, não é mesmo?).

Quando nos preocupamos com desempenho, temos vários espaços problemáticos a explorar: como indexar exponencialmente mais dados, como recuperar insights deles e como fazer isso quando seus modelos de ML estão envolvidos. Você deve conseguir aproveitar todos os benefícios disponíveis quando tiver GPUs.

Nesta postagem, mergulhamos em nossa colaboração com a equipe de pesquisa de vetores da NVIDIA enquanto exploramos a pesquisa de vetores acelerada por GPU no Elasticsearch. Este trabalho abre caminho para casos de uso em que os desenvolvedores podem usar uma combinação de GPUs e CPUs para aplicativos reais baseados no Elasticsearch. Tempos emocionantes!

GPUs Elasticsearch

Estamos felizes em compartilhar que a equipe de engenharia do Elasticsearch está ajudando a criar a experiência da API Java cuVS de código aberto para desenvolvedores, que expõe vinculações para algoritmos de pesquisa vetorial. Este trabalho aproveita nossa experiência anterior com a Panama FFI. O Elasticsearch e o Apache Lucene usam a API NVIDIA cuVS para criar o gráfico durante a indexação. Certo, vamos avançar; vamos voltar um pouco.

NVIDIA cuVS, uma biblioteca C++ de código aberto, está no centro desta colaboração. O objetivo é levar a aceleração da GPU para a pesquisa vetorial, fornecendo maior rendimento, menor latência e tempos de construção de índice mais rápidos. Mas o Elasticsearch e o Apache Lucene são escritos em Java; como isso funcionará?

Entre em contato com o lucene-cuvs e a colaboração Elastic-NVIDIA-SearchScale para trazê-lo ao ecossistema Lucene para explorar a pesquisa vetorial acelerada por GPU no Elasticsearch. Na versão recente do NVIDIA cuVS 25.02, adicionamos uma API Java para cuVS. A nova API é experimental e continuará evoluindo, mas atualmente está disponível para uso. Pode surgir a pergunta: as chamadas de funções nativas do Java não são lentas? Não mais! Estamos usando a nova Panama FFI (Foreign Function Interface) para as vinculações, que tem sobrecarga mínima para downcalls Java para nativos.

Já faz algum tempo que usamos o Panama FFI no Elasticsearch e no Lucene . É incrível! Mas... sempre tem um “mas”, não é mesmo? O FFI tem desafios de disponibilidade nas versões do Java. Superamos isso compilando a API do cuVS para o Java 21 e encapsulando a implementação em um jar de várias versões voltado para o Java 22. Isso permite o uso do cuVS Java diretamente no Lucene e no Elasticsearch.

Ok, agora que temos a API Java do cuVS, o que mais precisaríamos?

Um conto de dois algoritmos para CPU

O Elasticsearch oferece suporte ao algoritmo HNSW para pesquisa KNN aproximada e escalável. No entanto, para obter o máximo da GPU, usamos um algoritmo diferente, CAGRA [CUDA ANN GRAph], que foi projetado especificamente para os altos níveis de paralelismo oferecidos pela GPU.

Antes de entrarmos em como pretendemos adicionar suporte ao CAGRA, vamos ver como o Elasticsearch e o Lucene acessam dados de índice por meio de um “formato de codec”. Isso consiste em

  1. a representação no disco,
  2. as interfaces para leitura e escrita de dados,
  3. e a maquinaria para lidar com a arquitetura baseada em segmentos do Lucene.

Estamos implementando um novo formato de vetor KNN (k-vizinhos mais próximos) que usa internamente a API Java do cuVS para indexar e pesquisar na GPU. A partir daqui, “analisamos” esse tipo de codec por meio dos mapeamentos do Elasticsearch para um tipo de campo no índice. Como resultado, suas consultas KNN existentes continuam funcionando independentemente de o índice de apoio estar usando um gráfico CAGRA ou HNSW. É claro que isso encobre muitos detalhes, que planejamos abordar em um blog futuro. A seguir está a arquitetura de alto nível para um Elasticsearch acelerado por GPU.

Este novo formato de codec tem como padrão o CAGRA. No entanto, ele também suporta a conversão de um gráfico CAGRA em um gráfico HNSW para pesquisa na CPU.

Indexação e pesquisa na GPU: tomando algumas decisões “essenciais”

Com a arquitetura sem estado do Elasticsearch Serverless, que separa indexação e pesquisa, agora há uma delimitação clara de responsabilidades. Selecionamos o melhor perfil de hardware para cumprir cada uma dessas responsabilidades independentes.

Esperamos que os usuários considerem duas estratégias principais de implantação:

  1. Indexação e pesquisa na GPU: durante a indexação, crie um gráfico CAGRA e use-o durante a pesquisa — ideal quando uma pesquisa com latência extremamente baixa é necessária.
  2. Indexar na GPU e pesquisar na CPU: durante a indexação, crie um gráfico CAGRA e converta-o em um gráfico HNSW. O gráfico HNSW é armazenado no índice, que pode ser usado posteriormente na CPU para pesquisa.

Essa flexibilidade oferece diferentes modelos de implantação, oferecendo compensações entre custo e desempenho. Por exemplo, um serviço de indexação pode usar GPU para criar e mesclar gráficos de forma eficiente e oportuna, enquanto usa uma CPU de menor potência para pesquisa.

Então aqui está o plano para pesquisa vetorial acelerada por GPU no Elasticsearch

Estamos ansiosos para oferecer ganhos de desempenho e flexibilidade com estratégias de implantação aos usuários, oferecendo vários botões para equilibrar custo e desempenho. Aqui está a sessão do NVIDIA GTC 2025 onde este trabalho foi apresentado em detalhes.

Gostaríamos de agradecer às equipes de engenharia da NVIDIA e da SearchScale pela fantástica colaboração. Em um próximo blog, exploraremos os detalhes da implementação e a análise de desempenho com mais profundidade. Segurem seus chapéus de curiosidade 🎩!

Conteúdo relacionado

Pronto para criar buscas de última geração?

Uma pesquisa suficientemente avançada não se consegue apenas com o esforço de uma só pessoa. O Elasticsearch é impulsionado por cientistas de dados, especialistas em operações de aprendizado de máquina, engenheiros e muitos outros que são tão apaixonados por buscas quanto você. Vamos nos conectar e trabalhar juntos para construir a experiência de busca mágica que lhe trará os resultados desejados.

Experimente você mesmo(a)