Í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.
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âmetro Descrição Valor predefinido intermediate_graph_degree
Afecta 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
ou64
.128
graph_degree
Afeta 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_algo
Seleciona 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_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 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â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 à 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_width
Especifica 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_iterations
Controla 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 emitopk_size
esearch_width
. O ajuste manual desses valores pode ajudar a equilibrar o desempenho e a precisão.0
team_size
Especifica 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 oteam_size
com base na dimensão do vetor.0
Limites da pesquisa
Parâmetro Limite limit
(top-K)<= 1024 limit
(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 vetoriais em nlist
unidades de cluster e, em seguida, compara as distâncias entre o vetor de entrada de destino 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âmetro Descrição Intervalo Valor padrão nlist
Número de unidades de cluster [1, 65536] 128
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 poupar memória da GPU."true"
"flase"
"false"
Parâmetros de pesquisa
Pesquisa comum
Parâmetro Descrição Intervalo Valor por defeito nprobe
Número de unidades a consultar [1, nlist] 8
Limites da pesquisa
Parâmetro Intervalo limit
(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 efectua 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âmetro Descrição Intervalo Valor padrão nlist
Número de unidades de cluster [1, 65536] 128
m
Número de factores de quantização do produto, dim mod m or = 0
0
nbits
[Opcional] Número de bits em que cada vetor de baixa dimensão é armazenado. [1, 16] 8
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 poupar memória da GPU."true"
"false"
"false"
Parâmetros de pesquisa
Pesquisa comum
Parâmetro Descrição Intervalo Valor por defeito nprobe
Número de unidades a consultar [1, nlist] 8
Limites da pesquisa
Parâmetro Intervalo limit
(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.