GPU_CAGRA

L'index GPU_CAGRA est un index basé sur des graphes et optimisé pour les GPU. L'utilisation de GPU de type « inférence » pour exécuter la version GPU de Milvus peut s'avérer plus rentable que l'utilisation de GPU de type « entraînement », plus coûteux.

Créer un index

Pour créer un index « GPU_CAGRA » sur un champ vectoriel dans Milvus, utilisez la méthode ` add_index() ` en spécifiant les paramètres ` index_type`, ` metric_type` et les paramètres supplémentaires de 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 à créer. Dans cet exemple, définissez la valeur sur ` GPU_CAGRA`.

  • metric_type: Méthode utilisée pour calculer la distance entre les vecteurs. Pour plus de détails, consultez la section Types de métriques.

  • params: Options de configuration supplémentaires pour la création de l’index. Pour en savoir plus sur les paramètres de création disponibles pour l’index « GPU_CAGRA », consultez la section « Paramètres de création d’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 transmettant les paramètres de l'index à la méthode ` create_collection `. Pour plus de détails, consultez la section Créer une collection.

Recherche dans l’index

Une fois l’index créé 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 :

  • params: Options de configuration supplémentaires pour la recherche sur l’index. Pour en savoir plus sur les paramètres de recherche disponibles pour l’index « GPU_CAGRA », consultez la section « Paramètres de recherche spécifiques à l’index ».

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

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

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

Comportement

  • Lorsque l’option « load.adapt_for_cpu » est définie sur « true », Milvus convertit l’index GPU_CAGRA en un format exécutable sur CPU (de type HNSW) lors du chargement.

  • Les opérations de recherche suivantes sont exécutées sur le CPU, même si l’index a été initialement construit pour le GPU.

  • Si cette option est omise ou définie sur « false », l’index reste sur le GPU et les recherches s’exécutent sur le GPU.

Utilisez l’adaptation au CPU au moment du chargement dans des environnements hybrides ou sensibles aux coûts, où les ressources du GPU sont réservées à la création d’index mais où les recherches s’exécutent sur le CPU.

Paramètres d’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 celui-ci.

Paramètres de création d’index

Le tableau suivant répertorie les paramètres pouvant être configurés dans params lors de la création d’un index.

Paramètre

Description

Valeur par défaut

intermediate_graph_degree

Influence le rappel et le temps de création en déterminant le degré du graphe avant l'élagage. Les valeurs recommandées sont 32 ou 64.

128

graph_degree

Influence les performances de recherche et le taux de rappel en définissant le degré du graphe après élagage. Une différence importante entre ces deux degrés entraîne un temps de création plus long. Sa valeur doit être inférieure à celle de intermediate_graph_degree.

64

build_algo

Sélectionne l’algorithme de génération du graphe avant l’élagage. Valeurs possibles :

  • IVF_PQ: Offre une meilleure qualité mais un temps de construction plus long.

  • NN_DESCENT: Permet une construction plus rapide, mais avec un rappel potentiellement plus faible.

IVF_PQ

cache_dataset_on_device

Détermine s’il faut mettre en cache l’ensemble de données d’origine dans la mémoire du GPU. Valeurs possibles :

  • "true": Met en cache le jeu de données d'origine pour améliorer le rappel en affinant les résultats de recherche.

  • "false": Ne met pas en cache le jeu de données d'origine afin d'économiser de la mémoire GPU.

"false"

adapt_for_cpu

Détermine s’il faut utiliser le GPU pour la création d’index et le CPU pour la recherche.

La configuration de ce paramètre sur « "true" » 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 pouvant être configurés dans « search_params.params » lors d’une recherche sur l’index.

Paramètre

Description

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 le taux de rappel au détriment des performances de recherche. Elle doit être au moins égale à la valeur finale « top-k » (limite) et correspond 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. Augmenter cette valeur peut améliorer le rappel mais peut avoir un impact sur les performances de recherche (par exemple : 1, 2, 4, 8, 16, 32).

Vide

num_random_samplings

Contrôle l’ampleur de l’échantillonnage aléatoire effectué par CAGRA lors du choix des points d’entrée initiaux pour la recherche dans le graphe. Une valeur plus élevée donne à CAGRA davantage de chances de partir de meilleurs points, ce qui améliore le rappel au prix d’une latence de recherche accrue. La valeur doit être au moins égale à 1. Disponible dans Milvus 2.6.20 et versions ultérieures.

1

min_iterations / max_iterations

Contrôle le processus d’itération de la recherche. Par défaut, ces paramètres sont définis sur 0, et CAGRA détermine automatiquement le nombre d’itérations en fonction de itopk_size et search_width. Le réglage manuel de ces valeurs peut aider à trouver un équilibre entre performances et 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 des puissances de 2 allant jusqu’à 32 (par exemple 2, 4, 8, 16, 32). Cela a un impact mineur sur les performances de recherche. La valeur par défaut est 0, Milvus sélectionnant automatiquement l’ team_size en fonction de la dimension du vecteur.

0

ef

Définit le compromis entre temps de requête et précision. Une valeur plus élevée de « ef » conduit à une recherche plus précise mais plus lente.

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

[top_k, int_max]

Traduit parDeepL

Essayez Milvus géré gratuitement

Zilliz Cloud est sans souci, propulsé par Milvus et 10 fois plus rapide.

Commencer
Feedback

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