• О Милвусе
  • Начать
  • Концепции
  • Руководство пользователя
  • Импорт данных
  • Инструменты искусственного интеллекта
  • Руководство по администрированию
  • Инструменты
  • Интеграции
  • Учебники
  • Вопросы и ответы
  • API Reference

Обзор индексов на GPU

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

На следующем рисунке сравнивается производительность запросов (запросы в секунду) в различных конфигурациях индекса, аппаратных установках, векторных наборах данных (Cohere и OpenAI) и размерах поисковых партий, и показано, что GPU_CAGRA неизменно превосходит другие методы.

Gpu Index Performance Производительность индексов на GPU

Настройка пула памяти GPU для Milvus

Milvus поддерживает глобальный пул памяти GPU и предоставляет два параметра конфигурации, initMemSize и maxMemSize, в файле конфигурации Milvus.

gpu:
  initMemSize: 0 # set the initial memory pool size.
  maxMemSize: 0 # sets the maximum memory usage limit. When the memory usage exceeds initMemSize, Milvus will attempt to expand the memory pool.

По умолчанию initMemSize обычно занимает половину памяти GPU при запуске Milvus, а maxMemSize по умолчанию занимает всю память GPU. Размер пула памяти GPU изначально установлен на initMemSize и будет автоматически расширяться до maxMemSize по мере необходимости.

Если указан индекс с поддержкой GPU, Milvus загружает данные целевой коллекции в память GPU перед поиском, поэтому maxMemSize должен быть не меньше размера данных.

Ограничения

  • Для GPU_IVF_FLAT максимальное значение для limit составляет 1 024.

  • Для GPU_IVF_PQ и GPU_CAGRA максимальное значение для limit равно 1 024.

  • Хотя для GPU_BRUTE_FORCE нет установленного значения limit, рекомендуется не превышать 4 096, чтобы избежать потенциальных проблем с производительностью.

  • В настоящее время индексы GPU не поддерживают расстояние COSINE. Если требуется расстояние COSINE, данные следует сначала нормализовать, а затем можно использовать расстояние внутреннего произведения (IP) в качестве замены.

  • Защита от OOM при загрузке для GPU-индексов поддерживается не полностью, слишком большой объем данных может привести к сбою QueryNode.

  • GPU-индексы не поддерживают такие функции поиска, как поиск по диапазону и поиск по группировке.

Поддерживаемые типы индексов GPU

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

Тип индекса

Описание

Использование памяти

GPU_CAGRA

GPU_CAGRA - это графовый индекс, оптимизированный для GPU. Использование GPU класса inference для запуска GPU-версии Milvus может быть более экономичным по сравнению с использованием дорогих GPU класса training.

Объем памяти примерно в 1,8 раза больше, чем у исходных векторных данных.

GPU_IVF_FLAT

GPU_IVF_FLAT - это самый базовый ЭКО-индекс, и закодированные данные, хранящиеся в каждом блоке, соответствуют исходным данным. При выполнении поиска следует учитывать, что для любого поиска по коллекции, проиндексированной GPU_IVF_FLAT, можно задать top-k (limit) до 256.

Требуется память, равная размеру исходных данных.

GPU_IVF_PQ

GPU_IVF_PQ выполняет кластеризацию индексов ЭКО перед квантованием произведения векторов. При выполнении поиска следует учитывать, что для любого поиска по коллекции, проиндексированной GPU_IVF_FLAT, можно установить top-k (limit) до 8 192.

Использует меньший объем памяти, который зависит от настроек параметров сжатия.

GPU_BRUTE_FORCE

GPU_BRUTE_FORCE предназначен для случаев, когда крайне важен высокий отзыв, гарантируя отзыв, равный 1, путем сравнения каждого запроса со всеми векторами в наборе данных. В качестве параметров построения индекса и поиска ему требуются только тип метрики (metric_type) и top-k (limit).

Требуется память, равная размеру исходных данных.

Настройка параметров Milvus для управления памятью GPU

Milvus использует глобальный пул графической памяти для выделения памяти GPU. Он поддерживает два параметра initMemSize и maxMemSize в конфигурационном файле Milvus. Изначально размер пула устанавливается на initMemSize, а после превышения этого лимита автоматически увеличивается до maxMemSize.

По умолчанию initMemSize составляет 1/2 доступной памяти GPU при запуске Milvus, а по умолчанию maxMemSize равен всей доступной памяти GPU.

До версии Milvus 2.4.1 Milvus использует единый пул памяти GPU. В версиях до 2.4.1 рекомендуется устанавливать оба значения в 0.

gpu:
  initMemSize: 0 #set the initial memory pool size.
  maxMemSize: 0 #maxMemSize sets the maximum memory usage limit. When the memory usage exceed initMemSize, Milvus will attempt to expand the memory pool. 

Начиная с Milvus 2.4.1, пул памяти GPU используется только для временных данных GPU во время поиска. Поэтому рекомендуется устанавливать значения 2048 и 4096.

gpu:
  initMemSize: 2048 #set the initial memory pool size.
  maxMemSize: 4096 #maxMemSize sets the maximum memory usage limit. When the memory usage exceed initMemSize, Milvus will attempt to expand the memory pool. 

Чтобы узнать, как построить GPU-индекс, обратитесь к специальному руководству для каждого типа индекса.

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ

  • Когда целесообразно использовать GPU-индекс?

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

  • В каких сценариях GPU-индексы, такие как GPU_CAGRA, GPU_IVF_PQ, GPU_IVF_FLAT и GPU_BRUTE_FORCE, являются наиболее подходящими?

    GPU_CAGRA Эти индексы идеально подходят для сценариев, в которых требуется повышенная производительность, хотя и ценой потребления большего объема памяти. В средах, где экономия памяти является приоритетом, индекс GPU_IVF_PQ может помочь минимизировать требования к хранению, хотя это сопровождается большими потерями в точности. Индекс GPU_IVF_FLAT является сбалансированным вариантом, предлагающим компромисс между производительностью и потреблением памяти. Наконец, индекс GPU_BRUTE_FORCE предназначен для исчерпывающих поисковых операций, гарантируя коэффициент отзыва, равный 1, при выполнении сквозного поиска.

Попробуйте Managed Milvus бесплатно

Zilliz Cloud работает без проблем, поддерживается Milvus и в 10 раз быстрее.

Начать
Обратная связь

Была ли эта страница полезной?