Выбор подхода для оптимизации хранилища векторов и обработки
Внедрение или числовое представление разнородного содержимого являются основой рабочих нагрузок векторного поиска, но размеры внедрения делают их сложными для масштабирования и затратами на обработку. Значительные исследования и продуктизация создали несколько решений для улучшения масштаба и сокращения времени обработки. Поиск azure AI использует ряд этих возможностей для более быстрых и дешевых векторных рабочих нагрузок.
В этой статье перечислены все методы оптимизации в службе "Поиск ИИ Azure", которые помогут уменьшить размер векторов и время обработки запросов.
Параметры оптимизации векторов указываются в определениях векторных полей в индексе поиска. Большинство функций, описанных в этой статье, общедоступны в REST API 2024-07-01 и в пакетах sdk Azure, предназначенных для этой версии. Последняя предварительная версия добавляет поддержку усеченных измерений, если для векторизации используется векторизация текста 3-большой или текстовый встраиваемый текст.
Оценка параметров
Просмотрите подходы в службе "Поиск ИИ Azure", чтобы уменьшить объем хранилища, используемого векторными полями. Эти подходы не являются взаимоисключающими и могут объединяться для максимального уменьшения размера вектора.
Мы рекомендуем встроенную квантизацию, так как она сжимает размер вектора в памяти и на диске с минимальными усилиями, и, как правило, обеспечивает большую выгоду в большинстве сценариев. В отличие от этого, узкие типы (за исключением float16) требуют особых усилий для их создания и stored
экономии на диске, что не так дорого, как память.
Подход | Зачем использовать эту опцию |
---|---|
Добавление скалярной или двоичной квантизации | Используйте квантизацию для сжатия собственных значений float32 или float16 внедрения в int8 (scalar) или Byte (binary). Этот параметр сокращает объем хранилища в памяти и на диске без снижения производительности запросов. Небольшие типы данных, такие как int8 или Byte, создают векторные индексы, которые менее богаты содержимым, чем те, у которых больше внедрения. Для смещения потери информации встроенная сжатие включает параметры обработки после запроса с помощью несжатых внедренных внедренных и перераспределений, чтобы вернуть более релевантные результаты. Повторное использование и перезагружение являются конкретными функциями встроенной квантизации полей float32 или float16 и не могут использоваться при внедрении, которые проходят настраиваемую квантизацию. |
Усечение измерений для моделей с поддержкой MRL с поддержкой текста-внедрения текста-3 (предварительная версия) | Упражнение для использования меньшего количества измерений для моделей, внедренных в текст. В Azure OpenAI эти модели были переучены на методе Обучения представления Матриошки (MRL), который создает несколько векторных представлений на разных уровнях сжатия. Такой подход позволяет быстрее выполнять поиск и сократить затраты на хранение с минимальными потерями семантической информации. В поиске ИИ Azure MRL поддерживает скалярную и двоичную квантизацию. При использовании любого метода квантизации можно также указать truncateDimension свойство в полях векторов, чтобы уменьшить размерность внедрения текста. |
Назначение небольших примитивных типов данных полям векторов | Узкие типы данных, такие как float16, int16, int8 и Byte (binary), потребляют меньше места в памяти и на диске, но у вас должна быть модель внедрения, которая выводит векторы в узком формате данных. Кроме того, у вас должна быть пользовательская логика квантизации, которая выводит небольшие данные. Третий вариант использования, требующий меньше усилий, — переадресовка собственных внедренных операций float32, созданных большинством моделей в float16. Дополнительные сведения о двоичных векторах см. в разделе "Двоичные векторы индекса". |
Исключение необязательного хранилища извлекаемых векторов | Векторы, возвращаемые в ответе запроса, хранятся отдельно от векторов, используемых во время выполнения запроса. Если вам не нужно возвращать векторы, вы можете отключить извлекаемое хранилище, уменьшая общий объем хранилища дисков на поле до 50 процентов. |
Все эти параметры определены в пустом индексе. Чтобы реализовать любой из них, используйте портал Azure, REST API или пакет azure SDK, предназначенный для этой версии API.
После определения индекса можно загрузить и индексировать документы в виде отдельного шага.
Пример: размер вектора по методу сжатия векторов
Пример кода. Векторная квантизация и параметры хранения с помощью Python — это пример кода Python , который создает несколько индексов поиска, которые зависят от их использования квантизации векторного хранилища, узких типов данных и свойств хранилища.
Этот код создает и сравнивает размер хранилища и векторного индекса для каждого варианта оптимизации хранилища векторов. Из этих результатов вы увидите, что квантизация уменьшает векторный размер больше всего, но при использовании нескольких вариантов достигается наибольшая экономия хранилища.
Имя индекса | Объем памяти | Размер вектора |
---|---|---|
базовый уровень сжатия | 21.3613 МБ | 4.8277 МБ |
сжатие с помощью скалярного сжатия | 17.7604 МБ | 1.2242 МБ |
сжатие с узкой областью | 16,5567 МБ | 2.4254 МБ |
compressiontest-no-stored | 10.9224 МБ | 4.8277 МБ |
параметры compressiontest-all- | 4.9192 МБ | 1.2242 МБ |
Api-интерфейсы поиска сообщают о хранении и векторе на уровне индекса, поэтому индексы и не поля должны быть основой сравнения. Используйте статистику индекса GET или эквивалентный API в пакетах SDK Azure для получения векторного размера.
См. также
- Начало работы с REST
- Supported data types (Azure Search) (Поддерживаемые типы данных (служба "Поиск Azure")).
- Поиск REST API