Warm UpCompatible with Milvus 2.6.4+
Il warm up integra l'archiviazione a livelli precaricando campi o indici selezionati nella cache prima che un segmento sia interrogabile. È possibile configurare il warmup a livello di cluster, raccolta o singolo campo/indice, consentendo un controllo a grana fine sulla latenza della prima interrogazione e sull'utilizzo delle risorse.
Perché il warmup
Lazy Load in Tiered Storage migliora l'efficienza caricando inizialmente solo i metadati. Tuttavia, ciò può causare latenza alla prima query sui dati freddi, poiché i chunk o gli indici necessari devono essere recuperati dallo storage remoto.
Warm Up risolve questo problema mettendo nella cache i dati critici durante l'inizializzazione del segmento.
È particolarmente utile quando:
Alcuni indici scalari sono usati frequentemente nelle condizioni di filtro.
Gli indici vettoriali sono essenziali per le prestazioni di ricerca e devono essere pronti immediatamente.
La latenza di avvio a freddo dopo il riavvio del QueryNode o il caricamento di un nuovo segmento è inaccettabile.
Al contrario, il Warm Up non è consigliato per i campi o gli indici che vengono interrogati di rado. Disattivare il Warm Up riduce il tempo di caricamento del segmento e conserva lo spazio nella cache, ideale per i campi vettoriali di grandi dimensioni o per i campi scalari non critici.
Livelli di configurazione
Livello |
Ambito |
Metodo di configurazione |
Priorità |
|---|---|---|---|
Campo/indice |
Campo o indice singolo |
Metodi SDK:
|
Più alto |
Collezione |
Tutti i campi/indici di una collezione |
Metodi SDK:
|
Medio |
Cluster |
Tutte le raccolte nel cluster |
|
Più basso (predefinito) |
Comportamento da sovrascrivere:
Se un campo ha una propria impostazione di riscaldamento, questa ha la precedenza sulle impostazioni a livello di collezione e di cluster.
Se non esistono impostazioni a livello di campo o di indice, si applica l'impostazione a livello di collezione.
Se non esistono impostazioni a livello di campo o di indice né a livello di collezione, si applica quella a livello di cluster.
Quando si usano le operazioni di modifica, viene applicato il valore di modifica più recente.
Configurare il warmup a livello di cluster
Il riscaldamento a livello di cluster è configurato nel file di configurazione di Milvus milvus.yaml e si applica a tutte le raccolte del cluster. Questo serve come default di base.
Ogni tipo di destinazione supporta due impostazioni:
Riscaldamento Impostazione |
Descrizione |
Scenario tipico |
|---|---|---|
|
Precarico prima che il segmento sia interrogabile. Il tempo di caricamento aumenta leggermente, ma la prima query non comporta latenza. |
Da usare per i dati critici per le prestazioni che devono essere immediatamente disponibili, come gli indici scalari ad alta frequenza o gli indici vettoriali chiave usati nella ricerca. |
|
Saltare il precaricamento. Il segmento diventa interrogabile più rapidamente, ma la prima query può attivare il caricamento su richiesta. |
Da usare per i dati a cui si accede di rado o di grandi dimensioni, come i campi vettoriali grezzi o i campi scalari non critici. |
Esempio di 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
Parametro |
Riscaldamento Impostazione |
Descrizione |
Caso d'uso consigliato |
|---|---|---|---|
|
|
Controlla se i dati dei campi scalari sono precaricati. |
Usare |
|
|
Controlla se gli indici scalari sono precaricati. |
Usare |
|
|
Controlla se i dati dei campi vettoriali sono precaricati. |
Generalmente |
|
|
Controlla se gli indici dei vettori sono precaricati. |
Usare |
Configurazione del riscaldamento a livello di raccoltaCompatible with Milvus 2.6.11+
Il warmup a livello di collezione consente di ignorare le impostazioni predefinite del cluster per una collezione specifica. Ciò è utile quando una raccolta ha schemi di accesso diversi rispetto alla linea di base del cluster.
Impostare il warmup durante la creazione di una raccolta
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"
}
)
Modificare le impostazioni di warmup su un insieme esistente
È necessario modificare le proprietà dell'insieme prima di chiamare load(). La modifica di un insieme caricato restituisce un errore. Le modifiche alle impostazioni di warmup hanno effetto al successivo caricamento dell'insieme.
client.alter_collection_properties(
collection_name="my_collection",
properties={
"warmup.vectorIndex": "disable",
"warmup.scalarField": "sync"
}
)
Riferimento alla proprietà:
Proprietà |
Impostazione di riscaldamento |
Descrizione |
|---|---|---|
|
|
Impostazione di riscaldamento per tutti i campi scalari della collezione. |
|
|
Impostazione di riscaldamento per tutti gli indici scalari della collezione. |
|
|
Impostazione di riscaldamento per tutti i campi vettoriali dell'insieme. |
|
|
Impostazione del warmup per tutti gli indici vettoriali dell'insieme. |
Configurazione del warmup a livello di campoCompatible with Milvus 2.6.11+
Il warmup a livello di campo offre la granularità più fine, consentendo di controllare il comportamento del warmup per i singoli campi. Questo è utile quando campi specifici hanno modelli di accesso unici.
Il riscaldamento a livello di campo si applica solo ai dati grezzi del campo, non agli indici su quel campo. Per configurare il warmup per un indice, usare la configurazione a livello di indice.
Impostare il warmup quando si crea un campo
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
)
Modificare le impostazioni di warmup su un campo esistente
È necessario modificare le impostazioni del campo prima di chiamare load(). La modifica di un campo su un insieme caricato restituisce un errore. Le modifiche alle impostazioni di warmup diventano effettive al successivo caricamento della collezione.
client.alter_collection_field(
collection_name="my_collection",
field_name="category",
field_params={"warmup": "sync"}
)
Configurare il warmup a livello di indiceCompatible with Milvus 2.6.11+
Il warmup a livello di indice consente di controllare il precaricamento per i singoli indici, indipendentemente dall'impostazione del warmup del campo sottostante.
Impostare il warmup durante la creazione di un indice
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
)
Modificare le impostazioni di warmup su un indice esistente
È necessario modificare le impostazioni dell'indice prima di chiamare load(). La modifica di un indice su una collezione caricata restituisce un errore. Le modifiche alle impostazioni di warmup hanno effetto al successivo caricamento dell'insieme.
client.alter_index_properties(
collection_name="my_collection",
index_name="embedding",
properties={"warmup": "sync"}
)
Riferimento al comportamento di warmup
La tabella seguente riassume il comportamento del warmup nelle diverse fasi del ciclo di vita del segmento.
Impostazione di warmup |
Fase di caricamento |
Fase di ricerca/interrogazione |
Fase di rilascio |
|---|---|---|---|
|
I dati vengono caricati nella memoria locale. La destinazione (disco o memoria) dipende dall'impostazione di mmap. |
La query colpisce direttamente la cache locale. |
I dati della cache locale vengono cancellati. |
|
I dati non vengono caricati nella memoria locale. |
I dati vengono recuperati su richiesta dallo storage degli oggetti, quindi memorizzati nella cache locale in base all'impostazione mmap. |
I dati della cache locale vengono cancellati. |
Interazione con mmap:
Impostazione di riscaldamento |
Mmap abilitata |
Posizione dei dati |
|---|---|---|
|
|
Disco locale ( |
|
|
Memoria locale |
|
|
Recuperato su disco locale al primo accesso |
|
|
Recuperato nella memoria locale al primo accesso |
Struttura della directory della cache locale (quando è abilitata la funzione mmap):
Tipo di dati |
Percorso della directory |
|---|---|
Dati dei campi scalari/vettoriali |
|
File indice scalare/vettoriale |
|
Pratiche ottimali
Il Warm Up influisce solo sul caricamento iniziale. Se i dati nella cache vengono successivamente eliminati, la query successiva li ricaricherà su richiesta.
Evitare l'uso eccessivo di
sync. Il precaricamento di troppi campi aumenta il tempo di caricamento e la pressione sulla cache.Iniziare in modo conservativo: attivare il Warm Up solo per i campi e gli indici a cui si accede di frequente.
Monitorare la latenza delle query e le metriche della cache, quindi espandere il precaricamento se necessario.
Per i carichi di lavoro misti, applicare
syncalle collezioni sensibili alle prestazioni edisablea quelle orientate alla capacità.