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 estGPU_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'indexGPU_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 :
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'indexGPU_CAGRA, reportez-vous à Paramètres de recherche spécifiques à l'index.
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_cpuest défini surtrue, 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 |
|---|---|---|
|
Affecte le rappel et le temps de construction en déterminant le degré du graphe avant l'élagage. Les valeurs recommandées sont |
|
|
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 |
|
|
Sélectionne l'algorithme de génération de graphe avant l'élagage. Valeurs possibles :
|
|
|
Décide si le jeu de données original doit être mis en cache dans la mémoire du GPU. Valeurs possibles :
|
|
|
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 |
|
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 |
|---|---|---|
|
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 |
|
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 |
|
Contrôle le processus d'itération de la recherche. Par défaut, ces valeurs sont fixées à |
|
|
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 |
|
|
Spécifie le compromis temps d'interrogation/précision. Une valeur plus élevée de Ce paramètre est obligatoire si vous avez défini |
|