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 suGPU_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'indiceGPU_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:
params: Opzioni di configurazione aggiuntive per la ricerca sull'indice. Per conoscere i parametri di ricerca disponibili per l'indiceGPU_CAGRA, fare riferimento a Parametri di ricerca specifici per l'indice.
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 sutrue, 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 |
|---|---|---|
|
Influenza il richiamo e il tempo di costruzione determinando il grado del grafo prima della potatura. I valori consigliati sono |
|
|
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 |
|
|
Seleziona l'algoritmo di generazione del grafo prima della potatura. Valori possibili:
|
|
|
Decide se memorizzare nella cache il set di dati originale nella memoria della GPU. Valori possibili:
|
|
|
Decide se utilizzare la GPU per la creazione degli indici e la CPU per la ricerca. L'impostazione di questo parametro su |
|
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 |
|---|---|---|
|
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 |
|
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 |
|
Controlla il processo di iterazione della ricerca. Per impostazione predefinita, sono impostati su |
|
|
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 è |
|
|
Specifica il compromesso tempo di interrogazione/accuratezza. Un valore più alto di Questo parametro è obbligatorio se si imposta |
|