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 при построении индекса.
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Влияет на запоминание и время построения, определяя степень графа перед обрезкой. Рекомендуемые значения: |
|
|
Влияет на производительность поиска и запоминание, определяя степень графа после обрезки. Большая разница между этими двумя степенями приводит к увеличению времени построения. Его значение должно быть меньше значения |
|
|
Выбирает алгоритм генерации графа перед обрезкой. Возможные значения:
|
|
|
Решает, нужно ли кэшировать исходный набор данных в памяти GPU. Возможные значения:
|
|
|
Решает, использовать ли GPU для построения индексов и CPU для поиска. Установка этого параметра в значение |
|
Параметры поиска, специфичные для индекса
В следующей таблице перечислены параметры, которые могут быть настроены в search_params.params при поиске по индексу.
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Определяет размер промежуточных результатов, сохраняемых во время поиска. Большее значение может улучшить запоминание в ущерб производительности поиска. Оно должно быть по крайней мере равно конечному значению top-k (limit) и обычно равно 2 (например, 16, 32, 64, 128). |
Пустой |
|
Определяет количество точек входа в граф CAGRA во время поиска. Увеличение этого значения может улучшить запоминание, но может повлиять на производительность поиска (например, 1, 2, 4, 8, 16, 32). |
Empty |
|
Управляет процессом итерации поиска. По умолчанию они установлены на |
|
|
Указывает количество потоков CUDA, используемых для вычисления метрического расстояния на GPU. Обычные значения - от 2 до 32 (например, 2, 4, 8, 16, 32). Это значение незначительно влияет на производительность поиска. По умолчанию используется значение |
|
|
Определяет компромисс между временем запроса и точностью. Более высокое значение Этот параметр обязателен, если при построении индекса вы установили |
|