AquecimentoCompatible with Milvus 2.6.4+

O Warm Up complementa o armazenamento em camadas, pré-carregando campos ou índices selecionados no cache antes que um segmento se torne consultável. É possível configurar o aquecimento ao nível do cluster, da coleção ou de um campo/índice individual, permitindo um controlo fino sobre a latência da primeira consulta e a utilização de recursos.

Por que aquecer

O Lazy Load no armazenamento em camadas melhora a eficiência carregando apenas metadados inicialmente. No entanto, isso pode causar latência na primeira consulta a dados frios, pois os blocos ou índices necessários devem ser obtidos do armazenamento remoto.

O Warm Up resolve esse problema fazendo proativamente o cache de dados críticos durante a inicialização do segmento.

É especialmente benéfico quando:

  • Certos índices escalares são frequentemente usados em condições de filtro.

  • Os índices vetoriais são essenciais para o desempenho da pesquisa e devem estar prontos imediatamente.

  • A latência de início a frio após a reinicialização do QueryNode ou o carregamento de um novo segmento é inaceitável.

Por outro lado, o Warm Up não é recomendado para campos ou índices que são consultados com pouca frequência. A desativação do Warm Up reduz o tempo de carregamento do segmento e conserva o espaço do cache - ideal para campos vetoriais grandes ou campos escalares não críticos.

Níveis de configuração

Nível de configuração

Escopo

Método de configuração

Prioridade

Campo/índice

Campo ou índice individual

Métodos SDK:

  • add_field()

  • alter_collection_field()

  • add_index()

  • alter_index_properties()

Mais alto

Coleção

Todos os campos/índices de uma coleção

Métodos SDK:

  • create_collection()

  • alter_collection_properties()

Médio

Cluster

Todas as colecções no cluster

milvus.yaml ficheiro de configuração

Mais baixo (predefinição)

Substituir o comportamento:

  • Se um campo tiver a sua própria definição de aquecimento, essa definição tem precedência sobre as definições ao nível da coleção e ao nível do cluster.

  • Se não existir uma definição ao nível do campo ou do índice, aplica-se a definição ao nível da coleção.

  • Se não existirem definições de nível de campo ou de índice nem de nível de coleção, aplica-se a definição de nível de cluster.

  • Ao utilizar operações alter, o valor alter mais recente tem efeito.

Configurar o aquecimento ao nível do cluster

O warmup ao nível do cluster é configurado no ficheiro de configuração do Milvus milvus.yaml e aplica-se a todas as colecções do cluster. Isso serve como padrão de linha de base.

Cada tipo de alvo suporta duas configurações:

Configuração de aquecimento

Descrição

Cenário típico

sync

Pré-carregamento antes que o segmento se torne consultável. O tempo de carregamento aumenta ligeiramente, mas a primeira consulta não incorre em latência.

Use para dados críticos de desempenho que devem estar imediatamente disponíveis, como índices escalares de alta frequência ou índices de vetor chave usados na pesquisa.

disable

Ignorar pré-carregamento. O segmento torna-se consultável mais rapidamente, mas a primeira consulta pode acionar o carregamento a pedido.

Use para dados grandes ou acessados com pouca frequência, como campos vetoriais brutos ou campos escalares não críticos.

Exemplo de 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

Parâmetro

Configuração de Warmup

Descrição

Caso de utilização recomendado

scalarField

sync | disable

Controla se os dados do campo escalar são pré-carregados.

Utilize sync apenas se os campos escalares forem pequenos e acedidos frequentemente nos filtros. Caso contrário, disable para reduzir o tempo de carregamento.

scalarIndex

sync | disable

Controla se os índices escalares são pré-carregados.

Use sync para índices escalares envolvidos em condições de filtro frequentes ou consultas de intervalo.

vectorField

sync | disable

Controla se os dados do campo vetorial são pré-carregados.

Geralmente disable para evitar o uso intenso da cache. Active sync apenas quando os vectores em bruto tiverem de ser recuperados imediatamente após a pesquisa (por exemplo, resultados de semelhança com recuperação de vectores).

vectorIndex

sync | disable

Controla se os índices de vetor são pré-carregados.

