🚀 Попробуйте Zilliz Cloud, полностью управляемый Milvus, бесплатно — ощутите 10-кратное увеличение производительности! Попробовать сейчас>

milvus-logo
LFAI
Главная
  • Концепции
  • Home
  • Docs
  • Концепции

  • Векторный индекс

  • Индекс GPU

Индекс GPU

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

Важно отметить, что использование GPU-индекса не обязательно снизит задержку по сравнению с использованием CPU-индекса. Если вы хотите полностью увеличить пропускную способность, вам потребуется очень высокое давление запросов или большое количество векторов запросов.

performance производительность

Поддержка GPU в Milvus обеспечивается командой Nvidia RAPIDS. Ниже перечислены типы GPU-индексов, поддерживаемые Milvus в настоящее время.

GPU_CAGRA

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

  • Параметры построения индекса

    ПараметрОписаниеЗначение по умолчанию
    intermediate_graph_degreeВлияет на запоминание и время построения, определяя степень графа перед обрезкой. Рекомендуемые значения: 32 или 64.128
    graph_degreeВлияет на производительность поиска и запоминание, определяя степень графа после обрезки. Большая разница между этими двумя степенями приводит к увеличению времени построения. Его значение должно быть меньше значения intermediate_graph_degree.64
    build_algoВыбирает алгоритм генерации графа перед обрезкой. Возможные значения:
    IVF_PQ: : Обеспечивает более высокое качество, но меньшее время построения.
    NN_DESCENT: Обеспечивает более быстрое построение с потенциально более низким отзывом.
    IVF_PQ
    cache_dataset_on_deviceРешает, кэшировать ли исходный набор данных в памяти GPU. Возможные значения:
    “true”: Кэширует исходный набор данных, чтобы повысить запоминаемость за счет уточнения результатов поиска.
    “false”: Не кэширует исходный набор данных для экономии памяти GPU.
    “false”
    adapt_for_cpuОпределяет, использовать ли GPU для построения индексов и CPU для поиска.
    Установка этого параметра в значение true требует наличия параметра ef в поисковых запросах.
    “false”
  • Параметры поиска

    ПараметрОписаниеЗначение по умолчанию
    itopk_sizeОпределяет размер промежуточных результатов, сохраняемых во время поиска. Большее значение может улучшить запоминание за счет снижения производительности поиска. Оно должно быть, по крайней мере, равно конечному значению top-k (limit) и, как правило, равно 2 (например, 16, 32, 64, 128).Пустой
    search_widthОпределяет количество точек входа в граф CAGRA во время поиска. Увеличение этого значения может улучшить запоминание, но может повлиять на производительность поиска (например, 1, 2, 4, 8, 16, 32).Empty
    min_iterations / max_iterationsУправляет процессом итерации поиска. По умолчанию они установлены на 0, и CAGRA автоматически определяет количество итераций на основе itopk_size и search_width. Настройка этих значений вручную может помочь сбалансировать производительность и точность.0
    team_sizeУказывает количество потоков CUDA, используемых для вычисления метрического расстояния на GPU. Обычные значения - от 2 до 32 (например, 2, 4, 8, 16, 32). Это значение незначительно влияет на производительность поиска. По умолчанию используется значение 0, при котором Milvus автоматически выбирает team_size в зависимости от размерности вектора.0
    efОпределяет компромисс между временем запроса и точностью. Более высокое значение ef приводит к более точному, но более медленному поиску.
    Этот параметр обязателен, если при построении индекса вы установили adapt_for_cpu на true.
    [top_k, int_max]
  • Ограничения на поиск

    ПараметрДиапазон
    limit (top-K)<= 1024
    limit (top-K)<=max((itopk_size + 31)// 32, search_width) * 32

GPU_IVF_FLAT

Подобно IVF_FLAT, GPU_IVF_FLAT также делит векторные данные на кластеры nlist, а затем сравнивает расстояния между целевым входным вектором и центром каждого кластера. В зависимости от количества кластеров, к которым система настроена на запрос (nprobe), результаты поиска сходства возвращаются на основе сравнений между целевым входным вектором и векторами только в наиболее похожих кластерах, что значительно сокращает время запроса.

Настраивая nprobe, можно найти идеальный баланс между точностью и скоростью для конкретного сценария. Результаты тестирования производительности IVF_FLAT показывают, что время выполнения запроса резко увеличивается как при увеличении количества векторов целевого входа (nq), так и при увеличении количества кластеров для поиска (nprobe).

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

При проведении поиска следует учитывать, что для любого поиска по коллекции, проиндексированной GPU_IVF_FLAT, можно задать top-K до 256.

  • Параметры построения индекса

    ПараметрОписаниеДиапазонЗначение по умолчанию
    nlistКоличество единиц кластера[1, 65536]128
    cache_dataset_on_deviceОпределяет, нужно ли кэшировать исходный набор данных в памяти GPU. Возможные значения:
    “true”: Кэширует исходный набор данных для улучшения запоминания путем уточнения результатов поиска.
    “false”: Не кэшировать исходный набор данных для экономии памяти графического процессора.
    "true" "flase""false"
  • Параметры поиска

    • Общий поиск

      ПараметрОписаниеДиапазонЗначение по умолчанию
      nprobeКоличество единиц для запроса[1, nlist]8
  • Ограничения на поиск

    ПараметрДиапазон
    limit (top-K)<= 2048

GPU_IVF_PQ

PQ (Product Quantization) равномерно разлагает исходное высокоразмерное векторное пространство на декартово произведение m низкоразмерных векторных пространств, а затем квантует разложенные низкоразмерные векторные пространства. Вместо вычисления расстояний между целевым вектором и центром всех единиц, квантование по продуктам позволяет вычислять расстояния между целевым вектором и центром кластеризации каждого низкоразмерного пространства и значительно сокращает временную и пространственную сложность алгоритма.

IVF_PQ выполняет кластеризацию индекса ЭКО перед квантованием произведения векторов. Его индексный файл еще меньше, чем у IVF_SQ8, но это также приводит к потере точности при поиске векторов.

Параметры построения индекса и параметры поиска зависят от дистрибутива Milvus. Сначала выберите свой дистрибутив Milvus.

При поиске обратите внимание, что для любого поиска по коллекции, проиндексированной GPU_IVF_FLAT, можно установить top-K до 8192.

  • Параметры построения индекса

    ПараметрОписаниеДиапазонЗначение по умолчанию
    nlistКоличество единиц кластера[1, 65536]128
    mКоличество коэффициентов квантования произведения,dim mod m or = 00
    nbits[Необязательно] Количество бит, в которых хранится каждый низкоразмерный вектор.[1, 16]8
    cache_dataset_on_deviceОпределяет, нужно ли кэшировать исходный набор данных в памяти GPU. Возможные значения:
    “true”: Кэширует исходный набор данных для улучшения запоминания путем уточнения результатов поиска.
    “false”: Не кэшировать исходный набор данных для экономии памяти графического процессора.
    "true" "false""false"
  • Параметры поиска

    • Общий поиск

      ПараметрОписаниеДиапазонЗначение по умолчанию
      nprobeКоличество единиц для запроса[1, nlist]8
  • Ограничения на поиск

    ПараметрДиапазон
    limit (top-K)<= 1024

GPU_BRUTE_FORCE

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

Для GPU_BRUTE_FORCE дополнительные параметры построения индекса и поиска не требуются.

Заключение

В настоящее время Milvus загружает все индексы в память GPU для эффективной работы поиска. Объем загружаемых данных зависит от размера памяти GPU:

  • GPU_CAGRA: использование памяти примерно в 1,8 раза больше, чем исходные векторные данные.
  • GPU_IVF_FLAT и GPU_BRUTE_FORCE: Требуется память, равная размеру исходных данных.
  • GPU_IVF_PQ: Использует меньший объем памяти, который зависит от настроек параметров сжатия.

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

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

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

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