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 enumera todas as técnicas de otimização na Pesquisa de IA do Azure que podem ajudar você 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 em da API REST 2024-07-01 e nos pacotes 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 compartimentalização interna porque ela compacta o tamanho do vetor na memória e no disco com o mínimo de esforço, e isso tende a proporcionar o maior benefício na maioria dos cenários. Por outro lado, os tipos estreitos (exceto o float16) exigem um esforço especial para serem criados e stored economiza armazenamento em disco, que não é tão caro quanto a memória.

Abordagem Por que usar essa opção
Adicionar compartimentalização escalar ou binária Use a compartimentalização para compactar as inserções nativas 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 vetoriais que são 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) Exerça a opção de usar menos dimensões em modelos de text-embedding-3. No Azure OpenAI, esses modelos foram treinados novamente na técnica de Matryoshka Representation Learning (MRL) 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. Na 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 produza vetores em um formato de dados estreitos. Ou é necessário ter uma lógica de quantização personalizada que produza 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. Consulte Vetores binários de índice para obter detalhes sobre vetores binários.
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: técnica de tamanho de vetor por 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
compressiontest-narrow 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 o Estatísticas de índice GET ou uma API equivalente nos SDKs do Azure para obter o tamanho do vetor.

Confira também