Выбор подхода для оптимизации хранилища векторов и обработки

Внедрение или числовое представление разнородного содержимого являются основой рабочих нагрузок векторного поиска. Однако размеры внедрения делают их сложными для масштабирования и затратами на обработку. Значительные исследования и продуктизация создали несколько решений для улучшения масштаба и сокращения времени обработки. Поиск ИИ Azure использует ряд этих возможностей для более быстрых и дешевых векторных рабочих нагрузок.

В этой статье рассматриваются все методы оптимизации в поиске ИИ Azure, которые помогут уменьшить размер векторов и время обработки запросов.

Параметры оптимизации векторов указываются в определениях векторных полей в индексе поиска. Большинство функций, описанных в этой статье, обычно доступны в последней стабильной версии REST API и пакетах SDK Azure, предназначенных для этой версии.

Оценка параметров

Просмотрите подходы в службе "Поиск ИИ Azure", чтобы уменьшить объем хранилища, используемого векторными полями. Эти подходы не являются взаимоисключающими, поэтому их можно объединить для максимального уменьшения размера вектора.

Мы рекомендуем встроенную квантизацию, так как она сжимает размер вектора в памяти и на диске с минимальными усилиями. Этот подход, как правило, обеспечивает наибольшее преимущество в большинстве сценариев. В отличие от этого, узкие типы (за исключением float16) требуют особых усилий для их создания, а stored экономят место на диске, что не так дорого, как память.

Подход Почему этот подход используется
Добавление скалярной или двоичной квантизации Сжатие встраиваний типа float32 или float16 в int8 (скалярный) или в байт (двоичный). Этот параметр сокращает объем хранилища в памяти и на диске без снижения производительности запросов. Меньшие типы данных, такие как int8 или байт, создают векторные индексы, которые менее богаты содержимым, чем те, у которых больше внедрения. Для компенсации потерь информации встроенное сжатие предусматривает параметры постобработки запросов с использованием несжатых интеграций и повторной выборки, чтобы предоставить более релевантные результаты. Повторное использование и перезагружение являются конкретными функциями встроенной квантизации полей float32 или float16 и не могут использоваться при внедрении, которые проходят настраиваемую квантизацию.
Усечение измерений для моделей с поддержкой MRL и текстового встраивания версии 3 Используйте меньше измерений в моделях вложения текста. В Azure OpenAI эти модели переобучены на методе Обучения представления Матриошки (MRL), который создает несколько векторных представлений на разных уровнях сжатия. Такой подход позволяет быстрее выполнять поиск и сократить затраты на хранение с минимальными потерями семантической информации. В поиске ИИ Azure MRL поддерживает скалярную и двоичную квантизацию. При использовании любого метода квантизации можно также указать truncateDimension свойство в полях векторов, чтобы уменьшить размерность внедрения текста.
Назначение небольших примитивных типов данных полям векторов Узкие типы данных, такие как float16, int16, int8 и байт (binary), потребляют меньше места в памяти и на диске. Однако у вас должна быть модель внедрения, которая выводит векторы в узком формате данных. Кроме того, необходимо иметь пользовательскую логику квантизации, которая выводит небольшие данные. Третий вариант использования, требующий меньше усилий, — переадресовка собственных внедренных операций float32, созданных большинством моделей в float16. Сведения о двоичных векторах см. в разделе "Индекс двоичных векторов".
Исключение необязательного хранилища извлекаемых векторов Векторы, возвращаемые в ответе запроса, хранятся отдельно от векторов, используемых во время выполнения запроса. Если вам не нужно возвращать векторы, вы можете отключить извлекаемое хранилище, чтобы сократить общее хранилище дисков на поле до 50 процентов.

Определите все эти параметры в пустом индексе. Чтобы реализовать любой из них, используйте портал Azure, REST API или пакет azure SDK, предназначенный для этой версии API.

После определения индекса можно загрузить и индексировать документы в виде отдельного шага.

Пример. Размер вектора по методу сжатия векторов

Векторная квантизация и параметры хранения с помощью Python — это пример кода Python, который создает несколько индексов поиска, которые зависят от их использования квантизации векторного хранилища, узких типов данных и свойств хранилища.

Этот код создает и сравнивает размер хранилища и векторного индекса для каждого варианта оптимизации хранилища векторов. Из этих результатов вы увидите, что квантизация уменьшает векторный размер больше всего, но при использовании нескольких вариантов достигается наибольшая экономия хранилища.

Имя индекса Объем памяти Размер вектора
базовый уровень сжатия 21,3613 МБ 4,8277 МБ
сжатие с помощью скалярного сжатия 17,7604 МБ 1.2242 МБ
сжатие с узкой областью 16,5567 МБ 2.4254 МБ
компрессионныйтест-без-хранения 10,9224 МБ 4,8277 МБ
параметры compressiontest-all- 4,9192 МБ 1.2242 МБ

REST API службы поиска предоставляют информацию о хранении и размере вектора на уровне индекса, поэтому необходимо сравнивать индексы, а не поля. Используйте Indexes - Get Statistics (REST API) или эквивалентный API в пакете SDK Azure для получения векторного размера.