• Informazioni su Milvus
  • Iniziare
  • Concetti
  • Guida per l'utente
  • Importazione dei dati
  • Strumenti AI
  • Guida all'amministrazione
  • Strumenti
  • Integrazioni
  • Tutorial
  • Domande frequenti
  • API Reference

GPU_IVF_PQ

L'indice GPU_IVF_PQ si basa sul concetto di IVF_PQ combinando il clustering inverso dei file con la quantizzazione del prodotto (PQ), che scompone i vettori ad alta dimensione in sottospazi più piccoli e li quantizza per ottenere ricerche di similarità efficienti. Progettato esclusivamente per ambienti GPU, GPU_IVF_PQ sfrutta l'elaborazione in parallelo per accelerare i calcoli e gestire efficacemente dati vettoriali su larga scala. Per ulteriori informazioni sui concetti fondamentali, consultare IVF_PQ.

Creare un indice

Per costruire un indice GPU_IVF_PQ su un campo vettoriale in Milvus, usare il metodo add_index(), specificando i parametri index_type, metric_type e altri parametri aggiuntivi per l'indice.

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
)

In questa configurazione:

  • index_type: Il tipo di indice da costruire. In questo esempio, impostare il valore su GPU_IVF_PQ.

  • metric_type: Il metodo utilizzato per calcolare la distanza tra i vettori. I valori supportati sono COSINE, L2 e IP. Per maggiori dettagli, consultare Tipi di metriche.

  • params: Opzioni di configurazione aggiuntive per la creazione dell'indice.

    • m: Numero di sottovettori in cui dividere il vettore.

    Per conoscere i parametri di costruzione disponibili per l'indice GPU_IVF_PQ, fare riferimento a Parametri di costruzione dell'indice.

Una volta configurati i parametri dell'indice, è possibile creare l'indice utilizzando direttamente il metodo create_index() o passando i parametri dell'indice nel metodo create_collection. Per i dettagli, fare riferimento a Creare una raccolta.

Ricerca nell'indice

Una volta costruito l'indice e inserite le entità, è possibile eseguire ricerche di similarità sull'indice.

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
)

In questa configurazione:

  • params: Opzioni di configurazione aggiuntive per la ricerca sull'indice.

    • nprobe: Numero di cluster da ricercare.

    Per conoscere altri parametri di ricerca disponibili per l'indice GPU_IVF_PQ, fare riferimento a Parametri di ricerca specifici dell'indice.

Parametri dell'indice

Questa sezione fornisce una panoramica dei parametri utilizzati per la creazione di un indice e per l'esecuzione di ricerche sull'indice.

Parametri di costruzione dell'indice

La tabella seguente elenca i parametri che possono essere configurati in params quando si costruisce un indice.

Parametro

Descrizione

Valore Intervallo

Suggerimento per la messa a punto

FIV

nlist

Numero di cluster da creare con l'algoritmo k-means durante la creazione dell'indice.

Tipo: Intero Intervallo: [1, 65536]

Valore predefinito: 128

Valori maggiori di nlist migliorano il richiamo creando cluster più raffinati, ma aumentano il tempo di costruzione dell'indice. Ottimizzare in base alle dimensioni del set di dati e alle risorse disponibili. Nella maggior parte dei casi, si consiglia di impostare un valore compreso in questo intervallo: [32, 4096].

PQ

m

Numero di sottovettori (usati per la quantizzazione) in cui dividere ogni vettore ad alta dimensionalità durante il processo di quantizzazione.

Tipo: Intero Intervallo: [1, 65536]

Valore predefinito: Nessuno

Un valore più alto di m può migliorare l'accuratezza, ma aumenta anche la complessità computazionale e l'utilizzo di memoria. m deve essere un divisore della dimensione del vettore(D) per garantire una corretta decomposizione. Un valore comunemente consigliato è m = D/2.

Nella maggior parte dei casi, si consiglia di impostare un valore compreso in questo intervallo: [D/8, D].

nbits

Il numero di bit utilizzati per rappresentare l'indice del centroide di ciascun sottovettore nella forma compressa. Determina direttamente la dimensione di ciascun codebook. Ogni codebook conterrà centroidi a 2 bit. Ad esempio, se nbits è impostato su 8, ogni sottovettore sarà rappresentato da un indice del centroide a 8 bit. Ciò consente di avere28 (256) possibili centroidi nel codebook per quel sottovettore.

Tipo: Intervallo di valori: [1, 24]

Valore predefinito: 8

Un valore più alto di nbits consente di avere codebook più ampi, che potenzialmente portano a rappresentazioni più accurate dei vettori originali. Tuttavia, significa anche utilizzare più bit per memorizzare ciascun indice, con conseguente minore compressione. Nella maggior parte dei casi, si consiglia di impostare un valore compreso in questo intervallo: [1, 16].

cache_dataset_on_device

Decide se memorizzare nella cache il set di dati originale nella memoria della GPU. Valori possibili:

  • "true": Mette in cache il set di dati originale per migliorare il richiamo affinando i risultati della ricerca.

  • "false": Non memorizza nella cache il set di dati originale per risparmiare memoria della GPU.

Tipo: Stringa Intervallo: ["true", "false"]

Valore predefinito: "false"

L'impostazione di "true" migliora il richiamo raffinando i risultati della ricerca, ma utilizza più memoria della GPU. Impostando "false" si conserva la memoria della GPU.

Parametri di ricerca specifici dell'indice

La tabella seguente elenca i parametri che possono essere configurati in search_params.params durante la ricerca sull'indice.

Parametro

Descrizione

Intervallo di valori

Suggerimento per la messa a punto

FIV

nprobe

Numero di cluster in cui cercare i candidati.

Tipo: Intero Intervallo: [1, nlist]

Valore predefinito: 8

Valori più alti consentono di cercare più cluster, migliorando il richiamo grazie all'espansione dell'ambito di ricerca, ma al costo di una maggiore latenza della query. Impostare nprobe in proporzione a nlist per bilanciare velocità e precisione.

Nella maggior parte dei casi, si consiglia di impostare un valore compreso in questo intervallo: [1, nlist].

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

Questa pagina è stata utile?