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:
|
Mais alto |
Coleção |
Todos os campos/índices de uma coleção |
Métodos SDK:
|
Médio |
Cluster |
Todas as colecções no cluster |
|
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 |
|---|---|---|
|
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. |
|
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 |
|---|---|---|---|
|
|
Controla se os dados do campo escalar são pré-carregados. |
Utilize |
|
|
Controla se os índices escalares são pré-carregados. |
Use |
|
|
Controla se os dados do campo vetorial são pré-carregados. |
Geralmente |
|
|
Controla se os índices de vetor são pré-carregados. |
Use |
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 |
|---|---|---|
|
|
Configuração de aquecimento para todos os campos escalares na coleção. |
|
|
Configuração de aquecimento para todos os índices escalares na coleção. |
|
|
Configuração de aquecimento para todos os campos vetoriais da coleção. |
|
|
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 |
|---|---|---|---|
|
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. |
|
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 |
|---|---|---|
|
|
Disco local ( |
|
|
Memória local |
|
|
Fetched to local disk on first access |
|
|
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 |
|
Ficheiros de índice escalar/vetorial |
|
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
synca colecções sensíveis ao desempenho edisablea colecções orientadas para a capacidade.