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

GPU_CAGRA

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

Построение индекса

Чтобы построить индекс GPU_CAGRA по векторному полю в Milvus, используйте метод add_index(), указав index_type, metric_type и дополнительные параметры для индекса.

from pymilvus import MilvusClient

# Prepare index building params
index_params = MilvusClient.prepare_index_params()

index_params.add_index(
    field_name="your_vector_field_name", # Name of the vector field to be indexed
    index_type="GPU_CAGRA", # Type of the index to create
    index_name="vector_index", # Name of the index to create
    metric_type="L2", # Metric type used to measure similarity
    params={
        "intermediate_graph_degree": 64, # Affects recall and build time by determining the graph’s degree before pruning
        "graph_degree": 32, # Affets search performance and recall by setting the graph’s degree after pruning
        "build_algo": "IVF_PQ", # Selects the graph generation algorithm before pruning
        "cache_dataset_on_device": "true", # Decides whether to cache the original dataset in GPU memory
        "adapt_for_cpu": "false", # Decides whether to use GPU for index-building and CPU for search
    } # Index building params
)

В данной конфигурации:

  • index_type: Тип индекса, который будет построен. В этом примере задайте значение GPU_CAGRA.

  • metric_type: Метод, используемый для вычисления расстояния между векторами. Подробнее см. в разделе Метрические типы.

  • params: Дополнительные параметры конфигурации для построения индекса. Чтобы узнать о параметрах построения, доступных для индекса GPU_CAGRA, обратитесь к разделу Параметры построения индекса.

После того как параметры индекса настроены, вы можете создать индекс, используя метод create_index() напрямую или передавая параметры индекса в метод create_collection. Подробности см. в разделе Создание коллекции.

Поиск по индексу

После того как индекс создан и сущности вставлены, можно выполнять поиск по сходству в индексе.

search_params = {
    "params": {
        "itopk_size": 16, # Determines the size of intermediate results kept during the search
        "search_width": 8, # Specifies the number of entry points into the CAGRA graph during the search
    }
}

res = MilvusClient.search(
    collection_name="your_collection_name", # Collection name
    anns_field="vector_field", # Vector field name
    data=[[0.1, 0.2, 0.3, 0.4, 0.5]],  # Query vector
    limit=3,  # TopK results to return
    search_params=search_params
)

В этой конфигурации:

  • params: Дополнительные параметры конфигурации для поиска по индексу. Чтобы узнать о параметрах поиска, доступных для индекса GPU_CAGRA, обратитесь к разделу Параметры поиска по индексу.

Включение поиска на процессоре во время загрузкиCompatible with Milvus 2.6.4+

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

# milvus.yaml
knowhere:
  GPU_CAGRA:
    load: 
      adapt_for_cpu: true

Behavior

  • Когда load.adapt_for_cpu установлен в true, Milvus преобразует индекс GPU_CAGRA в формат, исполняемый на CPU (HNSW-подобный) во время загрузки.

  • Последующие операции поиска выполняются на CPU, даже если индекс изначально был создан для GPU.

  • Если этот параметр опущен или равен false, индекс остается на GPU, а поиск выполняется на GPU.

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

Параметры индекса

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

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

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

Параметр

Описание

Значение по умолчанию

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"

Параметры поиска, специфичные для индекса

В следующей таблице перечислены параметры, которые могут быть настроены в search_params.params при поиске по индексу.

Параметр

Описание

Значение по умолчанию

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]

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

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

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

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