Use sync para índices vetoriais que são críticos para a latência da pesquisa. Em cargas de trabalho em lote ou de baixa frequência, disable para uma prontidão de segmento mais rápida.

Configurar o aquecimento no nível da coleçãoCompatible with Milvus 2.6.11+

O aquecimento no nível da coleção permite substituir os padrões do cluster para uma coleção específica. Isso é útil quando uma coleção tem padrões de acesso diferentes da linha de base de todo o cluster.

Definir o aquecimento ao criar uma coleção

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

Alterar as definições de aquecimento numa coleção existente

Você deve alterar as propriedades da coleção antes de chamar load(). A alteração de uma coleção carregada devolve um erro. As alterações às definições de aquecimento entram em vigor na próxima vez que carregar a coleção.

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

Referência da propriedade:

Propriedade

Configuração de aquecimento

Descrição

warmup.scalarField

sync | disable

Configuração de aquecimento para todos os campos escalares na coleção.

warmup.scalarIndex

sync | disable

Configuração de aquecimento para todos os índices escalares na coleção.

warmup.vectorField

sync | disable

Configuração de aquecimento para todos os campos vetoriais da coleção.

warmup.vectorIndex

sync | disable

Configuração de aquecimento para todos os índices de vetor na coleção.

Configurar o aquecimento no nível de campoCompatible with Milvus 2.6.11+

O aquecimento em nível de campo fornece a granularidade mais fina, permitindo controlar o comportamento de aquecimento para campos individuais. Isso é útil quando campos específicos têm padrões de acesso exclusivos.

O aquecimento ao nível do campo aplica-se apenas aos dados brutos do campo, não aos índices desse campo. Para configurar o aquecimento para um índice, utilize a configuração ao nível do índice.

Definir o aquecimento ao criar um 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
)

Alterar as definições de aquecimento num campo existente

É necessário alterar as definições de campo antes de chamar load(). A alteração de um campo numa coleção carregada devolve um erro. As alterações às definições de warmup entram em vigor na próxima vez que carregar a coleção.

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

Configurar o aquecimento no nível do índiceCompatible with Milvus 2.6.11+

O aquecimento ao nível do índice permite-lhe controlar o pré-carregamento de índices individuais, independentemente da definição de aquecimento do campo subjacente.

Definir o aquecimento ao criar um índice

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
)

Alterar as definições de warmup num índice existente

É necessário alterar as definições do índice antes de chamar load(). A alteração de um índice numa coleção carregada devolve um erro. As alterações às definições de warmup entram em vigor na próxima vez que carregar a coleção.

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

Referência de comportamento de aquecimento

A tabela a seguir resume o comportamento de warmup em diferentes estágios do ciclo de vida do segmento.

Configuração de warmup

Fase de carregamento

Fase de pesquisa/consulta

Fase de liberação

sync

Os dados são carregados para o armazenamento local. O destino (disco ou memória) depende da definição de mmap.

A consulta atinge diretamente a cache local.

Os dados da cache local são apagados.

disable

Os dados não são carregados para o armazenamento local.

Os dados são obtidos a pedido a partir do armazenamento de objectos e, em seguida, colocados em cache localmente com base na definição de mmap.

Os dados armazenados em cache local são apagados.

Interação com o mmap:

Definição de Warmup

Mmap ativado

Localização dos dados

sync

true

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

sync

false

Memória local

disable

true

Fetched to local disk on first access

disable

false

Obtido na memória local no primeiro acesso

Estrutura do diretório da cache local (quando o mmap está ativado):

Tipo de dados

Caminho do diretório

Dados de campo escalar/vetorial

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

Ficheiros de índice escalar/vetorial

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

Melhores práticas

O Warm Up afeta apenas o carregamento inicial. Se os dados em cache forem despejados posteriormente, a próxima consulta os recarregará sob demanda.

  • Evite o uso excessivo de sync. O pré-carregamento de demasiados campos aumenta o tempo de carregamento e a pressão da cache.

  • Comece de forma conservadora - active o Warm Up apenas para campos e índices que são frequentemente acedidos.

  • Monitorize a latência da consulta e as métricas da cache e, em seguida, expanda o pré-carregamento conforme necessário.

  • Para cargas de trabalho mistas, aplique sync a colecções sensíveis ao desempenho e disable a colecções orientadas para a capacidade.