milvus-logo
LFAI
Home
  • Concepts

Index GPU

Milvus prend en charge différents types d'index GPU pour accélérer les performances et l'efficacité de la recherche, en particulier dans les scénarios à haut débit et à rappel élevé. Cette rubrique présente une vue d'ensemble des types d'index GPU pris en charge par Milvus, leurs cas d'utilisation appropriés et leurs caractéristiques de performance. Pour plus d'informations sur la construction d'index avec le GPU, voir Index avec le GPU.

Il est important de noter que l'utilisation d'un index GPU ne réduit pas nécessairement la latence par rapport à l'utilisation d'un index CPU. Si vous voulez maximiser le débit, vous devez avoir une pression de requête extrêmement élevée ou un grand nombre de vecteurs de requête.

performance Performances

La prise en charge GPU de Milvus est assurée par l'équipe Nvidia RAPIDS. Les types d'index GPU actuellement pris en charge par Milvus sont les suivants.

GPU_CAGRA

GPU_CAGRA est un index basé sur les graphes optimisé pour les GPU. L'utilisation de GPU de niveau inférence pour exécuter la version GPU de Milvus peut être plus rentable que l'utilisation de GPU de niveau formation coûteux.

  • Paramètres de construction de l'index

    ParamètreDescriptionValeur par défaut
    intermediate_graph_degreeAffecte le rappel et le temps de construction en déterminant le degré du graphe avant l'élagage. Les valeurs recommandées sont 32 ou 64.128
    graph_degreeAffecte les performances de recherche et le rappel en déterminant le degré du graphe après l'élagage. Une plus grande différence entre ces deux degrés se traduit par un temps de construction plus long. Sa valeur doit être inférieure à la valeur de intermediate_graph_degree.64
    build_algoSélectionne l'algorithme de génération de graphe avant l'élagage. Valeurs possibles :
    IVF_PQ: Offre une meilleure qualité mais un temps de construction plus lent.
    NN_DESCENT Valeur possible : : Offre une construction plus rapide mais un rappel potentiellement plus faible.
    IVF_PQ
    cache_dataset_on_deviceDécide si le jeu de données original doit être mis en cache dans la mémoire du GPU. Valeurs possibles :
    “true”: Met en cache l'ensemble de données d'origine pour améliorer le rappel en affinant les résultats de la recherche.
    “false” Valeurs possibles : : Ne met pas en cache le jeu de données original afin d'économiser la mémoire du GPU.
    “false”
  • Paramètres de recherche

    ParamètreDescription de la rechercheValeur par défaut
    itopk_sizeDétermine la taille des résultats intermédiaires conservés pendant la recherche. Une valeur plus élevée peut améliorer le rappel au détriment des performances de la recherche. Elle doit être au moins égale à la valeur finale du top-k (limite) et est généralement une puissance de 2 (par exemple, 16, 32, 64, 128).Vide
    search_widthSpécifie le nombre de points d'entrée dans le graphe CAGRA pendant la recherche. L'augmentation de cette valeur peut améliorer le rappel mais peut avoir un impact sur les performances de la recherche(e.g. 1, 2, 4, 8, 16, 32).Vide
    min_iterations / max_iterationsContrôle le processus d'itération de la recherche. Par défaut, ces valeurs sont fixées à 0, et le CAGRA détermine automatiquement le nombre d'itérations sur la base de itopk_size et search_width. L'ajustement manuel de ces valeurs peut aider à équilibrer les performances et la précision.0
    team_sizeSpécifie le nombre de threads CUDA utilisés pour calculer la distance métrique sur le GPU. Les valeurs courantes sont une puissance de 2 jusqu'à 32 (par exemple, 2, 4, 8, 16, 32). Cette valeur a un impact mineur sur les performances de la recherche. La valeur par défaut est 0, Milvus sélectionnant automatiquement le site team_size en fonction de la dimension du vecteur.0
  • Limites de la recherche

    ParamètreFourchette
    limit (top-K)<= 1024
    limit (top-K)<=max((itopk_size + 31)// 32, search_width) * 32

GPU_IVF_FLAT

Comme IVF_FLAT, GPU_IVF_FLAT divise également les données vectorielles en nlist unités de cluster, puis compare les distances entre le vecteur d'entrée cible et le centre de chaque cluster. En fonction du nombre de grappes que le système est configuré pour interroger (nprobe), les résultats de la recherche de similarité sont renvoyés sur la base de comparaisons entre l'entrée cible et les vecteurs dans la ou les grappes les plus similaires uniquement - ce qui réduit considérablement le temps de recherche.

En ajustant nprobe, un équilibre idéal entre la précision et la vitesse peut être trouvé pour un scénario donné. Les résultats du test de performance IVF_FLAT montrent que le temps d'interrogation augmente fortement à mesure que le nombre de vecteurs d'entrée cibles (nq) et le nombre de grappes à rechercher (nprobe) augmentent.

GPU_IVF_FLAT est l'index IVF le plus basique, et les données encodées stockées dans chaque unité sont cohérentes avec les données originales.

Lorsque vous effectuez des recherches, notez que vous pouvez définir le top-K jusqu'à 256 pour toute recherche sur une collection indexée par GPU_IVF_FLAT.

  • Paramètres de construction de l'index

    ParamètreDescription de l'indexPlage de valeursValeur par défaut
    nlistNombre d'unités de cluster[1, 65536]128
    cache_dataset_on_deviceDécide s'il faut mettre en cache le jeu de données original dans la mémoire du GPU. Valeurs possibles :
    “true”: Met en cache l'ensemble de données d'origine pour améliorer la mémorisation en affinant les résultats de la recherche.
    “false” Valeurs possibles : : Ne met pas en cache le jeu de données original afin d'économiser la mémoire du GPU.
    "true" "flase""false"
  • Paramètres de recherche

    • Recherche commune

      ParamètreDescription de la recherchePlage de valeursValeur par défaut
      nprobeNombre d'unités à interroger[1, nlist]8
  • Limites de la recherche

    ParamètrePlage de valeurs
    limit (top-K)<= 2048

GPU_IVF_PQ

PQ (Quantification par produit) décompose uniformément l'espace vectoriel haute dimension original en produits cartésiens d'espaces vectoriels basse dimension m, puis quantifie les espaces vectoriels basse dimension décomposés. Au lieu de calculer les distances entre le vecteur cible et le centre de toutes les unités, la quantification par produit permet de calculer les distances entre le vecteur cible et le centre de regroupement de chaque espace de faible dimension, ce qui réduit considérablement la complexité temporelle et spatiale de l'algorithme.

IVF_PQ effectue le regroupement de l'index IVF avant de quantifier le produit des vecteurs. Son fichier d'index est encore plus petit que IVF_SQ8, mais il entraîne également une perte de précision lors de la recherche de vecteurs.

Les paramètres de construction de l'index et les paramètres de recherche varient en fonction de la distribution Milvus. Sélectionnez d'abord votre distribution Milvus.

Lorsque vous effectuez des recherches, notez que vous pouvez définir le top-K jusqu'à 8192 pour toute recherche sur une collection indexée GPU_IVF_FLAT.

  • Paramètres de construction de l'index

    ParamètreDescriptionPlage de valeursValeur par défaut
    nlistNombre d'unités de cluster[1, 65536]128
    mNombre de facteurs de quantification du produit,dim mod m or = 00
    nbits[Nombre de bits dans lesquels chaque vecteur de faible dimension est stocké.[1, 16]8
    cache_dataset_on_deviceDécide si le jeu de données original doit être mis en cache dans la mémoire du GPU. Valeurs possibles :
    “true”: Met en cache l'ensemble de données d'origine pour améliorer le rappel en affinant les résultats de la recherche.
    “false” Valeurs possibles : : Ne met pas en cache le jeu de données original afin d'économiser la mémoire du GPU.
    "true" "false""false"
  • Paramètres de recherche

    • Recherche commune

      ParamètreDescription de la recherchePlage de valeursValeur par défaut
      nprobeNombre d'unités à interroger[1, nlist]8
  • Limites de la recherche

    ParamètrePlage de valeurs
    limit (top-K)<= 1024

GPU_BRUTE_FORCE

GPU_BRUTE_FORCE est conçu pour les cas où un rappel extrêmement élevé est crucial, garantissant un rappel de 1 en comparant chaque requête avec tous les vecteurs de l'ensemble de données. Il ne nécessite que le type de métrique (metric_type) et le top-k (limit) comme paramètres de construction d'index et de recherche.

Pour GPU_BRUTE_FORCE, aucun paramètre supplémentaire de construction d'index ou de recherche n'est nécessaire.

Conclusion

Actuellement, Milvus charge tous les index dans la mémoire du GPU pour des opérations de recherche efficaces. La quantité de données pouvant être chargées dépend de la taille de la mémoire du GPU :

  • GPU_CAGRA: L'utilisation de la mémoire est environ 1,8 fois celle des données vectorielles d'origine.
  • GPU_IVF_FLAT et GPU_BRUTE_FORCE: Nécessite une mémoire égale à la taille des données d'origine.
  • GPU_IVF_PQ: Utilise une empreinte mémoire plus petite, qui dépend de la configuration des paramètres de compression.

Traduit parDeepL

Try Managed Milvus for Free

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

Get Started
Feedback

Cette page a-t - elle été utile ?