• 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_CAGRA

L'indice GPU_CAGRA è un indice a grafo ottimizzato per le GPU. L'uso di GPU di tipo inferenziale per eseguire la versione GPU di Milvus può essere più conveniente rispetto all'uso di costose GPU di tipo addestrativo.

Creare l'indice

Per costruire un indice GPU_CAGRA su un campo vettoriale in Milvus, utilizzare 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_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
)

In questa configurazione:

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

  • metric_type: Il metodo utilizzato per calcolare la distanza tra i vettori. Per i dettagli, fare riferimento a Tipi metrici.

  • params: Opzioni di configurazione aggiuntive per la costruzione dell'indice. Per conoscere i parametri di costruzione disponibili per l'indice GPU_CAGRA, 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": {
        "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
)

In questa configurazione:

Abilitazione della ricerca della CPU al momento del caricamentoCompatible with Milvus 2.6.4+

Per abilitare la ricerca della CPU dinamicamente al momento del caricamento, modificare la seguente configurazione in milvus.yaml:

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

Comportamento

  • Quando load.adapt_for_cpu è impostato su true, Milvus converte l'indice GPU_CAGRA in un formato eseguibile dalla CPU (simile a HNSW) durante il caricamento.

  • Le operazioni di ricerca successive vengono eseguite sulla CPU, anche se l'indice è stato originariamente creato per la GPU.

  • Se omesso o falso, l'indice rimane su GPU e le ricerche vengono eseguite su GPU.

Utilizzare l'adattamento alla CPU durante il caricamento in ambienti ibridi o sensibili ai costi, in cui le risorse della GPU sono riservate alla creazione dell'indice ma le ricerche vengono eseguite sulla CPU.

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 durante la creazione di un indice.

Parametro

Descrizione

Valore predefinito

intermediate_graph_degree

Influenza il richiamo e il tempo di costruzione determinando il grado del grafo prima della potatura. I valori consigliati sono 32 o 64.

128

graph_degree

Influisce sulle prestazioni della ricerca e sul richiamo impostando il grado del grafo dopo la potatura. Una differenza maggiore tra questi due gradi comporta un tempo di costruzione più lungo. Il suo valore deve essere inferiore al valore di intermediate_graph_degree.

64

build_algo

Seleziona l'algoritmo di generazione del grafo prima della potatura. Valori possibili:

  • IVF_PQ: Offre una qualità superiore ma un tempo di costruzione più lento.

  • NN_DESCENT: Offre una creazione più rapida con un richiamo potenzialmente inferiore.

IVF_PQ

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.

"false"

adapt_for_cpu

Decide se utilizzare la GPU per la creazione degli indici e la CPU per la ricerca.

L'impostazione di questo parametro su "true" richiede la presenza del parametro ef nelle richieste di ricerca.

"false"

Parametri di ricerca specifici per gli indici

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

Parametro

Descrizione

Valore predefinito

itopk_size

Determina la dimensione dei risultati intermedi conservati durante la ricerca. Un valore maggiore può migliorare il richiamo a scapito delle prestazioni della ricerca. Dovrebbe essere almeno uguale al valore finale top-k (limite) e di solito è una potenza di 2 (ad esempio, 16, 32, 64, 128).

Vuoto

search_width

Specifica il numero di punti di ingresso nel grafo CAGRA durante la ricerca. L'aumento di questo valore può migliorare il richiamo, ma può influire sulle prestazioni della ricerca (es. 1, 2, 4, 8, 16, 32).

Vuoto

min_iterations / max_iterations

Controlla il processo di iterazione della ricerca. Per impostazione predefinita, sono impostati su 0, e CAGRA determina automaticamente il numero di iterazioni in base a itopk_size e search_width. La regolazione manuale di questi valori può aiutare a bilanciare prestazioni e precisione.

0

team_size

Specifica il numero di thread CUDA utilizzati per il calcolo della distanza metrica sulla GPU. I valori più comuni sono una potenza di 2 fino a 32 (ad esempio, 2, 4, 8, 16, 32). Ha un impatto minimo sulle prestazioni della ricerca. Il valore predefinito è 0, dove Milvus seleziona automaticamente team_size in base alla dimensione del vettore.

0

ef

Specifica il compromesso tempo di interrogazione/accuratezza. Un valore più alto di ef porta a una ricerca più accurata ma più lenta.

Questo parametro è obbligatorio se si imposta adapt_for_cpu su true quando si costruisce l'indice.

[top_k, int_max]