ウォームアップCompatible with Milvus 2.6.4+

ウォームアップは、セグメントがクエリ可能になる前に、選択したフィールドまたはインデックスをキャッシュにプリロードすることで、Tiered Storageを補完します。ウォームアップは、クラスタ、コレクション、または個々のフィールド/インデックスレベルで構成でき、最初のクエリのレイテンシとリソース使用量をきめ細かく制御できます。

ウォームアップの理由

Tiered StorageのLazy Loadは、メタデータのみを最初にロードすることで効率を向上させます。しかし、必要なチャンクやインデックスをリモートストレージからフェッチする必要があるため、コールドデータへの最初のクエリで待ち時間が発生する可能性があります。

ウォームアップは、セグメントの初期化中に重要なデータを積極的にキャッシュすることで、この問題を解決します。

特に以下のような場合に有効です:

  • 特定のスカラー・インデックスがフィルター条件で頻繁に使用される。

  • ベクトル・インデックスは検索パフォーマンスに不可欠であり、すぐに準備する必要がある。

  • QueryNode 再起動後または新規セグメントロード後のコールドスタート待ち時間は容認できない。

対照的に、ウォームアップは、クエリの頻度が低いフィールドやインデックスには推奨されません。ウォームアップを無効にすると、セグメントのロード時間が短縮され、キャッシュ領域が節約されます。これは、大きなベクトルフィールドや重要でないスカラーフィールドに最適です。

構成レベル

レベル

設定範囲

設定方法

優先度

フィールド/インデックス

単一のフィールドまたはインデックス

SDKのメソッド:

  • add_field()

  • alter_collection_field()

  • add_index()

  • alter_index_properties()

最高

コレクション

コレクション内のすべてのフィールド/インデックス

SDKメソッド:

  • create_collection()

  • alter_collection_properties()

クラスタ

クラスタ内のすべてのコレクション

milvus.yaml 設定ファイル

最低(デフォルト)

オーバーライド動作:

  • フィールドに独自のウォームアップ設定がある場合、その設定はコレクションレベルおよびクラスタレベルの設定よりも優先されます。

  • フィールド・レベルまたはインデックス・レベルの設定が存在しない場合は、コレクション・レベルの設定が適用されます。

  • フィールド・レベルまたはインデックス・レベルの設定もコレクション・レベルの設定も存在しない場合は、クラスタ・レベルの設定が適用されます。

  • alter操作を使用すると、最新のalter値が有効になります。

クラスタレベルでのウォームアップの構成

クラスタレベルのウォームアップはMilvus設定ファイルmilvus.yaml で設定され、クラスタ内のすべてのコレクションに適用されます。これはベースラインのデフォルトとして機能します。

各ターゲットタイプは2つの設定をサポートしています:

ウォームアップ設定

説明

典型的なシナリオ

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+

フィールド・レベルのウォームアップは最も細かい粒度を提供し、個々のフィールドのウォームアップ動作を制御できます。これは、特定のフィールドに固有のアクセス・パターンがある場合に便利です。

フィールド・レベルのウォームアップはフィールドのRAWデータのみに適用され、そのフィールドのインデックスには適用されません。インデックスのウォームアップを設定するには、インデックス・レベルの設定を使用します。

フィールドの作成時にウォームアップを設定する

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 をキャパシティ重視のコレクションに適用します。