milvus-logo
LFAI
Home
  • Conceitos

Índice GPU

O Milvus suporta vários tipos de índices GPU para acelerar o desempenho e a eficiência da pesquisa, especialmente em cenários de alto rendimento e alta recordação. Este tópico fornece uma visão geral dos tipos de índice GPU suportados pelo Milvus, seus casos de uso adequados e caraterísticas de desempenho. Para obter informações sobre a criação de índices com GPU, consulte Índice com GPU.

É importante observar que o uso de um índice de GPU pode não reduzir necessariamente a latência em comparação com o uso de um índice de CPU. Se você quiser maximizar totalmente a taxa de transferência, precisará de uma pressão de solicitação extremamente alta ou de um grande número de vetores de consulta.

performance desempenho

O suporte GPU do Milvus é contribuído pela equipa Nvidia RAPIDS. A seguir estão os tipos de índices GPU atualmente suportados pelo Milvus.

GPU_CAGRA

GPU_CAGRA é um índice baseado em grafos optimizado para GPUs. A utilização de GPUs de grau de inferência para executar a versão GPU do Milvus pode ser mais rentável em comparação com a utilização de GPUs de grau de treino dispendiosas.

  • Parâmetros de construção do índice

    ParâmetroDescriçãoValor predefinido
    intermediate_graph_degreeAfecta a recuperação e o tempo de construção ao determinar o grau do gráfico antes da poda. Os valores recomendados são 32 ou 64.128
    graph_degreeAfeta o desempenho da pesquisa e a recuperação ao definir o grau do gráfico após a poda. Uma diferença maior entre esses dois graus resulta em um tempo de construção mais longo. O seu valor tem de ser inferior ao valor de intermediate_graph_degree.64
    build_algoSeleciona o algoritmo de geração do grafo antes da poda. Valores possíveis:
    IVF_PQ: Oferece uma qualidade superior mas um tempo de construção mais lento.
    NN_DESCENT Oferece uma construção mais rápida com uma recuperação potencialmente inferior.
    IVF_PQ
    cache_dataset_on_deviceDecide 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 ao refinar os resultados da pesquisa.
    “false” Valores possíveis: : Não armazena em cache o conjunto de dados original para economizar memória da GPU.
    “false”
  • Parâmetros de pesquisa

    ParâmetroDescriçãoValor predefinido
    itopk_sizeDetermina o tamanho dos resultados intermédios mantidos durante a pesquisa. Um valor maior pode melhorar a recuperação à custa do desempenho da pesquisa. Deve ser pelo menos igual ao valor final do top-k (limite) e é tipicamente uma potência de 2 (por exemplo, 16, 32, 64, 128).Vazio
    search_widthEspecifica o número de pontos de entrada no gráfico CAGRA durante a pesquisa. Aumentar este valor pode melhorar a recordação, mas pode afetar o desempenho da pesquisa (por exemplo, 1, 2, 4, 8, 16, 32).Vazio
    min_iterations / max_iterationsControla o processo de iteração da pesquisa. Por defeito, estão definidos para 0, e o CAGRA determina automaticamente o número de iterações com base em itopk_size e search_width. O ajuste manual desses valores pode ajudar a equilibrar o desempenho e a precisão.0
    team_sizeEspecifica o número de threads CUDA usadas para calcular a distância métrica na GPU. Os valores comuns são uma potência 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
  • Limites da pesquisa

    ParâmetroLimite
    top-K<= 1024
    top-K<=max((itopk_size + 31)// 32, search_width) * 32

GPU_IVF_FLAT

Semelhante ao IVF_FLAT, o GPU_IVF_FLAT também divide os dados vectoriais em nlist unidades de cluster e, em seguida, compara as distâncias entre o vetor de entrada alvo e o centro de cada cluster. Dependendo do número de clusters que o sistema está definido para consultar (nprobe), os resultados da pesquisa de semelhança são devolvidos com base em comparações entre a entrada de destino e os vectores apenas no(s) cluster(s) mais semelhante(s) - reduzindo drasticamente o tempo de consulta.

Ao ajustar nprobe, é possível encontrar um equilíbrio ideal entre precisão e velocidade para um determinado cenário. Os resultados do teste de desempenho do IVF_FLAT demonstram que o tempo de consulta aumenta drasticamente à medida que o número de vectores de entrada alvo (nq) e o número de clusters a pesquisar (nprobe) aumentam.

GPU_IVF_FLAT é o índice IVF mais básico, e os dados codificados armazenados em cada unidade são consistentes com os dados originais.

Ao realizar pesquisas, observe que é possível definir o top-K até 256 para qualquer pesquisa em uma coleção indexada por GPU_IVF_FLAT.

  • Parâmetros de construção de índice

    ParâmetroDescriçãoIntervaloValor padrão
    nlistNúmero de unidades de cluster[1, 65536]128
    cache_dataset_on_deviceDecide 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 poupar memória da GPU.
    "true" "flase""false"
  • Parâmetros de pesquisa

    • Pesquisa comum

      ParâmetroDescriçãoIntervaloValor por defeito
      nprobeNúmero de unidades a consultar[1, nlist]8
  • Limites da pesquisa

    ParâmetroIntervalo
    top-K<= 2048

GPU_IVF_PQ

PQ (Quantização de produto) decompõe uniformemente o espaço vetorial de alta dimensão original em produtos cartesianos de m espaços vetoriais de baixa dimensão e, em seguida, quantifica os espaços vetoriais de baixa dimensão decompostos. Em vez de calcular as distâncias entre o vetor-alvo e o centro de todas as unidades, a quantização do produto permite o cálculo das distâncias entre o vetor-alvo e o centro de agrupamento de cada espaço de baixa dimensão e reduz consideravelmente a complexidade temporal e espacial do algoritmo.

O IVF_PQ executa o agrupamento de índices IVF antes de quantificar o produto de vectores. O seu ficheiro de índice é ainda mais pequeno do que o IVF_SQ8, mas também causa uma perda de precisão durante a pesquisa de vectores.

Os parâmetros de construção do índice e os parâmetros de pesquisa variam consoante a distribuição Milvus. Selecione primeiro a sua distribuição Milvus.

Ao efetuar pesquisas, note que pode definir o top-K até 8192 para qualquer pesquisa numa coleção indexada por GPU_IVF_FLAT.

  • Parâmetros de construção de índices

    ParâmetroDescriçãoIntervaloValor padrão
    nlistNúmero de unidades de cluster[1, 65536]128
    mNúmero de factores de quantização do produto,dim mod m or = 00
    nbits[Opcional] Número de bits em que cada vetor de baixa dimensão é armazenado.[1, 16]8
    cache_dataset_on_deviceDecide 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 ao refinar os resultados da pesquisa.
    “false” Não coloca em cache o conjunto de dados original para poupar memória da GPU.
    "true" "false""false"
  • Parâmetros de pesquisa

    • Pesquisa comum

      ParâmetroDescriçãoIntervaloValor por defeito
      nprobeNúmero de unidades a consultar[1, nlist]8
  • Limites da pesquisa

    ParâmetroLimite
    top-K<= 1024

GPU_BRUTE_FORCE

O GPU_BRUTE_FORCE foi concebido para casos em que é crucial uma recuperação extremamente elevada, garantindo uma recuperação de 1 ao comparar cada consulta com todos os vectores do conjunto de dados. Requer apenas o tipo de métrica (metric_type) e top-k (limit) como parâmetros de construção e pesquisa de índices.

Para GPU_BRUTE_FORCE, não são necessários parâmetros adicionais de construção de índices ou de pesquisa.

Conclusão

Atualmente, o Milvus carrega todos os índices para a memória GPU para operações de pesquisa eficientes. A quantidade de dados que pode ser carregada depende do tamanho da memória do GPU:

  • GPU_CAGRA: A utilização da memória é aproximadamente 1,8 vezes superior à dos dados vectoriais originais.
  • GPU_IVF_FLAT e GPU_BRUTE_FORCE: Requer memória igual ao tamanho dos dados originais.
  • GPU_IVF_PQ: Utiliza um espaço de memória menor, que depende das configurações dos parâmetros de compactação.

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?