預熱Compatible with Milvus 2.6.4+
預熱功能可在區段變為可查詢之前,預先將選取的欄位或索引載入快取記憶體,以補充分層式儲存。您可以在群集、集合或個別欄位/索引層級設定預熱,允許對首次查詢延遲和資源使用進行精細控制。
為什麼要預熱
分層儲存中的懶散載入透過最初僅載入元資料來提高效率。但是,這可能會在首次查詢冷資料時造成延遲,因為所需的資料塊或索引必須從遠端儲存取得。
Warm Up可在區段初始化期間主動快取關鍵資料,從而解決這個問題。
它在下列情況下特別有用
某些標量索引經常用於篩選條件。
向量索引對搜尋效能非常重要,必須立即就緒。
QueryNode 重新啟動或新區段載入後的冷啟動延遲是不可接受的。
相反地,對於不常被查詢的欄位或索引,不建議使用「預熱」功能。停用「預熱」功能可縮短區段載入時間,並節省快取記憶體空間,非常適合大型向量欄位或非關鍵的標量欄位。
設定等級
層級 |
範圍 |
設定方法 |
優先順序 |
|---|---|---|---|
欄位/索引 |
單一欄位或索引 |
SDK 方法:
|
最高 |
集合 |
集合中的所有欄位/索引 |
SDK 方法:
|
中等 |
群集 |
群集中的所有集合 |
|
最低 (預設) |
覆寫行為:
如果欄位有自己的暖機設定,則該設定優先於集合層級和群集層級設定。
如果沒有欄位或索引層級設定,則集合層級設定適用。
如果欄位或索引層級或集合層級設定都不存在,則群組層級設定適用。
使用變更作業時,最新的變更值會生效。
在群集層級設定暖機
群集層級的暖機是在 Milvus 配置檔案milvus.yaml 中設定,並適用於群集中的所有集合。這是基線預設值。
每個目標類型支援兩種設定:
暖機設定 |
說明 |
典型情況 |
|---|---|---|
|
在區段可查詢之前預先載入。載入時間會稍微增加,但第一次查詢不會產生延遲。 |
用於必須立即可用的效能關鍵資料,例如搜尋中使用的高頻標量索引或關鍵向量索引。 |
|
跳過預載。區段變得更快可供查詢,但第一次查詢可能會觸發依需求載入。 |
適用於不常存取或大型資料,例如原始向量欄位或非關鍵的標量欄位。 |
範例 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
參數 |
預熱設定 |
說明 |
建議用例 |
|---|---|---|---|
|
|
控制是否預先載入標量欄位資料。 |
僅當標量字段較小且在篩選器中經常被存取時,才使用 |
|
|
控制是否預先載入標量索引。 |
對於涉及頻繁篩選條件或範圍查詢的標量索引,請使用 |
|
|
控制是否預先載入向量欄位資料。 |
一般 |
|
|
控制是否預先載入向量索引。 |
對於對搜尋延遲非常重要的向量索引,請使用 |
在資料集層級設定暖機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"
}
)
屬性參考:
屬性 |
預熱設定 |
說明 |
|---|---|---|
|
|
集合中所有標量欄位的預熱設定。 |
|
|
集合中所有標量索引的預熱設定。 |
|
|
集合中所有向量欄位的預熱設定。 |
|
|
集合中所有向量索引的暖機設定。 |
在欄位層級設定暖機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"}
)
熱身行為參考
下表總結段生命週期不同階段的暖機行為。
暖機設定 |
載入階段 |
搜尋/查詢階段 |
釋放階段 |
|---|---|---|---|
|
資料載入本機儲存。目的地 (磁碟或記憶體) 取決於 mmap 設定。 |
查詢直接命中本機快取記憶體。 |
本地快取資料被清除。 |
|
資料未載入本機儲存。 |
根據需求從物件儲存取得資料,然後根據 mmap 設定在本機快取。 |
本機快取資料會被清除。 |
與 mmap 互動:
預熱設定 |
啟用 mmap |
資料位置 |
|---|---|---|
|
|
本機磁碟 ( |
|
|
本機記憶體 |
|
|
首次存取時取至本機磁碟 |
|
|
首次存取時取至本機記憶體 |
本地快取目錄結構 (當 mmap 已啟用):
資料類型 |
目錄路徑 |
|---|---|
標量/向量欄位資料 |
|
標量/向量索引檔案 |
|
最佳做法
預熱只會影響初始載入。如果快取資料之後被驅逐,下一次查詢會依需求重新載入。
避免過度使用
sync。預載太多欄位會增加載入時間和快取記憶體壓力。以保守的方式開始 - 只對經常存取的欄位和索引啟用「預熱」功能。
監控查詢延遲和快取記憶體指標,然後視需要擴大預載。
對於混合工作負載,將
sync應用於對效能敏感的集合,將disable應用於以容量為導向的集合。