워밍업Compatible with Milvus 2.6.4+

워밍업은 세그먼트가 쿼리 가능해지기 전에 선택한 필드나 인덱스를 캐시에 미리 로드하여 계층형 스토리지를 보완합니다. 클러스터, 컬렉션 또는 개별 필드/색인 수준에서 워밍업을 구성하여 첫 번째 쿼리 대기 시간 및 리소스 사용량을 세밀하게 제어할 수 있습니다.

워밍업이 필요한 이유

계층형 스토리지의지연 로드는 처음에 메타데이터만 로드하여 효율성을 개선합니다. 하지만 필요한 청크나 인덱스를 원격 스토리지에서 가져와야 하므로 콜드 데이터에 대한 첫 번째 쿼리에서 지연 시간이 발생할 수 있습니다.

워밍업은 세그먼트 초기화 중에 중요한 데이터를 사전에 캐싱하여 이 문제를 해결합니다.

특히 다음과 같은 경우에 유용합니다:

  • 특정 스칼라 인덱스가 필터 조건에서 자주 사용되는 경우.

  • 벡터 인덱스는 검색 성능에 필수적이며 즉시 준비되어야 합니다.

  • 쿼리 노드 재시작 또는 새 세그먼트 로드 후 콜드 스타트 지연은 용납할 수 없습니다.

반면, 자주 쿼리되지 않는 필드나 인덱스에는 워밍업을 사용하지 않는 것이 좋습니다. 워밍업을 비활성화하면 세그먼트 로드 시간이 단축되고 캐시 공간이 절약되므로 큰 벡터 필드나 중요하지 않은 스칼라 필드에 이상적입니다.

구성 수준

Level

범위

구성 방법

우선순위

필드/색인

단일 필드 또는 인덱스

SDK 메서드:

  • add_field()

  • alter_collection_field()

  • add_index()

  • alter_index_properties()

가장 높음

컬렉션

컬렉션의 모든 필드/색인

SDK 메서드:

  • create_collection()

  • alter_collection_properties()

중간

클러스터

클러스터의 모든 컬렉션

milvus.yaml 구성 파일

낮음(기본값)

동작 재정의:

  • 필드에 자체 준비 설정이 있는 경우 해당 설정이 컬렉션 수준 및 클러스터 수준 설정보다 우선합니다.

  • 필드 또는 인덱스 수준 설정이 존재하지 않으면 컬렉션 수준 설정이 적용됩니다.

  • 필드 또는 인덱스 수준 설정과 컬렉션 수준 설정이 모두 존재하지 않으면 클러스터 수준이 적용됩니다.

  • 변경 작업을 사용하는 경우 가장 최근 변경 값이 적용됩니다.

클러스터 수준에서 워밍업 구성

클러스터 수준 워밍업은 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과의 상호 작용

워밍업 설정

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/...

모범 사례

워밍업은 초기 로드에만 영향을 줍니다. 캐시된 데이터가 나중에 제거되면 다음 쿼리에서 필요에 따라 다시 로드됩니다.

  • sync 을 과도하게 사용하지 마세요. 너무 많은 필드를 미리 로드하면 로드 시간과 캐시 압력이 증가합니다.

  • 자주 액세스하는 필드와 인덱스에 대해서만 워밍업을 보수적으로 사용하도록 설정하세요.

  • 쿼리 지연 시간 및 캐시 메트릭을 모니터링한 다음 필요에 따라 사전 로딩을 확장합니다.

  • 혼합 워크로드의 경우, 성능에 민감한 컬렉션에는 sync, 용량 중심 컬렉션에는 disable 을 적용하세요.