Partilhar via


Tamanho do índice vetorial e permanência abaixo dos limites

Para cada campo vetorial, o Azure AI Search constrói um índice de vetor interno usando os parâmetros de algoritmo especificados no campo. Como a Pesquisa de IA do Azure impõe cotas ao tamanho do índice vetorial, você deve saber como estimar e monitorar o tamanho do vetor para garantir que você permaneça abaixo dos limites.

Nota

Uma nota sobre terminologia. Internamente, as estruturas de dados físicos de um índice de pesquisa incluem conteúdo bruto (usado para recuperar padrões que exigem conteúdo não tokenizado), índices invertidos (usados para campos de texto pesquisáveis) e índices vetoriais (usados para campos vetoriais pesquisáveis). Este artigo explica os limites para os índices de vetores internos que apoiam cada um dos seus campos vetoriais.

Gorjeta

Técnicas de otimização vetorial estão agora geralmente disponíveis. Use recursos como tipos de dados estreitos, quantização escalar e binária e eliminação de armazenamento redundante para permanecer sob cota vetorial e cota de armazenamento.

Pontos-chave sobre o tamanho da cota e do índice vetorial

  • O tamanho do índice vetorial é medido em bytes.

  • As cotas vetoriais são baseadas em restrições de memória. Todos os índices vetoriais pesquisáveis devem ser carregados na memória. Ao mesmo tempo, também deve haver memória suficiente para outras operações de tempo de execução. Existem quotas vetoriais para assegurar que o sistema global se mantém estável e equilibrado para todas as cargas de trabalho.

  • Os índices vetoriais também estão sujeitos à cota de disco, no sentido de que todos os índices estão sujeitos à cota de disco. Não há nenhuma cota de disco separada para índices vetoriais.

  • As cotas vetoriais são impostas no serviço de pesquisa como um todo, por partição, o que significa que, se você adicionar partições, a cota vetorial aumenta. As cotas vetoriais por partição são maiores em serviços mais recentes. Para obter mais informações, consulte Limites de tamanho do índice vetorial.

Como verificar o tamanho e a quantidade da partição

Se você não tiver certeza de quais são seus limites de serviço de pesquisa, aqui estão duas maneiras de obter essas informações:

  • No portal do Azure, na página Visão geral do serviço de pesquisa, as guias Propriedades e Uso mostram o tamanho e o armazenamento da partição, além da cota vetorial e do tamanho do índice vetorial.

  • No portal do Azure, na página Escala , você pode revisar o número e o tamanho das partições.

Como verificar a data de criação do serviço

Os serviços mais recentes criados após 3 de abril de 2024 oferecem de cinco a dez vezes mais armazenamento vetorial do que os mais antigos com a mesma taxa de faturamento de nível. Se o seu serviço for mais antigo, considere criar um novo serviço e migrar o seu conteúdo.

  1. No portal do Azure, abra o grupo de recursos que contém seu serviço de pesquisa.

  2. No painel mais à esquerda, em Configurações, selecione Implantações.

  3. Localize a implantação do serviço de pesquisa. Se houver muitas implantações, use o filtro para procurar por "pesquisa".

  4. Selecione a implantação. Se tiver mais do que um, clique para ver se resolve para o seu serviço de pesquisa.

    Captura de tela de uma lista de implantações filtradas.

  5. Expanda os detalhes da implantação. Você deve ver Criado e a data de criação.

    Captura de tela dos detalhes da implantação mostrando a data de criação.

  6. Agora que você já sabe a idade do seu serviço de pesquisa, revise os limites de cota de vetor com base na criação do serviço: Limites de tamanho do índice vetorial.

Como obter o tamanho do índice vetorial

Uma solicitação de métricas vetoriais é uma operação de plano de dados. Você pode usar o portal do Azure, APIs REST ou SDKs do Azure para obter o uso de vetor no nível de serviço por meio de estatísticas de serviço e para índices individuais.

As informações de uso podem ser encontradas na guia Uso da página Visão geral. As páginas do portal são atualizadas a cada poucos minutos, portanto, se você atualizou um índice recentemente, aguarde um pouco antes de verificar os resultados.

A captura de tela a seguir é para um serviço de pesquisa Standard 1 (S1) mais antigo, configurado para uma partição e uma réplica.

  • A cota de armazenamento é uma restrição de disco e inclui todos os índices (vetoriais e não vetoriais) em um serviço de pesquisa.
  • A cota de tamanho do índice vetorial é uma restrição de memória. É a quantidade de memória necessária para carregar todos os índices vetoriais internos criados para cada campo vetorial em um serviço de pesquisa.

A captura de tela indica que os índices (vetoriais e não vetoriais) consomem quase 460 megabytes de armazenamento em disco disponível. Os índices vetoriais consomem quase 93 megabytes de memória no nível de serviço.

Captura de tela da guia Uso da página Visão geral mostrando o consumo de índice vetorial em relação à cota.

As cotas para armazenamento e tamanho do índice vetorial aumentam ou diminuem à medida que você adiciona ou remove partições. Se você alterar a contagem de partições, o bloco mostrará uma alteração correspondente na cota de armazenamento e vetor.

Nota

No disco, os índices vetoriais não são de 93 megabytes. Os índices vetoriais no disco ocupam cerca de três vezes mais espaço do que os índices vetoriais na memória. Consulte Como os campos vetoriais afetam o armazenamento em disco para obter detalhes.

Fatores que afetam o tamanho do índice vetorial

Há três componentes principais que afetam o tamanho do seu índice vetorial interno:

  • Tamanho bruto dos dados
  • Sobrecarga do algoritmo selecionado
  • Sobrecarga da exclusão ou atualização de documentos dentro do índice

