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

GPU_IVF_PQ

Индекс GPU_IVF_PQ основывается на концепции IVF_PQ, объединяя инвертированную кластеризацию файлов с Product Quantization (PQ), которая разбивает высокоразмерные векторы на более мелкие подпространства и квантует их для эффективного поиска сходства. Разработанный исключительно для сред GPU, GPU_IVF_PQ использует параллельную обработку для ускорения вычислений и эффективной работы с большими векторными данными. Для получения дополнительной информации об основополагающих концепциях см. раздел IVF_PQ.

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

Чтобы построить индекс GPU_IVF_PQ по векторному полю в 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_IVF_PQ", # 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={
        "m": 4, # Number of sub-vectors to split eahc vector into
    } # Index building params
)

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

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

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

  • params: Дополнительные параметры конфигурации для построения индекса.

    • m: Количество субвекторов, на которые нужно разбить вектор.

    Чтобы узнать больше параметров построения, доступных для индекса GPU_IVF_PQ, обратитесь к разделу Параметры построения индекса.

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

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

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

search_params = {
    "params": {
        "nprobe": 10, # Number of clusters to 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: Дополнительные параметры конфигурации для поиска по индексу.

    • nprobe: Количество кластеров для поиска.

    Чтобы узнать больше параметров поиска, доступных для индекса GPU_IVF_PQ, обратитесь к разделу Параметры поиска по индексу.

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

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

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

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

Параметр

Описание

Диапазон значений

Предложение по настройке

ЭКО

nlist

Количество кластеров, создаваемых с помощью алгоритма k-means при построении индекса.

Тип: Integer Диапазон: [1, 65536]

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

Большие значения nlist улучшают отзыв за счет создания более точных кластеров, но увеличивают время построения индекса. Оптимизируйте значение в зависимости от размера набора данных и доступных ресурсов. В большинстве случаев мы рекомендуем устанавливать значение в этом диапазоне: [32, 4096].

PQ

m

Количество подвекторов (используемых для квантования), на которые нужно разделить каждый высокоразмерный вектор в процессе квантования.

Тип: Целое число Диапазон: [1, 65536]

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

Большее значение m может повысить точность, но также увеличивает сложность вычислений и потребление памяти. m должно быть делителем размерности вектора(D), чтобы обеспечить правильное разложение. Обычно рекомендуемое значение m = D/2.

В большинстве случаев мы рекомендуем задавать значение в этом диапазоне: [D/8, D].

nbits

Количество битов, используемых для представления индекса центроида каждого субвектора в сжатом виде. Оно напрямую определяет размер каждой кодовой книги. Каждая кодовая книга будет содержать 2nbits центроидов. Например, если значение nbits равно 8, то каждый субвектор будет представлен 8-битным индексом центроида. Это позволяет использовать28 (256) возможных центроидов в кодовой книге для данного субвектора.

Тип: Целое число Диапазон: [1, 24]

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

Большее значение nbits позволяет использовать большие кодовые книги, что потенциально приводит к более точному представлению исходных векторов. Однако это также означает использование большего количества битов для хранения каждого индекса, что приводит к меньшему сжатию. В большинстве случаев мы рекомендуем устанавливать значение в этом диапазоне: [1, 16].

cache_dataset_on_device

Определяет, нужно ли кэшировать исходный набор данных в памяти GPU. Возможные значения:

  • "true": Кэширование исходного набора данных для улучшения запоминания путем уточнения результатов поиска.

  • "false": Не кэшировать исходный набор данных для экономии памяти графического процессора.

Тип: Строка Диапазон: ["true", "false"].

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

Установка значения "true" улучшает запоминание за счет уточнения результатов поиска, но использует больше памяти GPU. Установка значения "false" экономит память GPU.

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

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

Параметр

Описание

Диапазон значений

Предложение по настройке

ЭКО

nprobe

Количество кластеров для поиска кандидатов.

Тип: Целое число Диапазон: [1, nlist].

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

Более высокие значения позволяют искать больше кластеров, что улучшает запоминание за счет расширения области поиска, но ценой увеличения задержки запроса. Установите nprobe пропорционально nlist, чтобы сбалансировать скорость и точность.

В большинстве случаев мы рекомендуем устанавливать значение в этом диапазоне: [1, nlist].

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

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

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

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