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 valeur GPU_IVF_PQ.

  • metric_type: La méthode utilisée pour calculer la distance entre les vecteurs. Les valeurs prises en charge sont COSINE, L2 et IP. 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

nlist

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: 128

Les valeurs plus élevées de nlist améliorent le rappel en créant des grappes plus fines, mais augmentent le temps de construction de l'index. Dans la plupart des cas, nous vous recommandons de définir une valeur comprise dans cette plage : [32, 4096].

PQ

m

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 m peut améliorer la précision, mais elle augmente également la complexité du calcul et l'utilisation de la mémoire. m doit être un diviseur de la dimension du vecteur(D) pour garantir une décomposition correcte. Une valeur couramment recommandée est m = D/2.

Dans la plupart des cas, nous vous recommandons de choisir une valeur comprise dans cet intervalle : [D/8, D].

nbits

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 nbits est fixé à 8, chaque sous-vecteur sera représenté par un indice de centroïde de 8 bits. Cela permet d'avoir28 (256) centroïdes possibles dans le livre de codes pour ce sous-vecteur.

Type: Entier Plage: [1, 24]

Valeur par défaut: 8

Une valeur plus élevée de nbits permet d'obtenir des livres de codes plus importants, ce qui peut conduire à des représentations plus précises des vecteurs d'origine. Dans la plupart des cas, nous vous recommandons de choisir une valeur comprise dans cette fourchette : [1, 16].

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 d'origine pour améliorer la mémorisation en affinant les résultats de la recherche.

  • "false": Ne met pas en cache le jeu de données original pour économiser la mémoire du GPU.

Type: Chaîne Plage: ["true", "false"]

Valeur par défaut: "false"

La valeur "true" améliore la mémorisation en affinant les résultats de la recherche, mais utilise davantage de mémoire GPU. La valeur "false" permet d'économiser la mémoire du GPU.

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

nprobe

Le nombre de grappes à rechercher pour les candidats.

Type: Entier Plage: [1, nlist]

Valeur par défaut: 8

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 nprobe proportionnellement à nlist afin d'équilibrer la vitesse et la précision.

Dans la plupart des cas, nous vous recommandons de définir une valeur comprise dans cette fourchette : [1, nlist].

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 ?