Aperçu de l'index GPU

La création d'un index avec prise en charge du GPU dans Milvus peut améliorer de manière significative les performances de recherche dans les scénarios à haut débit et à fort rappel.

La figure suivante compare le débit des requêtes (requêtes par seconde) en fonction des configurations d'index, des configurations matérielles, des ensembles de données vectorielles (Cohere et OpenAI) et de la taille des lots de recherche, montrant que GPU_CAGRA est toujours plus performant que les autres méthodes.

Gpu Index Performance Performances de l'index Gpu

Configuration du pool de mémoire GPU pour Milvus

Milvus prend en charge un pool de mémoire GPU global et fournit deux paramètres de configuration, initMemSize et maxMemSize, dans le fichier de configuration de 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.

La valeur par défaut initMemSize correspond généralement à la moitié de la mémoire du GPU au démarrage de Milvus, et la valeur par défaut maxMemSize correspond à la totalité de la mémoire du GPU. La taille du pool de mémoire GPU est initialement fixée à initMemSize et s'étend automatiquement à maxMemSize si nécessaire.

Lorsqu'un index compatible avec le GPU est spécifié, Milvus charge les données de la collection cible dans la mémoire du GPU avant les recherches, de sorte que maxMemSize doit être au moins égal à la taille des données.

Limites

  • Pour GPU_IVF_FLAT, la valeur maximale pour limit est de 1 024.

  • Pour GPU_IVF_PQ et GPU_CAGRA, la valeur maximale pour limit est de 1 024.

  • GPU_BRUTE_FORCEBien qu'il n'y ait pas de valeur définie pour limit, il est recommandé de ne pas dépasser 4 096 pour éviter les problèmes de performance.

  • Actuellement, les index GPU ne prennent pas en charge la distance COSINE. Si la distance COSINE est requise, les données doivent d'abord être normalisées, puis la distance du produit intérieur (IP) peut être utilisée comme substitut.

  • La protection OOM du chargement pour les index GPU n'est pas entièrement prise en charge, une trop grande quantité de données peut entraîner le blocage du QueryNode.

  • Les index GPU ne prennent pas en charge les fonctions de recherche telles que la recherche par plage et la recherche par groupement.

Types d'index GPU pris en charge

Le tableau suivant répertorie les types d'index GPU pris en charge par Milvus.

Type d'index

Description de l'index

Utilisation de la mémoire

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.

L'utilisation de la mémoire est environ 1,8 fois supérieure à celle des données vectorielles d'origine.

GPU_IVF_FLAT

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 (limit) jusqu'à 256 pour toute recherche sur une collection indexée par GPU_IVF_FLAT.

Nécessite une mémoire égale à la taille des données d'origine.

GPU_IVF_PQ

GPU_IVF_PQ effectue un regroupement d'index IVF avant de quantifier le produit des vecteurs. Lorsque vous effectuez des recherches, notez que vous pouvez définir le top-k (limit) jusqu'à 8 192 pour toute recherche sur une collection indexée par GPU_IVF_FLAT.

Utilise une empreinte mémoire plus petite, qui dépend des paramètres de compression.

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.

Il nécessite une mémoire égale à la taille des données originales.

Configurer les paramètres Milvus pour le contrôle de la mémoire GPU

Milvus utilise un pool de mémoire graphique global pour allouer la mémoire du GPU. Il prend en charge deux paramètres initMemSize et maxMemSize dans le fichier de configuration de Milvus. La taille du pool est initialement fixée à initMemSize et sera automatiquement étendue à maxMemSize si cette limite est dépassée.

La valeur par défaut de initMemSize est égale à la moitié de la mémoire GPU disponible au démarrage de Milvus, et la valeur par défaut de maxMemSize est égale à la totalité de la mémoire GPU disponible.

Jusqu'à la version 2.4.1, Milvus utilise un pool de mémoire GPU unifié. Pour les versions antérieures à 2.4.1, il était recommandé de définir les deux valeurs à 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. 

A partir de Milvus 2.4.1, le pool de mémoire GPU n'est utilisé que pour les données GPU temporaires pendant les recherches. Par conséquent, il est recommandé de le définir à 2048 et 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. 

Pour savoir comment construire un index GPU, reportez-vous au guide spécifique à chaque type d'index.

FAQ

  • Quand est-il approprié d'utiliser un index GPU ?

    Un index GPU est particulièrement utile dans les situations qui exigent un débit élevé ou un rappel important. Par exemple, lorsqu'il s'agit de lots importants, le débit de l'indexation GPU peut être jusqu'à 100 fois supérieur à celui de l'indexation CPU. Dans les scénarios avec des lots plus petits, les index GPU surpassent toujours de manière significative les index CPU en termes de performance. En outre, s'il est nécessaire d'insérer rapidement des données, l'intégration d'un GPU peut accélérer considérablement le processus de construction des index.

  • Dans quels scénarios les index GPU tels que GPU_CAGRA, GPU_IVF_PQ, GPU_IVF_FLAT et GPU_BRUTE_FORCE sont-ils les plus adaptés ?

    GPU_CAGRA Les index GPU_CAGRA sont idéaux pour les scénarios qui exigent des performances accrues, mais au prix d'une plus grande consommation de mémoire. Pour les environnements où la conservation de la mémoire est une priorité, l'index GPU_IVF_PQ peut aider à minimiser les besoins en stockage, bien que cela s'accompagne d'une perte de précision plus importante. L'index GPU_IVF_FLAT constitue une option équilibrée, offrant un compromis entre les performances et l'utilisation de la mémoire. Enfin, l'index GPU_BRUTE_FORCE est conçu pour des opérations de recherche exhaustive, garantissant un taux de rappel de 1 en effectuant des recherches transversales.

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 ?