Compartilhar via


Guia de Desempenho da Pesquisa Vetorial

A Pesquisa de Vetor de IA do Mosaico foi criada para recuperação rápida e escalonável. O desempenho da pesquisa de vetor depende de muitos fatores, incluindo escolha de SKU, tamanho do índice, tipo de consulta, dimensionalidade de vetor, métodos de autenticação e como seu aplicativo lida com picos de tráfego. A maioria das cargas de trabalho tem um bom desempenho, mas para situações em que você precisa dimensionar ou otimizar a latência, este guia apresenta dicas práticas e padrões comuns para ajudá-lo a configurar seu sistema para um desempenho de pesquisa de vetor ideal.

Fatores que afetam o desempenho

O desempenho não é um único número, é um intervalo que depende das características da carga de trabalho, das opções de configuração e da implementação do cliente. Este guia foi projetado para ajudá-lo a criar um modelo mental claro de como o desempenho funciona para que você possa usar o Mosaic AI Vector Search com mais eficiência.

Veja a seguir os principais fatores que influenciam o comportamento do sistema:

  • Opção de SKU: padrão ou otimizado para armazenamento.
  • Tamanho do índice: número de vetores armazenados.
  • Tamanho da inserção: normalmente de 384 a 1536.
  • Tipo de consulta: aproximação do vizinho mais próximo (ANN) ou híbrido.
  • Número de resultados solicitados: valores mais altos aumentam o tempo de recuperação.
  • Tipo de inserção: gerenciado ou autogerenciado.
  • Carga de consulta: quanto tráfego atinge o ponto de extremidade ao longo do tempo.
  • Método de autenticação: como seu aplicativo se conecta ao Databricks.

O restante deste artigo fornece dicas práticas para ajustar cada uma dessas variáveis e explica como elas afetam a latência de pesquisa e a taxa de transferência de consulta em implantações do mundo real.

Escolher a SKU certa

A Pesquisa de Vetores de IA do Mosaico oferece dois SKUs, cada um projetado para equilibrar latência, escalabilidade e eficiência de custo, dependendo da carga de trabalho. Escolher a SKU certa para seu aplicativo é a primeira alavanca para ajustar o desempenho.

Em geral:

  • Escolha pontos de extremidade padrão quando a latência for crítica e seu índice estiver bem abaixo de 320 milhões de vetores.
  • Escolha pontos de extremidade com otimização de armazenamento quando estiver trabalhando com vetores 10M+, pode tolerar alguma latência extra e precisa de melhor eficiência de custo por vetor (até 7x mais barato).

A tabela a seguir mostra algumas diretrizes de desempenho esperadas.

SKU Latência QPS Capacidade do índice Tamanho da VSU (unidade de pesquisa de vetor)
Standard 20 a 50 ms 30–200+ Vetores de 320M Vetores de 2M
Otimizado para armazenamento 300 a 500 ms 30–50 Vetores 1B Vetores de 64M

Entender o tamanho do índice

O desempenho é mais alto quando o índice se encaixa em uma única unidade de pesquisa de vetor, com espaço extra para lidar com carga de consulta adicional. À medida que as cargas de trabalho são dimensionadas além de uma única unidade de pesquisa de vetor (ou seja, mais de 2M+ vetores para standard ou 64M+ para otimizado para armazenamento), a latência aumenta e os tapers de QPS desativados. Eventualmente, o QPS está em planaltos de aproximadamente 30 QPS (ANN).

O desempenho depende de muitos fatores exclusivos para cada carga de trabalho, como padrões de consulta, filtros, dimensionalidade de vetor e simultaneidade. Os números a seguir são pontos de referência.

SKU Vectors Dimensão Latência QPS Consultas mensais
Standard 10 mil 768 20ms 200+ 500 M+
10 milhões 768 40ms 30 78M
100 milhões 768 50 ms 30 78M
Otimizado para armazenamento 10 milhões 768 300 ms 50 130M
100 milhões 768 400ms 40 100 milhões
1 bi 768 500ms 30 78M

Minimizar o tamanho da inserção

A dimensionalidade vetor refere-se ao número de recursos em cada vetor. Os valores típicos são 384, 768, 1024 ou 1536. Dimensões mais altas fornecem representações mais expressivas que podem melhorar a qualidade, mas têm um custo de computação. Vetores de menor dimensão exigem menos computação durante a recuperação, o que se traduz em tempos de consulta mais rápidos e QPS mais alto. Por outro lado, vetores de dimensão superior aumentam a carga de computação e reduzem a taxa de transferência.

Como regra geral, escolha a menor dimensionalidade que preserva a qualidade de recuperação para seu caso de uso.

Por exemplo, reduzir a dimensionalidade por um fator de dois (por exemplo, de 768 para 384) normalmente melhora o QPS em cerca de 1,5x e reduz a latência em cerca de 20%, dependendo do tamanho do índice e do padrão de consulta. Esses ganhos se compõem ainda mais em dimensionalidades muito baixas. Por exemplo, o uso de vetores 64 dimensionais pode fornecer QPS significativamente maior e latência significativamente menor em comparação com os parâmetros de comparação de 768 dimensões mostrados na tabela. Isso torna 384 dimensões e abaixo especialmente atraentes para casos de uso de alta taxa de transferência, sensíveis à latência, desde que a qualidade da recuperação permaneça aceitável.

Usar ANN para eficiência e usar híbrido quando necessário

Use consultas ANN sempre que possível. Eles são os mais eficientes em computação e dão suporte ao QPS mais alto.

