• Sobre Milvus
  • Começar a trabalhar
  • Conceitos
  • Guia do utilizador
  • Importação de dados
  • Ferramentas de IA
  • Guia de Administração
  • Ferramentas
  • Integrações
  • Tutoriais
  • FAQs
  • API Reference

GPU_IVF_PQ

O índice GPU_IVF_PQ baseia-se no conceito IVF_PQ, combinando o agrupamento de ficheiros invertido com a Quantização de Produtos (PQ), que divide vectores de elevada dimensão em subespaços mais pequenos e quantifica-os para pesquisas de semelhança eficientes. Exclusivamente concebido para ambientes GPU, o GPU_IVF_PQ tira partido do processamento paralelo para acelerar os cálculos e tratar eficazmente dados vectoriais de grande escala. Para obter mais informações sobre conceitos fundamentais, consulte IVF_PQ.

Criar índice

Para construir um índice GPU_IVF_PQ num campo vetorial em Milvus, utilize o método add_index(), especificando os parâmetros 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_IVF_PQ", # 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={
        "m": 4, # Number of sub-vectors to split eahc vector into
    } # Index building params
)

Nesta configuração:

  • index_type: O tipo de índice a construir. Neste exemplo, defina o valor para GPU_IVF_PQ.

  • metric_type: O método utilizado para calcular a distância entre vectores. Os valores suportados incluem COSINE, L2, e IP. Para obter detalhes, consulte Tipos de métricas.

  • params: Opções de configuração adicionais para criar o índice.

    • m: Número de sub-vectores em que dividir o vetor.

    Para saber mais sobre os parâmetros de construção disponíveis para o índice GPU_IVF_PQ, consulte Parâmetros de construção do índice.

Assim que os parâmetros do índice estiverem configurados, pode criar o índice utilizando diretamente o método create_index() ou passando os parâmetros do índice no método create_collection. Para obter detalhes, consulte Criar coleção.

Pesquisar no índice

Depois de o índice ser criado e as entidades serem inseridas, pode efetuar pesquisas de semelhança no índice.

search_params = {
    "params": {
        "nprobe": 10, # Number of clusters to 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:

  • params: Opções de configuração adicionais para pesquisar no índice.

    • nprobe: Número de clusters a serem pesquisados.

    Para saber mais sobre os parâmetros de pesquisa disponíveis para o índice GPU_IVF_PQ, consulte Parâmetros de pesquisa específicos do índice.

Parâmetros de índice

Esta secção fornece uma visão geral dos parâmetros utilizados para criar um índice e efetuar pesquisas no índice.

Parâmetros de construção do índice

A tabela seguinte lista os parâmetros que podem ser configurados em params ao construir um índice.

Parâmetro

Descrição

Intervalo de valores

Sugestão de afinação

IVF

nlist

O número de clusters a criar utilizando o algoritmo k-means durante a construção do índice.

Tipo: Integer Intervalo: [1, 65536]

Valor predefinido: 128

Valores maiores de nlist melhoram a recuperação ao criar clusters mais refinados, mas aumentam o tempo de criação do índice. Optimize com base no tamanho do conjunto de dados e nos recursos disponíveis. Na maioria dos casos, recomendamos que defina um valor dentro deste intervalo: [32, 4096].

PQ

m

O número de sub-vectores (utilizados para quantização) para dividir cada vetor de alta dimensão durante o processo de quantização.

Tipo: Inteiro Intervalo: [1, 65536]

Valor predefinido: Nenhum

Um valor m mais elevado pode melhorar a precisão, mas também aumenta a complexidade computacional e a utilização de memória. m tem de ser um divisor da dimensão do vetor(D) para garantir uma decomposição adequada. Um valor geralmente recomendado é m = D/2.

Na maioria dos casos, recomendamos que defina um valor dentro deste intervalo: [D/8, D].

nbits

O número de bits utilizados para representar o índice do centróide de cada sub-vetor na forma comprimida. Determina diretamente o tamanho de cada livro de códigos. Cada livro de códigos conterá centroides de 2nbits. Por exemplo, se nbits estiver definido para 8, cada sub-vetor será representado por um índice de centróide de 8 bits. Isto permite28 (256) centróides possíveis no livro de códigos para esse sub-vetor.

Tipo: Integer Intervalo: [1, 24]

Valor por defeito: 8

Um valor nbits mais alto permite livros de códigos maiores, potencialmente levando a representações mais precisas dos vectores originais. No entanto, também significa utilizar mais bits para armazenar cada índice, resultando numa menor compressão. Na maioria dos casos, recomendamos que defina um valor dentro deste intervalo: [1, 16].

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 coloca em cache o conjunto de dados original para economizar memória da GPU.

Tipo: String Range: ["true", "false"]

Valor predefinido: "false"

Definindo-o para "true" melhora a recuperação ao refinar os resultados da pesquisa, mas usa mais memória GPU. Definindo-o para "false" conserva a memória do GPU.

Parâmetros de pesquisa específicos do índice

A tabela a seguir lista os parâmetros que podem ser configurados em search_params.params ao pesquisar no índice.

Parâmetro

Descrição

Intervalo de valores

Sugestão de ajuste

FIV

nprobe

O número de clusters para procurar candidatos.

Tipo: Integer Intervalo: [1, nlist]

Valor predefinido: 8

Valores mais altos permitem que mais clusters sejam pesquisados, melhorando a recuperação ao expandir o escopo da pesquisa, mas ao custo de uma maior latência de consulta. Defina nprobe proporcionalmente a nlist para equilibrar velocidade e precisão.

Na maioria dos casos, recomendamos que você defina um valor dentro deste intervalo: [1, nlist].

Try Managed Milvus for Free

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

Get Started
Feedback

Esta página foi útil?