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:

  • add_field()

  • alter_collection_field()

  • add_index()

  • alter_index_properties()

Più alto

Collezione

Tutti i campi/indici di una collezione

Metodi SDK:

  • create_collection()

  • alter_collection_properties()

Medio

Cluster

Tutte le raccolte nel cluster

milvus.yaml file di configurazione

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

sync

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.

disable

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

scalarField

sync | disable

Controlla se i dati dei campi scalari sono precaricati.

Usare sync solo se i campi scalari sono piccoli e vengono consultati frequentemente nei filtri. Altrimenti, disable per ridurre il tempo di caricamento.

scalarIndex

sync | disable

Controlla se gli indici scalari sono precaricati.

Usare sync per gli indici scalari coinvolti in condizioni di filtro frequenti o in query di intervallo.

vectorField

sync | disable

Controlla se i dati dei campi vettoriali sono precaricati.

Generalmente disable per evitare un uso intensivo della cache. Abilitare sync solo quando i vettori grezzi devono essere recuperati immediatamente dopo la ricerca (per esempio, i risultati di similarità con richiamo di vettori).

vectorIndex

sync | disable

Controlla se gli indici dei vettori sono precaricati.

Usare sync per gli indici vettoriali che sono critici per la latenza della ricerca. Nei carichi di lavoro batch o a bassa frequenza, disable per una più rapida disponibilità dei segmenti.

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

warmup.scalarField

sync | disable

Impostazione di riscaldamento per tutti i campi scalari della collezione.

warmup.scalarIndex

sync | disable

Impostazione di riscaldamento per tutti gli indici scalari della collezione.

warmup.vectorField

sync | disable

Impostazione di riscaldamento per tutti i campi vettoriali dell'insieme.

warmup.vectorIndex

sync | disable

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

sync

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.

disable

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

sync

true

Disco locale (localStorage.path/cache/...)

sync

false

Memoria locale

disable

true

Recuperato su disco locale al primo accesso

disable

false

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

localStorage.path/cache/<collection_id>/local_chunk/...

File indice scalare/vettoriale

localStorage.path/cache/<collection_id>/local_chunk/index_files/...

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 sync alle collezioni sensibili alle prestazioni e disable a quelle orientate alla capacità.