GPU_CAGRA

O índice GPU_CAGRA é um índice baseado em grafos otimizado para GPUs. Utilizar GPUs de nível de inferência para executar a versão GPU do Milvus pode ser mais económico do que utilizar GPUs de nível de treino, que são mais caras.

Criar índice

Para criar um índice « GPU_CAGRA » num campo vetorial no Milvus, utilize o método « add_index() », especificando « index_type », « metric_type » e parâmetros adicionais para o índice.

from pymilvus import MilvusClient

# Prepare index building params
index_params = MilvusClient.prepare_index_params()

index_params.add_index(
    field_name="your_vector_field_name", # Name of the vector field to be indexed
    index_type="GPU_CAGRA", # Type of the index to create
    index_name="vector_index", # Name of the index to create
    metric_type="L2", # Metric type used to measure similarity
    params={
        "intermediate_graph_degree": 64, # Affects recall and build time by determining the graph’s degree before pruning
        "graph_degree": 32, # Affets search performance and recall by setting the graph’s degree after pruning
        "build_algo": "IVF_PQ", # Selects the graph generation algorithm before pruning
        "cache_dataset_on_device": "true", # Decides whether to cache the original dataset in GPU memory
        "adapt_for_cpu": "false", # Decides whether to use GPU for index-building and CPU for search
    } # Index building params
)

Nesta configuração:

  • index_type: O tipo de índice a ser criado. Neste exemplo, defina o valor como « GPU_CAGRA ».

  • metric_type: O método utilizado para calcular a distância entre vetores. Para mais detalhes, consulte Tipos de métricas.

  • params: Opções de configuração adicionais para a criação do índice. Para saber mais sobre os parâmetros de criação disponíveis para o índice « GPU_CAGRA », consulte «Parâmetros de criação de índices».

Depois de configurados os parâmetros do índice, pode criar o índice utilizando diretamente o método ` create_index() ` ou passando os parâmetros do índice no método ` create_collection `. Para mais detalhes, consulte «Criar coleção».

Pesquisa no índice

Depois de o índice estar criado e as entidades inseridas, pode efetuar pesquisas de similaridade no índice.

search_params = {
    "params": {
        "itopk_size": 16, # Determines the size of intermediate results kept during the search
        "search_width": 8, # Specifies the number of entry points into the CAGRA graph during the search
    }
}

res = MilvusClient.search(
    collection_name="your_collection_name", # Collection name
    anns_field="vector_field", # Vector field name
    data=[[0.1, 0.2, 0.3, 0.4, 0.5]],  # Query vector
    limit=3,  # TopK results to return
    search_params=search_params
)

Nesta configuração:

Ativar a pesquisa por CPU no momento do carregamentoCompatible with Milvus 2.6.4+

Para ativar a pesquisa por CPU dinamicamente no momento do carregamento, edite a seguinte configuração em milvus.yaml:

# milvus.yaml
knowhere:
  GPU_CAGRA:
    load: 
      adapt_for_cpu: true

Comportamento

  • Quando a opção « load.adapt_for_cpu » está definida como « true », o Milvus converte o índice GPU_CAGRA num formato executável na CPU (semelhante ao HNSW) durante o carregamento.

  • As operações de pesquisa subsequentes são executadas na CPU, mesmo que o índice tenha sido originalmente construído para a GPU.

  • Se omitido ou definido como «false», o índice permanece na GPU e as pesquisas são executadas na GPU.

Utilize a adaptação à CPU no momento do carregamento em ambientes híbridos ou sensíveis aos custos, onde os recursos da GPU são reservados para a criação de índices, mas as pesquisas são executadas na CPU.

Parâmetros do índice

Esta secção apresenta uma visão geral dos parâmetros utilizados para criar um índice e realizar pesquisas nesse índice.

Parâmetros de criação de índices

A tabela seguinte lista os parâmetros que podem ser configurados no « params » durante a criação de um índice.

Parâmetro

Descrição

Valor por predefinição

intermediate_graph_degree

Afeta a taxa de recuperação e o tempo de criação, determinando o grau do grafo antes da poda. Os valores recomendados são 32 ou 64.

128

graph_degree

Afeta o desempenho da pesquisa e a recuperação, definindo o grau do grafo após a poda. Uma diferença maior entre estes dois graus resulta num tempo de construção mais longo. O seu valor deve ser inferior ao valor de intermediate_graph_degree.

64

build_algo

Seleciona o algoritmo de geração do grafo antes da poda. Valores possíveis:

  • IVF_PQ: Oferece maior qualidade, mas um tempo de construção mais lento.

  • NN_DESCENT: Proporciona uma construção mais rápida, com uma recuperação potencialmente mais baixa.

IVF_PQ

cache_dataset_on_device

Decide se o conjunto de dados original deve ser armazenado em cache na memória da GPU. Valores possíveis:

  • "true": Armazena em cache o conjunto de dados original para melhorar a recuperação, refinando os resultados da pesquisa.

  • "false": Não armazena o conjunto de dados original na cache para poupar memória da GPU.

"false"

adapt_for_cpu

Determina se se deve utilizar a GPU para a criação do índice e a CPU para a pesquisa.

Definir este parâmetro como « "true" » requer a presença do parâmetro « ef » nos pedidos de pesquisa.

"false"

Parâmetros de pesquisa específicos do índice

A tabela seguinte lista os parâmetros que podem ser configurados em « search_params.params » ao efetuar pesquisas no índice.

Parâmetro

Descrição

Valor predefinido

itopk_size

Determina o tamanho dos resultados intermédios mantidos durante a pesquisa. Um valor maior pode melhorar a recuperação, em detrimento do desempenho da pesquisa. Deve ser, pelo menos, igual ao valor final do top-k (limite) e é normalmente uma potência de 2 (por exemplo, 16, 32, 64, 128).

Vazio

search_width

Especifica o número de pontos de entrada no gráfico CAGRA durante a pesquisa. Aumentar este valor pode melhorar a taxa de recuperação, mas pode afetar o desempenho da pesquisa (por exemplo, 1, 2, 4, 8, 16, 32).

Vazio

num_random_samplings

Controla a quantidade de amostragem aleatória que o CAGRA realiza ao escolher os pontos de entrada iniciais para a pesquisa no gráfico. Um valor maior dá ao CAGRA mais oportunidades de começar a partir de pontos melhores, melhorando a recuperação à custa de um aumento da latência da pesquisa. O valor deve ser, no mínimo, 1. Disponível no Milvus 2.6.20+.

1

min_iterations / max_iterations

Controla o processo de iteração da pesquisa. Por predefinição, estão definidos como 0, e o CAGRA determina automaticamente o número de iterações com base em itopk_size e search_width. Ajustar estes valores manualmente pode ajudar a equilibrar o desempenho e a precisão.

0

team_size

Especifica o número de threads CUDA utilizadas para calcular a distância métrica na GPU. Os valores comuns são potências de 2 até 32 (por exemplo, 2, 4, 8, 16, 32). Tem um impacto menor no desempenho da pesquisa. O valor predefinido é 0, em que o Milvus seleciona automaticamente o team_size com base na dimensão do vetor.

0

ef

Especifica o equilíbrio entre tempo de consulta e precisão. Um valor mais elevado de « ef » resulta numa pesquisa mais precisa, mas mais lenta.

Este parâmetro é obrigatório se definir « adapt_for_cpu » como « true » ao criar o índice.

[top_k, int_max]

Traduzido porDeepL

Experimente o Milvus gerenciado gratuitamente

O Zilliz Cloud é descomplicado, powered by Milvus e 10x mais rápido.

Começar
Feedback

Esta página foi útil?