Use a pesquisa híbrida quando necessário. A pesquisa híbrida melhora o recall em alguns aplicativos, especialmente em que palavras-chave específicas do domínio são importantes. A pesquisa híbrida normalmente usa cerca de duas vezes mais recursos que ANN e pode reduzir significativamente a taxa de transferência.

Usar resultados de 10 a 100

Cada consulta inclui um num_results parâmetro, que é o número de resultados de pesquisa a serem retornados. Esse valor afeta diretamente o desempenho. A recuperação de mais resultados requer uma verificação mais profunda do índice, o que aumenta a latência e reduz o QPS. O efeito torna-se mais significativo em valores mais altos. Por exemplo, aumentar num_results em 10x pode dobrar a latência da consulta e reduzir a capacidade do QPS em 3x, dependendo do tamanho e da configuração do índice.

Como prática recomendada, mantenha-se num_results no intervalo de 10 a 100, a menos que seu aplicativo exija especificamente mais. Experimente valores diferentes num_results usando consultas realistas para entender o impacto na carga de trabalho.

Evitar escala para zero para produção

O Vector Search dá suporte a dois tipos de inserções com diferentes compensações de desempenho.

As inserções gerenciadas são as mais convenientes. Com inserções gerenciadas, o Databricks gera inserções para suas linhas e consultas automaticamente. No momento da consulta, o texto da consulta é passado para um ponto de extremidade de serviço de modelo para gerar a inserção, o que adiciona latência. Se o modelo de inserção for externo, ele também introduzirá sobrecarga de rede adicional.

As inserções autogerenciadas permitem que você compute inserções com antecedência e passe os vetores diretamente no momento da consulta. Isso evita a geração de runtime e habilita a recuperação mais rápida. Todos os números de desempenho incluídos neste artigo são baseados em inserções autogerenciadas.

Para casos de uso de produção em tempo real, evite pontos de extremidade de modelo que são dimensionados para zero. As inicializações a frio podem atrasar as respostas em vários minutos ou até mesmo causar falhas se o ponto de extremidade estiver inativo quando uma consulta chegar.

Planejar picos de consulta

Esta seção descreve o que esperar à medida que o tráfego aumenta e como permanecer abaixo dos limites críticos que disparam picos de latência ou 429 erros (Muitas Solicitações).

A latência permanece baixa quando a carga é moderada e aumenta gradualmente à medida que você se aproxima da capacidade máxima do QPS. Quando o sistema atinge 100% capacidade do QPS, ele começa a retornar 429 erros. Se você não tiver configurado a retirada adequada, o aplicativo poderá ficar sem resposta.

429 erros servem como um mecanismo de segurança para proteger o sistema. Eles instruem o cliente a recuar e tentar novamente mais tarde para que o ponto de extremidade permaneça íntegro e responsivo, mesmo sob picos de tráfego repentinos.

Como prática recomendada, use o SDK do Python de Pesquisa de Vetor, que inclui retirada interna e tratamento de repetição.

Se você usar a API REST, implemente a retirada exponencial com tremulação. Consulte antipadrões do Azure.

Usar entidades de serviço com tokens OAuth

Use métodos de autenticação eficientes para obter o melhor desempenho. O Databricks recomenda usar uma entidade de serviço com o token OAuth em todos os ambientes de produção. Os tokens de acesso OAuth fornecem maior segurança e também aproveitam a infraestrutura com otimização de rede para permitir que o sistema opere com capacidade total.

Evite usar PATs (tokens de acesso pessoal), pois eles introduzem sobrecarga de rede, adicionam centenas de milissegundos de latência e reduzem significativamente o QPS que seu ponto de extremidade pode sustentar.

Usar o SDK do Python

Use a versão mais recente do SDK do Python para se beneficiar de otimizações internas de desempenho e confiabilidade.

Reutilize o objeto de índice entre consultas. Evite chamar client.get_index(...).similarity_search(...) em cada solicitação, pois esse padrão adiciona latência desnecessária.

Em vez disso, inicialize o índice uma vez e reutilize-o:

# Initialize once
index = client.get_index(...)

# Then use it for every query
index.similarity_search(...)

Isso é importante ao usar o índice de pesquisa de vetor em ambientes MLFlow, em que você pode criar o objeto de índice na inicialização do ponto de extremidade e reutilizá-lo para cada consulta.

Essa orientação é especialmente útil em aplicativos sensíveis à latência em tempo real. Em configurações de RAG com vários índices ou fluxos de autorização em nome do usuário , em que a seleção de índice ou as credenciais só estão disponíveis no momento da consulta, a inicialização do objeto de índice uma vez pode não ser viável. Essa otimização não é necessária nesses cenários.

Paralelizar entre pontos de extremidade

O Databricks recomenda explorar as seguintes estratégias para aumentar o QPS total no sistema:

  • Dividir índices entre pontos de extremidade. Se você tiver vários índices, cada um dos quais receberá uma parte significativa do tráfego, hospede-os em pontos de extremidade separados para atingir maior largura de banda total.
  • Replique o índice entre pontos de extremidade. Se a maioria do tráfego atingir um único índice, duplica-o em vários pontos de extremidade. Divida o tráfego uniformemente no nível do cliente para ganhos de QPS lineares.

Utilize o teste de carga para garantir que os endpoints estejam corretamente dimensionados.

Um teste de carga mede o desempenho do endpoint de busca vetorial sob diferentes níveis de tráfego, simulando o uso em condições reais e ajudando a dimensionar corretamente o endpoint para atender aos seus requisitos de produção. Consulte Configurar um teste de carga para pontos de extremidade de pesquisa de vetor para obter detalhes sobre como criar e executar um teste de carga.