AufwärmenCompatible with Milvus 2.6.4+

Warm Up ergänzt Tiered Storage durch das Vorladen ausgewählter Felder oder Indizes in den Cache, bevor ein Segment abfragbar wird. Sie können Warmup auf Cluster-, Sammlungs- oder Einzelfeld-/Indexebene konfigurieren und so die Latenzzeit bei der ersten Abfrage und die Ressourcennutzung genau steuern.

Warum Aufwärmen

Lazy Load in Tiered Storage verbessert die Effizienz, indem zunächst nur Metadaten geladen werden. Dies kann jedoch bei der ersten Abfrage von kalten Daten zu Latenzzeiten führen, da die erforderlichen Chunks oder Indizes aus dem entfernten Speicher abgerufen werden müssen.

Warm Up löst dieses Problem durch proaktives Zwischenspeichern kritischer Daten während der Segmentinitialisierung.

Dies ist besonders vorteilhaft, wenn:

  • Bestimmte skalare Indizes werden häufig in Filterbedingungen verwendet.

  • Vektorindizes sind für die Suchleistung unerlässlich und müssen sofort zur Verfügung stehen.

  • Die Kaltstart-Latenzzeit nach einem QueryNode-Neustart oder dem Laden eines neuen Segments ist inakzeptabel.

Im Gegensatz dazu wird Warm Up für Felder oder Indizes, die nur selten abgefragt werden, nicht empfohlen. Die Deaktivierung von Warm Up verkürzt die Segmentladezeit und spart Cache-Speicherplatz - ideal für große Vektorfelder oder unkritische skalare Felder.

Konfigurationsstufen

Ebene

Umfang

Konfigurationsmethode

Priorität

Feld/Index

Einzelnes Feld oder Index

SDK-Methoden:

  • add_field()

  • alter_collection_field()

  • add_index()

  • alter_index_properties()

Höchste

Sammlung

Alle Felder/Indizes in einer Sammlung

SDK-Methoden:

  • create_collection()

  • alter_collection_properties()

Mittel

Cluster

Alle Sammlungen im Cluster

milvus.yaml Konfigurationsdatei

Niedrigste (Standard)

Verhalten außer Kraft setzen:

  • Wenn ein Feld seine eigene Aufwärmeinstellung hat, hat diese Einstellung Vorrang vor den Einstellungen auf Sammlungs- und Clusterebene.

  • Wenn keine Einstellung auf Feld- oder Indexebene vorhanden ist, gilt die Einstellung auf Sammlungsebene.

  • Wenn weder Einstellungen auf Feld- oder Indexebene noch auf Sammlungsebene vorhanden sind, gilt die Einstellung auf Clusterebene.

  • Bei der Verwendung von Alter-Operationen wird der letzte Alter-Wert wirksam.

Konfigurieren von Warmup auf Clusterebene

Warmup auf Clusterebene wird in der Milvus-Konfigurationsdatei milvus.yaml konfiguriert und gilt für alle Sammlungen im Cluster. Dies dient als Grundeinstellung.

Jeder Zieltyp unterstützt zwei Einstellungen:

Aufwärmen Einstellung

Beschreibung

Typisches Szenario

sync

Vorladen, bevor das Segment abfragbar wird. Die Ladezeit erhöht sich leicht, aber die erste Abfrage verursacht keine Latenz.

Verwenden Sie diese Option für leistungskritische Daten, die sofort verfügbar sein müssen, z. B. skalare Indizes mit hoher Frequenz oder Schlüsselvektorindizes für die Suche.

disable

Vorladen überspringen. Das Segment wird schneller abfragbar, aber die erste Abfrage kann ein bedarfsgesteuertes Laden auslösen.

Geeignet für seltene Zugriffe oder große Daten wie rohe Vektorfelder oder unkritische skalare Felder.

Beispiel 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

Parameter

Warmup Einstellung

Beschreibung

Empfohlener Anwendungsfall

scalarField

sync | disable

Steuert, ob skalare Felddaten vorgeladen werden.

Verwenden Sie sync nur, wenn skalare Felder klein sind und in Filtern häufig aufgerufen werden. Ansonsten disable, um die Ladezeit zu verkürzen.

scalarIndex

sync | disable

Steuert, ob skalare Indizes vorgeladen werden.

Verwenden Sie sync für skalare Indizes, die in häufigen Filterbedingungen oder Bereichsabfragen verwendet werden.

vectorField

sync | disable

Legt fest, ob Vektorfelddaten vorgeladen werden.

Im Allgemeinen disable, um eine starke Nutzung des Cache zu vermeiden. Aktivieren Sie sync nur, wenn Rohvektoren unmittelbar nach der Suche abgerufen werden müssen (z. B. Ähnlichkeitsergebnisse mit Vektorabruf).

vectorIndex

sync | disable

Steuert, ob Vektorindizes vorgeladen werden.

Verwenden Sie sync für Vektorindizes, die für die Suchlatenz entscheidend sind. Bei Batch- oder Niedrigfrequenz-Workloads: disable für eine schnellere Segment-Bereitschaft.

Aufwärmen auf Sammlungsebene konfigurierenCompatible with Milvus 2.6.11+

Mit Warmup auf Sammlungsebene können Sie die Cluster-Standardeinstellungen für eine bestimmte Sammlung außer Kraft setzen. Dies ist nützlich, wenn eine Sammlung andere Zugriffsmuster aufweist als die clusterweite Basislinie.

