Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Note
Поиск с использованием ИИ Azure доступна через портал Azure, REST API и Azure SDKs. Он также лежит в основе Foundry IQ — управляемого слоя знаний, который преобразует корпоративный контент в многократно используемые базы знаний с учетом разрешений доступа для агентов на портале Microsoft Foundry.
Внедрение или числовое представление разнородного содержимого являются основой рабочих нагрузок векторного поиска. Однако размеры векторов вложения делают их сложными для масштабирования и дорогостоящими в обработке. Значительные исследования и продуктизация создали несколько решений для улучшения масштаба и сокращения времени обработки. Поиск с использованием ИИ Azure использует ряд этих возможностей для ускорения и удешевления работы с векторными нагрузками.
В этой статье рассматриваются все методы оптимизации в Поиск с использованием ИИ Azure, которые помогут сократить векторный размер и время обработки запросов.
Параметры оптимизации векторов указываются в определениях векторных полей в индексе поиска. Большинство функций, описанных в этой статье, общедоступны в версии latest stable REST API и Azure SDK пакетов, предназначенных для этой версии.
Оцените варианты
Просмотрите подходы в Поиск с использованием ИИ Azure для уменьшения объема хранилища, используемого полями векторов. Эти подходы не являются взаимоисключающими, поэтому их можно объединить для максимального уменьшения размера вектора.
Мы рекомендуем встроенную квантизацию, так как она сжимает размер вектора в памяти и на диске с минимальными усилиями. Этот подход, как правило, обеспечивает наибольшее преимущество в большинстве сценариев. В отличие от этого, узкие типы (за исключением float16) требуют особых усилий для их создания, а stored экономит место на диске, которое не так дорого, как память.
| Подход | Почему этот подход используется |
|---|---|
| Добавление скалярной или двоичной квантизации | Сжать векторы float32 или float16 в int8 (скалярный) или байтовый (двоичный). Этот параметр сокращает объем хранилища в памяти и на диске без снижения производительности запросов. Меньшие типы данных, такие как int8 или байт, создают векторные индексы, которые менее богаты содержимым, чем те, у которых больше встраиваний. Для компенсации потери информации встроенное сжатие включает параметры для постобработки запросов с использованием несжатых встраиваний и увеличения выборки, чтобы вернуть более релевантные результаты. Переупорядочивание и повышенная выборка являются специфическими функциями встроенной квантизации полей float32 или float16 и не могут применяться к embeddings, на которые воздействует настраиваемая квантизация. |
| Сокращение размерностей для моделей text-embedding-3 с поддержкой MRL | Используйте меньше размерностей в моделях text-embedding-3. На Azure OpenAI эти модели переобучены на методе Matryoshka Representation Learning (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 МБ |
| compressiontest-no-stored | 10,9224 МБ | 4,8277 МБ |
| параметры compressiontest-all- | 4,9192 МБ | 1.2242 МБ |
REST API службы поиска сообщают о хранении и размере вектора на уровне индекса, поэтому необходимо сравнить индексы, а не поля. Используйте Indexes — Get Statistics (REST API) или эквивалентный API в Azure SDKs для получения размера вектора.