預熱Compatible with Milvus 2.6.4+

預熱功能可在區段變為可查詢之前,預先將選取的欄位或索引載入快取記憶體,以補充分層式儲存。您可以在群集、集合或個別欄位/索引層級設定預熱,允許對首次查詢延遲和資源使用進行精細控制。

為什麼要預熱

分層儲存中的懶散載入透過最初僅載入元資料來提高效率。但是,這可能會在首次查詢冷資料時造成延遲,因為所需的資料塊或索引必須從遠端儲存取得。

Warm Up可在區段初始化期間主動快取關鍵資料,從而解決這個問題。

它在下列情況下特別有用

  • 某些標量索引經常用於篩選條件。

  • 向量索引對搜尋效能非常重要,必須立即就緒。

  • QueryNode 重新啟動或新區段載入後的冷啟動延遲是不可接受的。

相反地,對於不常被查詢的欄位或索引,不建議使用「預熱」功能。停用「預熱」功能可縮短區段載入時間,並節省快取記憶體空間,非常適合大型向量欄位或非關鍵的標量欄位。

設定等級

層級

範圍

設定方法

優先順序

欄位/索引

單一欄位或索引

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 應用於以容量為導向的集合。