Поделиться через


Размер векторного индекса и соблюдение ограничений

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

Примечание.

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

Совет

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

Примечание.

Не все алгоритмы используют квоту размера векторного индекса. Квоты векторов устанавливаются на основе требований к памяти для поиска ближайших соседей методом приближений. Векторные поля, созданные с помощью алгоритма иерархического навигационного малого мира (HNSW), должны находиться в памяти во время выполнения запроса вследствие характера случайных переходов на основе графов. Векторные поля, использующие исчерпывающий алгоритм KNN, загружаются в память динамически на страницах во время выполнения запроса, и в результате не потребляют квоту вектора.

Ключевые моменты о квоте и размере векторного индекса

  • Размер векторного индекса измеряется в байтах.

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

  • Квоты векторов применяются в службе поиска в целом на секцию. При добавлении секций квота вектора также увеличивается. Квоты вектора на секцию выше в новых службах. Дополнительные сведения см. в разделе "Ограничения размера индекса вектора".

Как проверить размер и количество секций

Если вы не уверены, каковы ограничения службы поиска, ниже приведены два способа получения этих сведений:

  • На портале Azure на странице обзора службы поиска вкладка "Свойства " и вкладка "Использование " отображают размер секции и хранилище, а также векторные квоты и размер векторного индекса.

  • На портале Azure на странице масштабирования можно просмотреть количество и размер секций.

Ограничение вектора зависит от даты создания службы.

Получение размера векторного индекса

Запрос на векторные метрики — это операция плоскости данных. Вы можете использовать портал Azure, REST API или пакеты SDK Azure для получения векторного использования на уровне обслуживания с помощью статистики служб и отдельных индексов.

Размер вектора на один индекс

Чтобы получить размер векторного индекса на индекс, выберите индексы управления>поиском, чтобы просмотреть список индексов и количество документов, размер индексов в памяти и общий размер индекса, хранящийся на диске.

Помните, что квота вектора основана на ограничениях памяти. Для векторных индексов, созданных с помощью алгоритма HNSW, все индексы векторов, доступные для поиска, постоянно загружаются в память. Для индексов, созданных с помощью исчерпывающего алгоритма KNN, векторные индексы загружаются в блоки последовательно во время запроса. Для исчерпывающих индексов KNN отсутствуют требования к месту размещения памяти. Время существования загруженных страниц в памяти аналогично поиску текста, и другие метрики не применимы к исчерпывающим индексам KNN, кроме общего хранилища.

На следующем снимках экрана показаны две версии одного и того же векторного индекса. Одна из версий создается с помощью алгоритма HNSW, где граф векторов является резидентом памяти. Другая версия создается с помощью исчерпывающего алгоритма KNN. С полным KNN нет специализированного индекса в памяти для векторных данных, поэтому на портале отображается 0 MB для размера векторного индекса. Эти векторы по-прежнему существуют и учитываются в общем размере хранилища, но они не занимают ресурс в памяти, который отслеживает метрика размера векторного индекса.

Снимок экрана страницы индексного портала, показывающий размер векторного индекса на основе различных алгоритмов.

Размер вектора для услуги

Чтобы получить размер векторного индекса для службы поиска в целом, выберите вкладку "Обзор " на вкладке "Использование ". Страницы портала обновляются каждые несколько минут, поэтому, если вы недавно обновили индекс, подождите немного, прежде чем проверять результаты.

На следующем снимке экрана показана более старая служба поиска "Стандарт 1 (S1)", настроенная для одного раздела и одной реплики.

  • Квота хранилища — это ограничение диска, и оно включает все индексы (вектор и невектор) в службе поиска.

  • Квота размера векторного индекса — это ограничение памяти. Это объем памяти, необходимый для загрузки всех внутренних индексов векторов, созданных для каждого поля вектора в службе поиска.

Снимок экрана показывает, что индексы (vector и nonvector) используют почти 460 мегабайт доступного дискового хранилища. Векторные индексы используют почти 93 мегабайт памяти на уровне обслуживания.

Снимок экрана с вкладки

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

Примечание.

На диске векторные индексы не занимают 93 мегабайта. Векторные индексы на диске занимают около трех раз больше места, чем векторные индексы в памяти. Дополнительные сведения см. в статье о том, как поля векторов влияют на хранилище дисков.

