GPU_IVF_PQ
L'index GPU_IVF_PQ s'appuie sur le concept IVF_PQ en combinant le clustering de fichiers inversé avec la quantification de produit (PQ), qui décompose les vecteurs à haute dimension en sous-espaces plus petits et les quantifie pour des recherches de similarité efficaces. Conçu exclusivement pour les environnements GPU, GPU_IVF_PQ exploite le traitement parallèle pour accélérer les calculs et traiter efficacement les données vectorielles à grande échelle. Pour plus d'informations sur les concepts fondamentaux, voir IVF_PQ.
Création d'un index
Pour construire un index GPU_IVF_PQ 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_IVF_PQ", # 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={
"m": 4, # Number of sub-vectors to split eahc vector into
} # Index building params
)
Dans cette configuration :
index_type: Le type d'index à construire. Dans cet exemple, définissez la valeurGPU_IVF_PQ.metric_type: La méthode utilisée pour calculer la distance entre les vecteurs. Les valeurs prises en charge sontCOSINE,L2etIP. Pour plus d'informations, reportez-vous à la section Types de métriques.params: Options de configuration supplémentaires pour la construction de l'index.m: Nombre de sous-vecteurs à diviser en vecteurs.
Pour en savoir plus sur les paramètres de construction disponibles pour l'index
GPU_IVF_PQ, reportez-vous à 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": {
"nprobe": 10, # Number of clusters to 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.nprobe: Nombre de clusters à rechercher.
Pour en savoir plus sur les paramètres de recherche disponibles pour l'index
GPU_IVF_PQ, reportez-vous à Paramètres de recherche spécifiques à l'index.
Paramètres de l'index
Cette section présente une vue d'ensemble des paramètres utilisés pour construire un index et effectuer des 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 création d'un index.
Paramètre |
Description de l'index |
Plage de valeurs |
Suggestion de réglage |
|
|---|---|---|---|---|
IVF |
|
Le nombre de grappes à créer à l'aide de l'algorithme k-means pendant la construction de l'index. |
Type: Entier Plage: [1, 65536] Valeur par défaut: |
Les valeurs plus élevées de |
PQ |
|
Le nombre de sous-vecteurs (utilisés pour la quantification) à diviser chaque vecteur à haute dimension pendant le processus de quantification. |
Type: Entier Plage: [1, 65536] Valeur par défaut: Aucune |
Une valeur plus élevée de Dans la plupart des cas, nous vous recommandons de choisir une valeur comprise dans cet intervalle : [D/8, D]. |
|
Le nombre de bits utilisés pour représenter l'indice du centroïde de chaque sous-vecteur sous forme comprimée. Il détermine directement la taille de chaque livre de codes. Chaque livre de codes contiendra des centroïdes de 2nbits. Par exemple, si |
Type: Entier Plage: [1, 24] Valeur par défaut: |
Une valeur plus élevée de |
|
|
Décide si le jeu de données original doit être mis en cache dans la mémoire du GPU. Valeurs possibles :
|
Type: Chaîne Plage: [ Valeur par défaut: |
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 sur l'index.
Paramètre |
Description |
Plage de valeurs |
Suggestion de réglage |
|
|---|---|---|---|---|
IVF |
|
Le nombre de grappes à rechercher pour les candidats. |
Type: Entier Plage: [1, nlist] Valeur par défaut: |
Des valeurs plus élevées permettent de rechercher davantage de grappes, ce qui améliore le rappel en élargissant la portée de la recherche, mais au prix d'une latence accrue de la requête. Définissez Dans la plupart des cas, nous vous recommandons de définir une valeur comprise dans cette fourchette : [1, nlist]. |