GPU_CAGRA

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

Création d'un index

Pour construire un index GPU_CAGRA sur un champ de vecteurs dans Milvus, utilisez la méthode add_index(), en spécifiant les paramètres index_type, metric_type et des paramètres supplémentaires pour l'index.

from pymilvus import MilvusClient

# Prepare index building params
index_params = MilvusClient.prepare_index_params()

index_params.add_index(
    field_name="your_vector_field_name", # Name of the vector field to be indexed
    index_type="GPU_CAGRA", # Type of the index to create
    index_name="vector_index", # Name of the index to create
    metric_type="L2", # Metric type used to measure similarity
    params={
        "intermediate_graph_degree": 64, # Affects recall and build time by determining the graph’s degree before pruning
        "graph_degree": 32, # Affets search performance and recall by setting the graph’s degree after pruning
        "build_algo": "IVF_PQ", # Selects the graph generation algorithm before pruning
        "cache_dataset_on_device": "true", # Decides whether to cache the original dataset in GPU memory
        "adapt_for_cpu": "false", # Decides whether to use GPU for index-building and CPU for search
    } # Index building params
)

Dans cette configuration :

  • index_type: Le type d'index à construire. Dans cet exemple, la valeur est GPU_CAGRA.

  • metric_type: La méthode utilisée pour calculer la distance entre les vecteurs. Pour plus de détails, reportez-vous à la section Types de métriques.

  • params: Options de configuration supplémentaires pour la construction de l'index. Pour en savoir plus sur les paramètres de construction disponibles pour l'index GPU_CAGRA, reportez-vous à la section Paramètres de construction de l'index.

Une fois les paramètres de l'index configurés, vous pouvez créer l'index en utilisant directement la méthode create_index() ou en passant les paramètres de l'index dans la méthode create_collection. Pour plus d'informations, reportez-vous à la section Créer une collection.

Recherche sur l'index

Une fois l'index construit et les entités insérées, vous pouvez effectuer des recherches de similarité sur l'index.

search_params = {
    "params": {
        "itopk_size": 16, # Determines the size of intermediate results kept during the search
        "search_width": 8, # Specifies the number of entry points into the CAGRA graph during the search
    }
}

res = MilvusClient.search(
    collection_name="your_collection_name", # Collection name
    anns_field="vector_field", # Vector field name
    data=[[0.1, 0.2, 0.3, 0.4, 0.5]],  # Query vector
    limit=3,  # TopK results to return
    search_params=search_params
)

Dans cette configuration :

Activer la recherche CPU au moment du chargementCompatible with Milvus 2.6.4+

Pour activer la recherche CPU dynamiquement au moment du chargement, modifiez la configuration suivante dans milvus.yaml:

# milvus.yaml
knowhere:
  GPU_CAGRA:
    load: 
      adapt_for_cpu: true

Comportement

  • Lorsque load.adapt_for_cpu est défini sur true, Milvus convertit l'index GPU_CAGRA dans un format exécutable par l'unité centrale (de type HNSW) pendant le chargement.

  • Les opérations de recherche ultérieures sont exécutées sur le processeur, même si l'index a été conçu à l'origine pour le GPU.

  • S'il est omis ou faux, l'index reste sur le GPU et les recherches sont exécutées sur le GPU.

Utilisez l'adaptation CPU au chargement dans les environnements hybrides ou sensibles aux coûts, où les ressources GPU sont réservées à la construction de l'index, mais où les recherches sont exécutées sur le CPU.

Paramètres de l'index

Cette section présente une vue d'ensemble des paramètres utilisés pour la construction d'un index et l'exécution de recherches sur l'index.

Paramètres de construction d'index

Le tableau suivant répertorie les paramètres qui peuvent être configurés sur params lors de la construction d'un index.

Paramètre

Description des paramètres

Valeur par défaut

intermediate_graph_degree

Affecte 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_degree

Affecte 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 à celle de intermediate_graph_degree.

64

build_algo

Sé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: Offre une construction plus rapide mais un rappel potentiellement plus faible.

IVF_PQ

cache_dataset_on_device

Dé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 original pour améliorer le rappel en affinant les résultats de la recherche.

  • "false": Ne met pas en cache l'ensemble de données d'origine pour économiser la mémoire du GPU.

"false"

adapt_for_cpu

Décide d'utiliser ou non le GPU pour la construction de l'index et le CPU pour la recherche.

L'attribution de la valeur "true" à ce paramètre nécessite la présence du paramètre ef dans les requêtes de recherche.

"false"

Paramètres de recherche spécifiques à l'index

Le tableau suivant répertorie les paramètres qui peuvent être configurés dans search_params.params lors d'une recherche dans l'index.

Paramètre

Description du paramètre

Valeur par défaut

itopk_size

Détermine la taille des résultats intermédiaires conservés pendant la recherche. Une valeur plus élevée peut améliorer la mémorisation 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_width

Spé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_iterations

Contrô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_size

Spé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 team_size en fonction de la dimension du vecteur.

0

ef

Spécifie le compromis temps d'interrogation/précision. Une valeur plus élevée de ef permet une recherche plus précise mais plus lente.

Ce paramètre est obligatoire si vous avez défini adapt_for_cpu sur true lors de la création de l'index.

[top_k, int_max]