milvus-logo
LFAI
Home
  • Guia do utilizador

Compactação de clusters

A compactação de clusters foi concebida para melhorar o desempenho da pesquisa e reduzir os custos em grandes colecções. Este guia irá ajudá-lo a compreender a compactação de clusters e a forma como esta funcionalidade pode melhorar o desempenho da pesquisa.

Visão geral

Milvus armazena entidades de entrada em segmentos dentro de uma coleção e sela um segmento quando ele está cheio. Se isso acontecer, um novo segmento é criado para acomodar entidades adicionais. Como resultado, as entidades são distribuídas arbitrariamente entre os segmentos. Esta distribuição requer que o Milvus pesquise vários segmentos para encontrar os vizinhos mais próximos de um determinado vetor de consulta.

Without clustering Compaction Sem agrupamento Compactação

Se Milvus puder distribuir entidades entre segmentos com base nos valores de um campo específico, o âmbito da pesquisa pode ser restringido dentro de um segmento, melhorando assim o desempenho da pesquisa.

Clustering Compaction é um recurso do Milvus que redistribui entidades entre segmentos em uma coleção com base nos valores de um campo escalar. Para ativar esse recurso, primeiro é necessário selecionar um campo escalar como a chave de agrupamento. Isso permite que o Milvus redistribua entidades em um segmento quando seus valores de chave de agrupamento estiverem dentro de um intervalo específico. Quando você aciona uma compactação de clustering, Milvus gera/atualiza um índice global chamado PartitionStats, que registra a relação de mapeamento entre segmentos e valores de chave de clustering.

With Clustering Compaction Com compactação de clustering

Usando o PartitionStats como referência, o Milvus pode eliminar dados irrelevantes ao receber uma solicitação de pesquisa/consulta que contém um valor de chave de clustering e restringir o escopo da pesquisa dentro dos segmentos que mapeiam o valor, melhorando assim o desempenho da pesquisa. Para obter detalhes sobre a melhoria do desempenho, consulte Testes de benchmark.

Usar compactação de clustering

O recurso de Compactação de Clustering no Milvus é altamente configurável. Você pode optar por acioná-lo manualmente ou configurá-lo para ser acionado automaticamente em intervalos pelo Milvus. Para ativar a compactação de cluster, faça o seguinte:

Configuração global

É necessário modificar o ficheiro de configuração do Milvus conforme indicado abaixo.

dataCoord:
  compaction:
    clustering:
      enable: true 
      autoEnable: false 
      triggerInterval: 600 
      minInterval: 3600 
      maxInterval: 259200 
      newDataSizeThreshold: 512m 
      timeout: 7200
     
queryNode:
  enableSegmentPrune: true 

datanode:
  clusteringCompaction:
    memoryBufferRatio: 0.1 
    workPoolSize: 8  
common:
  usePartitionKeyAsClusteringKey: true 
  • dataCoord.compaction.clustering

    Configuração ItemDescriçãoValor por defeito
    enableEspecifica se a compactação do agrupamento deve ser activada.
    Defina esta opção para true se precisar de ativar esta funcionalidade para todas as colecções que tenham uma chave de agrupamento.
    false
    autoEnableEspecifica se a compactação é activada automaticamente.
    Definir isto para true indica que o Milvus compacta as colecções com uma chave de agrupamento nos intervalos especificados.
    false
    triggerIntervalEspecifica o intervalo, em milissegundos, em que o Milvus inicia a compactação do agrupamento.
    Este parâmetro só é válido se autoEnable estiver definido como true.
    -
    minIntervalEspecifica o intervalo mínimo em segundos.
    Este parâmetro é válido apenas quando autoEnable está definido como true.
    Definir este parâmetro como um número inteiro superior a triggerInterval ajuda a evitar compactações repetidas num curto período de tempo.
    -
    maxIntervalEspecifica o intervalo máximo em segundos.
    Este parâmetro só é válido se autoEnable estiver definido como true.
    Quando o Milvus detecta que uma coleção não foi compactada por um período superior a este valor, força uma compactação por clustering.
    -
    newDataSizeThresholdEspecifica o limite superior para desencadear uma compactação de agrupamento.
    Este parâmetro só é válido quando autoEnable está definido como true.
    Quando o Milvus detecta que o volume de dados de uma coleção excede este valor, inicia um processo de compactação em cluster.
    -
    timeoutEspecifica a duração do timeout para uma compactação de clustering.
    Uma compactação de agrupamento falha se o tempo de execução exceder esse valor.
    -
  • queryNode

    Item de configuraçãoDescriçãoValor padrão
    enableSegmentPruneEspecifica se o Milvus remove os dados consultando o PartitionStats ao receber solicitações de pesquisa/consulta.
    Definir esta opção como true permite que o Milvus remova dados irrelevantes de segmentos durante uma solicitação de pesquisa/consulta.
    false
  • dataNode.clusteringCompaction

    Item de configuraçãoDescriçãoValor padrão
    memoryBufferRatioEspecifica a taxa de buffer de memória para tarefas de compactação de cluster.
    O Milvus descarrega os dados quando o tamanho dos dados excede o tamanho do buffer alocado calculado usando essa proporção.
    -
    workPoolSizeEspecifica o tamanho do pool de trabalhadores para uma tarefa de compactação de agrupamento.-
  • common

    Item de configuraçãoDescriçãoValor predefinido
    usePartitionKeyAsClusteringKeyEspecifica se a chave de partição em colecções deve ser utilizada como chave de clustering.
    Definir isto para true indica que a chave de partição é utilizada como chave de agrupamento.
    É sempre possível substituir esta definição numa coleção, definindo explicitamente uma chave de agrupamento.
    false

