Warm UpCompatible with Milvus 2.6.4+

Warm Up дополняет Tiered Storage, предварительно загружая выбранные поля или индексы в кэш до того, как сегмент станет доступным для запроса. Можно настроить прогрев на уровне кластера, коллекции или отдельных полей/индексов, что обеспечивает тонкий контроль над задержкой первого запроса и использованием ресурсов.

Зачем нужен прогрев

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

Функция Warm Up решает эту проблему за счет упреждающего кэширования критически важных данных во время инициализации сегмента.

Это особенно полезно, когда:

  • Определенные скалярные индексы часто используются в условиях фильтрации.

  • Векторные индексы важны для производительности поиска и должны быть готовы немедленно.

  • Задержка холодного старта после перезапуска QueryNode или загрузки нового сегмента неприемлема.

В отличие от этого, Warm Up не рекомендуется использовать для полей или индексов, которые запрашиваются нечасто. Отключение Warm Up сокращает время загрузки сегмента и экономит место в кэше - идеальный вариант для больших векторных полей или некритичных скалярных полей.

Уровни конфигурации

Уровень

Область применения

Метод конфигурации

Приоритет

Поле/индекс

Одно поле или индекс

Методы SDK:

  • add_field()

  • alter_collection_field()

  • add_index()

  • alter_index_properties()

Наивысший

Коллекция

Все поля/индексы в коллекции

Методы SDK:

  • create_collection()

  • alter_collection_properties()

Средний

Кластер

Все коллекции в кластере

milvus.yaml файл конфигурации

Lowest (по умолчанию)

Отменяющее поведение:

  • Если поле имеет собственную настройку прогрева, эта настройка имеет приоритет над настройками на уровне коллекции и кластера.

  • Если настройки на уровне поля или индекса отсутствуют, применяется настройка на уровне коллекции.

  • Если нет настроек ни на уровне поля, ни на уровне индекса, ни на уровне коллекции, применяется настройка на уровне кластера.

  • При использовании операций alter вступает в силу последнее значение alter.

Настройка прогрева на уровне кластера

Прогрев на уровне кластера настраивается в конфигурационном файле Milvus milvus.yaml и применяется ко всем коллекциям в кластере. Это служит базовым значением по умолчанию.

Каждый тип цели поддерживает две настройки:

Настройка прогрева

Описание

Типичный сценарий

sync

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

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

disable

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

Используйте для редко обращающихся или больших данных, таких как необработанные векторные поля или некритичные скалярные поля.

Пример YAML:

queryNode:
  segcore:
    tieredStorage:
      warmup:
        # options: sync, disable.
        # Specifies the timing for warming up the Tiered Storage cache.
        # - `sync`: data will be loaded into the cache before a segment is considered loaded.
        # - `disable`: data will not be proactively loaded into the cache, and loaded only if needed by search/query tasks.
        # Defaults to `sync`, except for vector field which defaults to `disable`.
        scalarField: sync
        scalarIndex: sync
        vectorField: disable # cache warmup for vector field raw data is by default disabled.
        vectorIndex: sync

Параметр

Настройка разминки

Описание

Рекомендуемый вариант использования

scalarField

sync | disable

Управляет предварительной загрузкой данных скалярных полей.

Используйте sync только в том случае, если скалярные поля малы и часто используются в фильтрах. В противном случае используйте disable, чтобы сократить время загрузки.

scalarIndex

sync | disable

Управляет предварительной загрузкой скалярных индексов.

Используйте sync для скалярных индексов, участвующих в частых условиях фильтрации или запросах диапазона.

vectorField

sync | disable

Управляет предварительной загрузкой данных векторных полей.

Как правило, disable позволяет избежать интенсивного использования кэша. Включите sync только в тех случаях, когда необработанные векторы должны быть получены сразу после поиска (например, результаты сходства с отзывом векторов).

vectorIndex

sync | disable

Управляет предварительной загрузкой векторных индексов.

Используйте sync для векторных индексов, которые критичны к задержке поиска. При пакетной или низкочастотной нагрузке используйте disable для ускорения готовности сегментов.

Настройка прогрева на уровне коллекцииCompatible with Milvus 2.6.11+

Прогрев на уровне коллекции позволяет отменить настройки кластера по умолчанию для конкретной коллекции. Это полезно, когда коллекция имеет шаблоны доступа, отличные от общекластерной базовой линии.

Настройка прогрева при создании коллекции

from pymilvus import MilvusClient

client = MilvusClient(uri="http://localhost:19530")

client.create_collection(
    collection_name="my_collection",
    schema=schema,
    properties={
        "warmup.scalarField": "sync",
        "warmup.scalarIndex": "sync",
        "warmup.vectorField": "disable",
        "warmup.vectorIndex": "sync"
    }
)

Изменение настроек прогрева для существующей коллекции

