RéchauffementCompatible with Milvus 2.6.4+

Leréchauffement complète le stockage hiérarchisé en préchargeant des champs ou des index sélectionnés dans le cache avant qu'un segment ne devienne interrogeable. Vous pouvez configurer le warmup au niveau du cluster, de la collection ou d'un champ/index individuel, ce qui permet un contrôle fin de la latence de la première requête et de l'utilisation des ressources.

Pourquoi réchauffer

Lazy Load dans Tiered Storage améliore l'efficacité en chargeant uniquement les métadonnées au départ. Cependant, cela peut entraîner un temps de latence lors de la première requête de données froides, car les blocs ou les index requis doivent être récupérés à partir d'un stockage distant.

Warm Up résout ce problème en mettant proactivement en cache les données critiques lors de l'initialisation du segment.

Il est particulièrement utile dans les cas suivants

  • Certains index scalaires sont fréquemment utilisés dans les conditions de filtrage.

  • Les index vectoriels sont essentiels pour les performances de recherche et doivent être prêts immédiatement.

  • La latence de démarrage à froid après le redémarrage du QueryNode ou le chargement d'un nouveau segment est inacceptable.

En revanche, le réchauffement n' est pas recommandé pour les champs ou les index qui sont rarement interrogés. La désactivation de la fonction Warm Up réduit le temps de chargement des segments et préserve l'espace du cache, ce qui est idéal pour les grands champs vectoriels ou les champs scalaires non critiques.

Niveaux de configuration

Niveau de configuration

Champ d'application

Méthode de configuration

Priorité

Champ/Index

Champ ou index unique

Méthodes SDK :

  • add_field()

  • alter_collection_field()

  • add_index()

  • alter_index_properties()

La plus élevée

Collection

Tous les champs/index d'une collection

Méthodes SDK :

  • create_collection()

  • alter_collection_properties()

Moyenne

Groupe

Toutes les collections dans le cluster

milvus.yaml fichier de configuration

Le plus bas (par défaut)

Comportement prioritaire :

  • Si un champ possède son propre paramètre de réchauffement, ce paramètre a la priorité sur les paramètres au niveau de la collection et du cluster.

  • S'il n'existe aucun paramètre au niveau du champ ou de l'index, c'est le paramètre au niveau de la collection qui s'applique.

  • S'il n'existe aucun paramètre au niveau du champ ou de l'index, ni au niveau de la collection, c'est le paramètre au niveau du cluster qui s'applique.

  • Lors de l'utilisation d'opérations de modification, c'est la valeur de modification la plus récente qui prend effet.

Configurer le réchauffement au niveau du cluster

Le réchauffement au niveau du cluster est configuré dans le fichier de configuration Milvus milvus.yaml et s'applique à toutes les collections du cluster. Il s'agit de la valeur de base par défaut.

Chaque type de cible prend en charge deux paramètres :

Réchauffement Paramètre

Paramètre Description

Scénario type

sync

Préchargement avant que le segment ne devienne interrogeable. Le temps de chargement augmente légèrement, mais la première requête n'entraîne aucune latence.

À utiliser pour les données critiques en termes de performances qui doivent être immédiatement disponibles, telles que les index scalaires à haute fréquence ou les index vectoriels clés utilisés dans la recherche.

disable

Sauter le préchargement. Le segment devient interrogeable plus rapidement, mais la première requête peut déclencher un chargement à la demande.

À utiliser pour les données volumineuses ou rarement consultées, telles que les champs vectoriels bruts ou les champs scalaires non critiques.

Exemple 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

Paramètre

Paramètre d'échauffement

Description du paramètre

Cas d'utilisation recommandé

scalarField

sync | disable

Contrôle si les données des champs scalaires sont préchargées.

N'utilisez sync que si les champs scalaires sont petits et fréquemment consultés dans les filtres. Sinon, disable pour réduire le temps de chargement.

scalarIndex

sync | disable

Contrôle si les index scalaires sont préchargés.

Utilisez sync pour les index scalaires impliqués dans des conditions de filtrage fréquentes ou des requêtes de plage.

vectorField

sync | disable

Contrôle si les données des champs vectoriels sont préchargées.

Généralement disable pour éviter une utilisation intensive du cache. Activez sync uniquement lorsque les vecteurs bruts doivent être récupérés immédiatement après la recherche (par exemple, résultats de similarité avec rappel de vecteur).

vectorIndex

sync | disable

Contrôle si les index de vecteurs sont préchargés.

Utilisez sync pour les index vectoriels qui sont essentiels à la latence de la recherche. Dans les charges de travail par lots ou à faible fréquence, disable pour une préparation plus rapide des segments.