Para aplicar as alterações acima ao seu cluster Milvus, siga os passos em Configurar Milvus com Helm e Configurar Milvus com Milvus Operators.

Configuração da coleção

Para compactar o cluster numa coleção específica, deve selecionar um campo escalar da coleção como chave de cluster.

default_fields = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
    FieldSchema(name="key", dtype=DataType.INT64, is_clustering_key=True),
    FieldSchema(name="var", dtype=DataType.VARCHAR, max_length=1000, is_primary=False),
    FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=dim)
]

default_schema = CollectionSchema(
    fields=default_fields, 
    description="test clustering-key collection"
)

coll1 = Collection(name="clustering_test", schema=default_schema)

Pode utilizar os campos escalares dos seguintes tipos de dados como chave de agrupamento: Int8, Int16, Int32, Int64, Float, Double, e VarChar.

Acionar compactação de clustering

Se tiver ativado a compactação automática do clustering, o Milvus desencadeia automaticamente a compactação no intervalo especificado. Em alternativa, pode ativar manualmente a compactação da seguinte forma:

coll1.compact(is_clustering=True)
coll1.get_compaction_state(is_clustering=True)
coll1.wait_for_compaction_completed(is_clustering=True)

Teste de Benchmark

O volume de dados e os padrões de consulta combinados determinam a melhoria de desempenho que a compactação de cluster pode trazer. Um teste de benchmark interno demonstra que a compactação de clustering produz uma melhoria de até 25 vezes nas consultas por segundo (QPS).

O teste de referência é feito numa coleção que contém entidades de um conjunto de dados LAION de 20 milhões e 768 dimensões, com o campo chave designado como chave de clustering. Depois que a compactação de clustering é acionada na coleção, pesquisas simultâneas são enviadas até que o uso da CPU atinja um nível alto de água.

Filtro de pesquisa Rácio de poda Latência (ms) QPS (reqs/s)
Média Mínimo Máximo Mediana TP99
Nenhum 0% 1685 672 2294 1710 2291 17.75
chave > 200 e chave < 800 40.2% 1045 47 1828 1085 1617 28.38
chave > 200 e chave < 600 59.8% 829 45 1483 882 1303 35.78
chave > 200 e chave < 400 79.5% 550 100 985 584 898 54.00
chave == 1000 99% 68 24 1273 70 246 431.41

À medida que o intervalo de pesquisa é reduzido nos filtros de pesquisa, o rácio de poda aumenta. Isto significa que mais entidades são ignoradas durante o processo de pesquisa. Ao comparar as estatísticas na primeira e na última linha, pode ver que as pesquisas sem compactação de clusters requerem a pesquisa de toda a coleção. Por outro lado, as pesquisas com compactação de clusters utilizando uma chave específica podem alcançar uma melhoria de até 25 vezes.

Melhores práticas

Aqui estão algumas dicas para usar a compactação de clustering de forma eficiente:

  • Ativar esta opção para colecções com grandes volumes de dados. O desempenho da pesquisa melhora com maiores volumes de dados numa coleção. É uma boa opção ativar esta funcionalidade para colecções com mais de 1 milhão de entidades.

  • Escolha uma chave de agrupamento adequada: Pode utilizar campos escalares normalmente empregues como condições de filtragem como chave de agrupamento. Para uma coleção que contém dados de vários inquilinos, pode utilizar o campo que distingue um inquilino de outro como chave de agrupamento.

  • Utilizar a chave de partição como chave de agrupamento. Pode definir common.usePartitionKeyAsClusteringKey como true se pretender ativar esta funcionalidade para todas as colecções na sua instância Milvus ou se continuar a ter problemas de desempenho numa coleção grande com uma chave de partição. Ao fazê-lo, terá uma chave de clustering e uma chave de partição quando escolher um campo escalar numa coleção como chave de partição.

    Note que esta definição não impede a escolha de outro campo escalar como chave de agrupamento. A chave de clustering explicitamente designada tem sempre precedência.

Traduzido porDeepLogo

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

Esta página foi útil?