Tamanho bruto dos dados

Cada vetor é geralmente uma matriz de números de ponto flutuante de precisão única, em um campo do tipo Collection(Edm.Single).

As estruturas de dados vetoriais requerem armazenamento, representado no cálculo a seguir como o "tamanho bruto" dos seus dados. Use esse tamanho bruto para estimar os requisitos de tamanho do índice vetorial de seus campos vetoriais.

O tamanho de armazenamento de um vetor é determinado pela sua dimensionalidade. Multiplique o tamanho de um vetor pelo número de documentos que contêm esse campo vetorial para obter o tamanho bruto:

raw size = (number of documents) * (dimensions of vector field) * (size of data type)

Tipo de dados EDM Tamanho do tipo de dados
Collection(Edm.Single) 4 bytes
Collection(Edm.Half) 2 bytes
Collection(Edm.Int16) 2 bytes
Collection(Edm.SByte) 1 byte

Sobrecarga de memória do algoritmo selecionado

Cada algoritmo de vizinho mais próximo aproximado (ANN) gera estruturas de dados extras na memória para permitir uma pesquisa eficiente. Estas estruturas consomem espaço extra na memória.

Para o algoritmo HNSW, a sobrecarga de memória varia entre 1% e 20%.

A sobrecarga de memória é menor para dimensões mais altas porque o tamanho bruto dos vetores aumenta, enquanto as estruturas de dados extras permanecem um tamanho fixo, uma vez que armazenam informações sobre a conectividade dentro do gráfico. Consequentemente, a contribuição das estruturas de dados adicionais constitui uma parcela menor do tamanho total.

A sobrecarga de memória é maior para valores maiores do parâmetro mHNSW, que determina o número de links bidirecionais criados para cada novo vetor durante a construção do índice. Isso ocorre porque m contribui com aproximadamente 8 bytes a 10 bytes por documento multiplicado pelo m.

A tabela a seguir resume as porcentagens de despesas gerais observadas em testes internos:

Dimensões Parâmetro HNSW (m) Percentagem de despesas gerais
96 4 20%
200 4 8%
768 4 2%
1536 4 1%
3072 4 0,5%

Estes resultados demonstram a relação entre dimensões, parâmetro mHNSW e sobrecarga de memória para o algoritmo HNSW.

Sobrecarga da exclusão ou atualização de documentos dentro do índice

Quando um documento com um campo vetorial é excluído ou atualizado (as atualizações são representadas internamente como uma operação de exclusão e inserção), o documento subjacente é marcado como excluído e ignorado durante consultas subsequentes. À medida que novos documentos são indexados e o índice vetorial interno cresce, o sistema limpa esses documentos excluídos e recupera os recursos. Isso significa que você provavelmente observará um atraso entre a exclusão de documentos e os recursos subjacentes que estão sendo liberados.

Referimo-nos a isto como o rácio de documentos eliminados. Como a proporção de documentos excluídos depende das características de indexação do seu serviço, não há heurística universal para estimar esse parâmetro e não há nenhuma API ou script que retorne a proporção em vigor para o seu serviço. Observamos que metade dos nossos clientes tem um rácio de documentos eliminados inferior a 10%. Se você tende a realizar exclusões ou atualizações de alta frequência, então você pode observar uma maior proporção de documentos excluídos.

Este é outro fator que afeta o tamanho do seu índice vetorial. Infelizmente, não temos um mecanismo para exibir sua taxa atual de documentos excluídos.

Estimar o tamanho total dos dados na memória

Tendo em conta os fatores descritos anteriormente, para estimar o tamanho total do seu índice vetorial, utilize o seguinte cálculo:

(raw_size) * (1 + algorithm_overhead (in percent)) * (1 + deleted_docs_ratio (in percent))

Por exemplo, para calcular o raw_size, vamos supor que você esteja usando um modelo popular do Azure OpenAI, text-embedding-ada-002 com 1.536 dimensões. Isso significa que um documento consumiria 1.536 Edm.Single (floats), ou 6.144 bytes, já que cada Edm.Single um tem 4 bytes. 1.000 documentos com um único campo vetorial de 1.536 dimensões consumiriam no total 1000 docs x 1536 floats/doc = 1.536.000 floats, ou 6.144.000 bytes.

Se você tiver vários campos vetoriais, precisará executar esse cálculo para cada campo vetorial dentro do seu índice e adicioná-los todos. Por exemplo, 1.000 documentos com dois campos vetoriais de 1.536 dimensões consomem 1000 docs x 2 campos x 1536 floats/doc x 4 bytes/float = 12.288.000 bytes.

Para obter o tamanho do índice vetorial, multiplique esse raw_size pela sobrecarga do algoritmo e pela proporção de documento excluído. Se a sobrecarga do algoritmo para os parâmetros HNSW escolhidos for de 10% e a taxa de documentos excluídos for de 10%, obtemos: 6.144 MB * (1 + 0.10) * (1 + 0.10) = 7.434 MB.

Como os campos vetoriais afetam o armazenamento em disco

A maioria deste artigo fornece informações sobre o tamanho dos vetores na memória. Se você quiser saber sobre o tamanho do vetor no disco, o consumo de disco para dados vetoriais é aproximadamente três vezes o tamanho do índice vetorial na memória. Por exemplo, se o seu vectorIndexSize uso estiver em 100 megabytes (10 milhões de bytes), você teria usado pelo menos 300 megabytes de cota para acomodar seus índices vetoriais storageSize .