Факторы, влияющие на размер векторного индекса

Существует три основных компонента, влияющих на размер внутреннего векторного индекса:

  • Необработанный размер данных
  • Накладные расходы, связанные с выбранным алгоритмом
  • Затраты на удаление или обновление документов в индексе

Необработанный размер данных

Каждый вектор обычно представляет собой массив чисел с плавающей запятой с одной точностью в поле типа Collection(Edm.Single).

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

Размер хранилища одного вектора определяется его размерностью. Умножьте размер одного вектора на число документов, содержащих это поле вектора, чтобы получить необработанный размер:

raw size = (number of documents) * (dimensions of vector field) * (size of data type)

Тип данных EDM Размер типа данных
Collection(Edm.Single) 4 байта
Collection(Edm.Half) 2 байта
Collection(Edm.Int16) 2 байта
Collection(Edm.SByte) 1 байт

Затраты на память из выбранного алгоритма

Каждый приблизительный алгоритм ближайшего соседа (ANN) создает дополнительные структуры данных в памяти, чтобы обеспечить эффективный поиск. Эти структуры используют дополнительное пространство в памяти.

Для алгоритма HNSW объем памяти составляет от 1% до 20% для несжатых векторов float32 (Edm.Single).

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

Нагрузка на память увеличивается с большими значениями параметра mHNSW, который указывает количество двунаправленных ссылок, созданных для каждого нового вектора во время построения индекса. Это происходит потому, что каждая ссылка вносит приблизительно 8–10 байтов в документ, а общий объем затрат пропорционально масштабируется.m

В следующей таблице перечислены проценты накладных расходов, наблюдаемые во внутренних тестах для несжатых полей векторов :

Измерения Параметр HNSW (m) Процент накладных расходов
96 4 20%
200 4 %8
768 4 2%
1536 4 1%
3072 4 0,5 %

Эти результаты демонстрируют связь между измерениями, параметром mHNSW и затратами на память для алгоритма HNSW.

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

Затраты на удаление или обновление документов в индексе

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

Мы называем это соотношением удаленных документов. Так как соотношение удаленных документов зависит от характеристик индексирования службы, не существует универсальной эвристики для оценки этого параметра, и нет API или скрипта, который возвращает коэффициент, действующий для вашей службы. Мы наблюдаем, что у половины наших клиентов доля удаленных документов менее 10%. Если вы, как правило, выполняете высокочастотные удаления или обновления, вы можете наблюдать более высокое соотношение удаленных документов.

Это еще один фактор, влияющий на размер векторного индекса. К сожалению, у нас нет механизма для отображения текущего коэффициента удаленных документов.

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

Учитывая ранее описанные факторы, чтобы оценить общий размер индекса вектора, используйте следующий расчет:

(raw_size) * (1 + algorithm_overhead (in percent)) * (1 + deleted_docs_ratio (in percent))

Например, чтобы вычислить raw_size, предположим, что вы используете популярную модель Azure OpenAI с text-embedding-ada-002 1536 измерениями. Это означает, что один документ будет использовать 1536 Edm.Single (с плавающей запятой) или 6144 байта, так как каждый из них Edm.Single составляет 4 байта. 1000 документов с одним, 1536-мерным векторным полем будут потреблять в общей сложности 1000 документов x 1536 чисел = 1 536 000 чисел или 6 144 000 байт.

Если у вас несколько векторных полей, необходимо выполнить это вычисление для каждого векторного поля в индексе и добавить их вместе. Например, 1000 документов с двумя 1536-размерными векторными полями, используют 1000 документов x 2 поля x 1536 floats/doc x 4 байт/float = 12 288 000 байт.

Чтобы получить размер векторного индекса, умножьте этот raw_size на накладные расходы алгоритма и коэффициент удаленных документов. Если накладные расходы вашего алгоритма для выбранных параметров HNSW составляют 10%, а коэффициент удалённых документов равен 10%, то мы получаем: 6.144 MB * (1 + 0.10) * (1 + 0.10) = 7.434 MB.

Влияние полей векторов на хранилище дисков

Большая часть этой статьи содержит сведения о размере векторов в памяти. Дополнительные сведения о затратах на хранение векторных индексов.