Configuration du préchauffage au niveau de la collectionCompatible with Milvus 2.6.11+

Le préchauffage au niveau de la collection vous permet de remplacer les valeurs par défaut du cluster pour une collection spécifique. Cette fonction est utile lorsqu'une collection présente des schémas d'accès différents de ceux de la base de référence du cluster.

Configurer le préchauffage lors de la création d'une collection

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

Modifier les paramètres de réchauffement d'une collection existante

Vous devez modifier les propriétés de la collection avant d'appeler load(). La modification d'une collection chargée entraîne une erreur. Les modifications apportées aux paramètres de réchauffement prennent effet lors du prochain chargement de la collection.

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

Référence de la propriété:

Propriété

Paramètre d'échauffement

Description

warmup.scalarField

sync | disable

Paramètre de réchauffement pour tous les champs scalaires de la collection.

warmup.scalarIndex

sync | disable

Paramètre d'échauffement pour tous les index scalaires de la collection.

warmup.vectorField

sync | disable

Paramètre d'échauffement pour tous les champs vectoriels de la collection.

warmup.vectorIndex

sync | disable

Paramètre de réchauffement pour tous les index vectoriels de la collection.

Configurer le réchauffement au niveau des champsCompatible with Milvus 2.6.11+

Le réchauffement au niveau du champ offre la granularité la plus fine, vous permettant de contrôler le comportement du réchauffement pour des champs individuels. Ceci est utile lorsque des champs spécifiques ont des schémas d'accès uniques.

Le réchauffement au niveau du champ s'applique uniquement aux données brutes du champ, et non aux index de ce champ. Pour configurer le réchauffement d'un index, utilisez la configuration au niveau de l'index.

Configurer le réchauffement lors de la création d'un champ

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
)

Modifier les paramètres de réchauffement d'une rubrique existante

Vous devez modifier les paramètres d'une rubrique avant d'appeler load(). La modification d'un champ dans une collection chargée entraîne une erreur. Les modifications apportées aux paramètres de réchauffement prennent effet lors du prochain chargement de la collection.

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

Configurer le réchauffement au niveau de l'indexCompatible with Milvus 2.6.11+

Le préchauffage au niveau de l'index vous permet de contrôler le préchargement pour des index individuels, indépendamment du paramètre de préchauffage du champ sous-jacent.

Configurer le préchauffage lors de la création d'un index

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
)

Modifier les paramètres de réchauffement d'un index existant

Vous devez modifier les paramètres de l'index avant d'appeler load(). La modification d'un index sur une collection chargée entraîne une erreur. Les modifications apportées aux paramètres de réchauffement prennent effet lors du prochain chargement de la collection.

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

Référence du comportement du warmup

Le tableau suivant résume le comportement de réchauffement à différentes étapes du cycle de vie du segment.

Paramètre de réchauffement

Phase de chargement

Phase de recherche/interrogation

Phase de libération

sync

Les données sont chargées dans le stockage local. La destination (disque ou mémoire) dépend du paramètre mmap.

La requête frappe directement le cache local.

Les données du cache local sont effacées.

disable

Les données ne sont pas chargées dans la mémoire locale.

Les données sont extraites à la demande du stockage d'objets, puis mises en cache localement en fonction du paramètre mmap.

Les données mises en cache localement sont effacées.

Interaction avec mmap :

Paramètres d'échauffement

Mmap activé

Emplacement des données

sync

true

Disque local (localStorage.path/cache/...)

sync

false

Mémoire locale

disable

true

Enregistré sur le disque local lors du premier accès

disable

false

Récupéré dans la mémoire locale lors du premier accès

Structure du répertoire du cache local (lorsque mmap est activé) :

Type de données

Chemin d'accès au répertoire

Données de champ scalaire/vectoriel

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

Fichiers d'index scalaire/vectoriel

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

Meilleures pratiques

L'échauffement n'affecte que le chargement initial. Si les données mises en cache sont expulsées ultérieurement, la requête suivante les rechargera à la demande.

  • Évitez d'abuser de sync. Le préchargement d'un trop grand nombre de champs augmente le temps de chargement et la pression sur le cache.

  • Commencez de manière prudente : activez Warm Up uniquement pour les champs et les index auxquels on accède fréquemment.

  • Surveillez la latence des requêtes et les mesures du cache, puis augmentez le préchargement si nécessaire.

  • Pour les charges de travail mixtes, appliquez sync aux collections sensibles aux performances et disable aux collections orientées vers la capacité.