• 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

Visão geral do índice GPU

A criação de um índice com suporte de GPU no Milvus pode melhorar significativamente o desempenho da pesquisa em cenários de alta taxa de transferência e alta recuperação.

A figura a seguir compara a taxa de transferência de consultas (consultas por segundo) entre configurações de índice, configurações de hardware, conjuntos de dados vetoriais (Cohere e OpenAI) e tamanhos de lote de pesquisa, mostrando que GPU_CAGRA supera consistentemente outros métodos.

Gpu Index Performance Desempenho do índice de GPU

Configurar pool de memória GPU para Milvus

O Milvus suporta um pool de memória GPU global e fornece dois parâmetros de configuração, initMemSize e maxMemSize, no arquivo de configuração do Milvus.

gpu:
  initMemSize: 0 # set the initial memory pool size.
  maxMemSize: 0 # sets the maximum memory usage limit. When the memory usage exceeds initMemSize, Milvus will attempt to expand the memory pool.

O padrão initMemSize é geralmente metade da memória da GPU quando o Milvus é iniciado, e maxMemSize é o padrão para toda a memória da GPU. O tamanho do pool de memória da GPU é inicialmente definido como initMemSize e será automaticamente expandido para maxMemSize conforme necessário.

Quando um índice habilitado para GPU é especificado, o Milvus carrega os dados da coleção de destino na memória da GPU antes das pesquisas, então maxMemSize deve ser pelo menos o tamanho dos dados.

Limites

  • Para GPU_IVF_FLAT, o valor máximo para limit é 1.024.

  • Para GPU_IVF_PQ e GPU_CAGRA, o valor máximo para limit é 1.024.

  • Embora não exista um valor definido para limit para GPU_BRUTE_FORCE, recomenda-se que não exceda 4.096 para evitar potenciais problemas de desempenho.

  • Atualmente, os índices GPU não suportam a distância COSINE. Se a distância COSINE for necessária, os dados devem ser normalizados primeiro e, em seguida, a distância do produto interno (IP) pode ser usada como um substituto.

  • A proteção OOM de carregamento para índices GPU não é totalmente suportada, demasiados dados podem levar a falhas no QueryNode.

  • Os índices GPU não suportam funções de pesquisa como pesquisa de intervalo e pesquisa de agrupamento.

Tipos de índices GPU suportados

A tabela seguinte lista os tipos de índices GPU suportados pelo Milvus.

Tipo de índice

Descrição

Utilização de memória

GPU_CAGRA

GPU_CAGRA é um índice baseado em gráficos 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.

A utilização da memória é aproximadamente 1,8 vezes superior à dos dados vectoriais originais.

GPU_IVF_FLAT

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 (limit) até 256 para qualquer pesquisa em uma coleção indexada por GPU_IVF_FLAT.

Requer memória igual ao tamanho dos dados originais.

GPU_IVF_PQ

GPU_IVF_PQ executa o agrupamento de índices IVF antes de quantizar o produto de vetores. Ao realizar pesquisas, observe que é possível definir o top-k (limit) até 8.192 para qualquer pesquisa em uma coleção indexada por GPU_IVF_FLAT.

Utiliza um espaço de memória menor, que depende das configurações dos parâmetros de compressão.

GPU_BRUTE_FORCE

O GPU_BRUTE_FORCE é adaptado para casos em que é crucial uma recuperação extremamente elevada, garantindo uma recuperação de 1 ao comparar cada consulta com todos os vectores no 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.

Requer memória igual ao tamanho dos dados originais.

Configurar as definições do Milvus para controlo da memória da GPU

O Milvus usa um pool de memória gráfica global para alocar a memória da GPU. Ele suporta dois parâmetros initMemSize e maxMemSize no arquivo de configuração do Milvus. O tamanho do pool é inicialmente definido como initMemSize, e será automaticamente expandido para maxMemSize após exceder este limite.

O padrão initMemSize é 1/2 da memória da GPU disponível quando o Milvus inicia, e o padrão maxMemSize é igual a toda a memória da GPU disponível.

Até o Milvus 2.4.1, o Milvus usa um pool de memória GPU unificado. Para versões anteriores à 2.4.1, era recomendado definir ambos os valores como 0.

gpu:
  initMemSize: 0 #set the initial memory pool size.
  maxMemSize: 0 #maxMemSize sets the maximum memory usage limit. When the memory usage exceed initMemSize, Milvus will attempt to expand the memory pool. 

Do Milvus 2.4.1 em diante, o pool de memória da GPU é usado apenas para dados temporários da GPU durante as pesquisas. Portanto, é recomendável defini-lo como 2048 e 4096.

gpu:
  initMemSize: 2048 #set the initial memory pool size.
  maxMemSize: 4096 #maxMemSize sets the maximum memory usage limit. When the memory usage exceed initMemSize, Milvus will attempt to expand the memory pool. 

Para saber como construir um índice GPU, consulte o guia específico para cada tipo de índice.

PERGUNTAS FREQUENTES

  • Quando é apropriado utilizar um índice de GPU?

    Um índice de GPU é particularmente benéfico em situações que exigem alta taxa de transferência ou alta recuperação. Por exemplo, ao lidar com grandes lotes, a taxa de transferência da indexação GPU pode superar a da indexação CPU em até 100 vezes. Em cenários com lotes menores, os índices de GPU ainda superam significativamente os índices de CPU em termos de desempenho. Além disso, se houver um requisito de inserção rápida de dados, a incorporação de uma GPU pode acelerar substancialmente o processo de criação de índices.

  • Em que cenários são mais adequados os índices GPU como GPU_CAGRA, GPU_IVF_PQ, GPU_IVF_FLAT e GPU_BRUTE_FORCE?

    GPU_CAGRA Os índices GPU são ideais para cenários que exigem um desempenho melhorado, embora à custa do consumo de mais memória. Para ambientes em que a conservação da memória é uma prioridade, o índice GPU_IVF_PQ pode ajudar a minimizar os requisitos de armazenamento, embora isso implique uma maior perda de precisão. O índice GPU_IVF_FLAT serve como uma opção equilibrada, oferecendo um compromisso entre desempenho e utilização de memória. Por último, o índice GPU_BRUTE_FORCE foi concebido para operações de pesquisa exaustiva, garantindo uma taxa de recuperação de 1 ao efetuar pesquisas transversais.

Try Managed Milvus for Free

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

Get Started
Feedback

Esta página foi útil?