Compartilhar via


Escolher uma abordagem para otimizar o armazenamento e o processamento de vetores

As inserções, ou a representação numérica de conteúdo heterogêneo, são a base das cargas de trabalho da busca em vetores, mas os tamanhos das inserções faz com que sejam difíceis de escalar e caras para processar. Pesquisas e produtos significativos produziram várias soluções para aprimorar a escala e reduzir os tempos de processamento. A Pesquisa de IA do Azure aproveita vários desses recursos para cargas de trabalho de vetor mais rápidas e baratas.

Este artigo aborda todas as técnicas de otimização no Azure AI Search que podem ajudá-lo a reduzir o tamanho do vetor e os tempos de processamento de consulta.

As configurações de otimização de vetor são especificadas em definições de campo de vetor em um índice de pesquisa. A maioria dos recursos descritos neste artigo geralmente está disponível nos pacotes da API REST 2024-07-01 e do SDK do Azure direcionados a essa versão. O versão de visualização mais recente adiciona suporte para dimensões truncadas se você estiver usando a inserção de text-embedding-3-large ou text-embedding-3-small para vetorização.

Avaliar as opções

Revise as abordagens na Pesquisa de IA do Azure para reduzir a quantidade de armazenamento usada pelos campos vetoriais. Essas abordagens não são mutuamente exclusivas e podem ser combinadas para redução máxima do tamanho do vetor.

Recomendamos a quantização interna porque compacta o tamanho do vetor na memória e no disco com esforço mínimo, o que tende a proporcionar o maior benefício na maioria dos cenários. Por outro lado, tipos estreitos (exceto float16) exigem esforço especial para criá-los e stored economizam no armazenamento em disco, o que não é tão caro quanto a memória.

Abordagem Por que usar essa abordagem
Adicionar compartimentalização escalar ou binária Compactar inserções nativas em float32 ou float16 para int8 (escalar) ou byte (binário). Essa opção reduz o armazenamento na memória e no disco sem degradação do desempenho da consulta. Tipos de dados menores, como int8 ou byte, produzem índices de vetor menos ricos em conteúdo do que aqueles com inserções maiores. Para compensar a perda de informações, a compactação interna inclui opções para processamento pós-consulta usando inserções descompactadas e sobrecarga para retornar resultados mais relevantes. A reclassificação e a sobreamostragem são recursos específicos da compartimentalização interna de campos float32 ou float16 e não podem ser usados em inserções que passam por compartimentalização personalizada.
Dimensões truncadas para modelos de MRL-capable text-embedding-3 (versão prévia) Use menos dimensões em modelos de text-embedding-3. No Azure OpenAI, esses modelos são treinados novamente na técnica de MRL ( Matryoshka Representation Learning ) que produz várias representações de vetor em diferentes níveis de compactação. Essa abordagem produz pesquisas mais rápidas e redução dos custos de armazenamento com perda mínima de informações semânticas. No Pesquisa de IA do Azure, o MRL dá suporte a suplementos de quantização escalar e binária. Ao usar qualquer método de quantização, você também pode especificar uma propriedade truncateDimension em seus campos de vetor para reduzir a dimensionalidade das inserções de texto.
Atribuir tipos de dados primitivos menores a campos de vetor Tipos de dados estreitos, como float16, int16, int8 e byte (binário), consomem menos espaço na memória e no disco, mas você deve ter um modelo de inserção que produz vetores em um formato de dados estreito. Como alternativa, você deve ter uma lógica de quantização personalizada que produz dados pequenos. Um terceiro caso de uso que requer menos esforço é a reconversão de inserções de float32 nativas produzidas pela maioria dos modelos para float16. Para obter informações sobre vetores binários, consulte Vetores binários de índice.
Eliminar o armazenamento opcional de vetores recuperáveis Os vetores retornados em uma resposta de consulta são armazenados separadamente dos vetores usados durante a execução da consulta. Se você não precisar retornar vetores, poderá desativar o armazenamento recuperável, reduzindo o armazenamento geral em disco por campo em até 50 por cento.

Todas essas opções são definidas em um índice vazio. Para implementar qualquer uma delas, use o portal do Azure, APIs REST ou um pacote de SDK do Azure direcionado para essa versão de API.

Depois que o índice for definido, você poderá carregar e indexar documentos como uma etapa separada.

Exemplo: Tamanho do vetor por técnica de compactação de vetor

Código de exemplo: opções de compartimentalização e armazenamento de vetor usando o Python é um exemplo de código Python que cria vários índices de pesquisa que variam de acordo com o uso da compartimentalização de armazenamento vetor, tipos de dados estreitos e propriedades de armazenamento.

Esse código cria e compara o tamanho do índice de armazenamento e vetor para cada opção de otimização de armazenamento de vetor. Nesses resultados, você pode ver que a compartimentalização reduz mais o tamanho do vetor, mas as maiores economias de armazenamento serão obtidas se você usar várias opções.

Nome do índice Tamanho de armazenamento Tamanho do vetor
compressiontest-baseline 21,3613 MB 4,8277 MB
compressiontest-scalar-compression 17,7604 MB 1,2242 MB
teste de compressão-estreito 16,5567 MB 2,4254 MB
compressiontest-no-stored 10.9224 MB 4,8277 MB
compressiontest-all-options 4,9192 MB 1,2242 MB

As APIs de pesquisa relatam o tamanho do vetor e armazenamento no nível do índice, portanto, índices e não campos devem ser a base da comparação. Use as Estatísticas de Índice GET ou uma API equivalente nos SDKs do Azure para obter o tamanho do vetor.