Einstellen der Aufwärmphase bei der Erstellung einer Sammlung

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"
    }
)

Ändern der Aufwärmeinstellungen für eine vorhandene Sammlung

Sie müssen die Auflistungseigenschaften ändern, bevor Sie load() aufrufen. Das Ändern einer geladenen Sammlung gibt einen Fehler zurück. Änderungen an den Aufwärmeinstellungen werden beim nächsten Laden der Sammlung wirksam.

client.alter_collection_properties(
    collection_name="my_collection",
    properties={
        "warmup.vectorIndex": "disable",
        "warmup.scalarField": "sync"
    }
)

Referenz der Eigenschaft:

Eigenschaft

Aufwärmeinstellung

Beschreibung

warmup.scalarField

sync | disable

Aufwärmeinstellung für alle skalaren Felder in der Sammlung.

warmup.scalarIndex

sync | disable

Warmup-Einstellung für alle skalaren Indizes in der Sammlung.

warmup.vectorField

sync | disable

Warmup-Einstellung für alle Vektorfelder in der Sammlung.

warmup.vectorIndex

sync | disable

Warmup-Einstellung für alle Vektorindizes in der Sammlung.

Aufwärmen auf Feldebene konfigurierenCompatible with Milvus 2.6.11+

Die Aufwärmung auf Feldebene bietet die feinste Granularität und ermöglicht es Ihnen, das Aufwärmverhalten für einzelne Felder zu steuern. Dies ist nützlich, wenn bestimmte Felder eindeutige Zugriffsmuster haben.

Warmup auf Feldebene gilt nur für Feldrohdaten, nicht für Indizes zu diesem Feld. Um Warmup für einen Index zu konfigurieren, verwenden Sie die Konfiguration auf Indexebene.

Warmup beim Erstellen eines Felds einstellen

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
)

Ändern der Aufwärmeinstellungen für ein vorhandenes Feld

Sie müssen die Feldeinstellungen ändern, bevor Sie load() aufrufen. Das Ändern eines Felds in einer geladenen Sammlung führt zu einem Fehler. Änderungen an den Aufwärmeinstellungen werden beim nächsten Laden der Sammlung wirksam.

client.alter_collection_field(
    collection_name="my_collection",
    field_name="category",
    field_params={"warmup": "sync"}
)

Konfigurieren der Aufwärmphase auf IndexebeneCompatible with Milvus 2.6.11+

Mit Warmup auf Indexebene können Sie das Vorladen für einzelne Indizes steuern, unabhängig von der Warmup-Einstellung des zugrunde liegenden Feldes.

Warmup beim Erstellen eines Index einstellen

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
)

Ändern der Warmup-Einstellungen für einen bestehenden Index

Sie müssen die Indexeinstellungen ändern, bevor Sie load() aufrufen. Das Ändern eines Indexes für eine geladene Sammlung gibt einen Fehler zurück. Änderungen an den Warmup-Einstellungen werden beim nächsten Laden der Sammlung wirksam.

client.alter_index_properties(
    collection_name="my_collection",
    index_name="embedding",
    properties={"warmup": "sync"}
)

Referenz zum Aufwärmverhalten

In der folgenden Tabelle ist das Aufwärmverhalten in den verschiedenen Phasen des Segmentlebenszyklus zusammengefasst.

Aufwärmeinstellung

Ladephase

Such-/Abfragephase

Freigabephase

sync

Die Daten werden in den lokalen Speicher geladen. Das Ziel (Festplatte oder Speicher) hängt von der mmap-Einstellung ab.

Die Abfrage trifft direkt auf den lokalen Cache.

Lokale Cachedaten werden gelöscht.

disable

Die Daten werden nicht in den lokalen Speicher geladen.

Die Daten werden bei Bedarf aus dem Objektspeicher geholt und dann lokal auf der Grundlage der mmap-Einstellung zwischengespeichert.

Die lokal zwischengespeicherten Daten werden geleert.

Interaktion mit mmap:

Warmup-Einstellung

Mmap Aktiviert

Speicherort der Daten

sync

true

Lokale Festplatte (localStorage.path/cache/...)

sync

false

Lokaler Speicher

disable

true

Wird beim ersten Zugriff auf die lokale Festplatte geholt

disable

false

Beim ersten Zugriff in den lokalen Speicher geholt

Lokale Cache-Verzeichnisstruktur (wenn mmap aktiviert ist):

Datentyp

Verzeichnis Pfad

Skalar/Vektor-Felddaten

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

Skalar-/Vektor-Indexdateien

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

Bewährte Praktiken

Warm Up betrifft nur das erste Laden. Wenn zwischengespeicherte Daten später entfernt werden, werden sie bei der nächsten Abfrage erneut geladen.

  • Vermeiden Sie die übermäßige Verwendung von sync. Das Vorladen zu vieler Felder erhöht die Ladezeit und den Druck auf den Cache.

  • Beginnen Sie konservativ - aktivieren Sie Warm Up nur für Felder und Indizes, auf die häufig zugegriffen wird.

  • Überwachen Sie die Abfragelatenz und die Cache-Metriken und erweitern Sie das Preloading dann nach Bedarf.

  • Wenden Sie bei gemischten Arbeitslasten sync auf leistungsempfindliche Sammlungen und disable auf kapazitätsorientierte Sammlungen an.