Вы должны изменить свойства коллекции перед вызовом load(). Изменение загруженной коллекции возвращает ошибку. Изменения параметров прогрева вступают в силу при следующей загрузке коллекции.

client.alter_collection_properties(
    collection_name="my_collection",
    properties={
        "warmup.vectorIndex": "disable",
        "warmup.scalarField": "sync"
    }
)

Ссылка на свойство:

Свойство

Настройка прогрева

Описание

warmup.scalarField

sync | disable

Настройка разминки для всех скалярных полей в коллекции.

warmup.scalarIndex

sync | disable

Настройка прогрева для всех скалярных индексов в коллекции.

warmup.vectorField

sync | disable

Настройка прогрева для всех векторных полей в коллекции.

warmup.vectorIndex

sync | disable

Настройка прогрева для всех векторных индексов в коллекции.

Настройка прогрева на уровне полейCompatible with Milvus 2.6.11+

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

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

Настройка прогрева при создании поля

from pymilvus import MilvusClient, DataType

schema = MilvusClient.create_schema()

schema.add_field(
    field_name="id",
    datatype=DataType.INT64,
    is_primary=True
)

schema.add_field(
    field_name="category",
    datatype=DataType.VARCHAR,
    max_length=128,
    warmup="sync"  # Preload this field at load time
)

schema.add_field(
    field_name="embedding",
    datatype=DataType.FLOAT_VECTOR,
    dim=768,
    warmup="disable"  # Do not preload vector raw data
)

Изменение настроек прогрева для существующего поля

Вы должны изменить настройки поля перед вызовом load(). Изменение поля в загруженной коллекции приводит к ошибке. Изменения настроек прогрева вступают в силу при следующей загрузке коллекции.

client.alter_collection_field(
    collection_name="my_collection",
    field_name="category",
    field_params={"warmup": "sync"}
)

Настройка прогрева на уровне индексаCompatible with Milvus 2.6.11+

Прогрев на уровне индекса позволяет управлять предварительной загрузкой отдельных индексов независимо от настроек прогрева базового поля.

Настройка прогрева при создании индекса

from pymilvus import MilvusClient

client = MilvusClient(uri="http://localhost:19530")

index_params = client.prepare_index_params()

index_params.add_index(
    field_name="embedding",
    index_type="HNSW",
    metric_type="COSINE",
    params={
        "M": 16,
        "efConstruction": 256,
        "warmup": "sync"  # Preload this index at load time
    }
)

index_params.add_index(
    field_name="category",
    index_type="AUTOINDEX",
    params={"warmup": "disable"}  # Do not preload this index
)

client.create_index(
    collection_name="my_collection",
    index_params=index_params
)

Изменение настроек прогрева в существующем индексе

Вы должны изменить настройки индекса перед вызовом load(). Изменение индекса в загруженной коллекции приводит к ошибке. Изменения настроек прогрева вступают в силу при следующей загрузке коллекции.

client.alter_index_properties(
    collection_name="my_collection",
    index_name="embedding",
    properties={"warmup": "sync"}
)

Справочник по поведению прогрева

В следующей таблице представлено поведение прогрева на разных этапах жизненного цикла сегмента.

Настройка прогрева

Фаза загрузки

Фаза поиска/запроса

Фаза освобождения

sync

Данные загружаются в локальное хранилище. Место назначения (диск или память) зависит от настройки mmap.

Запрос напрямую обращается к локальному кэшу.

Локальные кэшированные данные очищаются.

disable

Данные не загружаются в локальное хранилище.

Данные извлекаются по запросу из хранилища объектов, затем кэшируются локально на основе настроек mmap.

Локальные кэшированные данные очищаются.

Взаимодействие с mmap:

Настройка разминки

Ммап включен

Расположение данных

sync

true

Локальный диск (localStorage.path/cache/...)

sync

false

Локальная память

disable

true

Загружается на локальный диск при первом обращении

disable

false

Загружается в локальную память при первом обращении

Структура каталога локального кэша (если включен mmap):

Тип данных

Путь к каталогу

Данные скалярных/векторных полей

localStorage.path/cache/<collection_id>/local_chunk/...

Скалярные/векторные индексные файлы

localStorage.path/cache/<collection_id>/local_chunk/index_files/...

Лучшие практики

Warm Up влияет только на первоначальную загрузку. Если кэшированные данные впоследствии будут удалены, следующий запрос перезагрузит их по требованию.

  • Избегайте чрезмерного использования sync. Предварительная загрузка слишком большого количества полей увеличивает время загрузки и нагрузку на кэш.

  • Начинайте консервативно - включайте Warm Up только для полей и индексов, к которым часто обращаются.

  • Следите за задержкой запросов и показателями кэша, а затем по мере необходимости расширяйте предварительную загрузку.

  • При смешанных рабочих нагрузках применяйте sync для коллекций, чувствительных к производительности, и disable для коллекций, ориентированных на емкость.