milvus-logo
LFAI
Casa
  • Concetti

Indice GPU

Milvus supporta diversi tipi di indice GPU per accelerare le prestazioni e l'efficienza della ricerca, soprattutto in scenari ad alto rendimento e ad alto richiamo. Questo argomento fornisce una panoramica dei tipi di indice GPU supportati da Milvus, dei casi d'uso adatti e delle caratteristiche delle prestazioni. Per informazioni sulla creazione di indici con le GPU, consultare la sezione Indici con le GPU.

È importante notare che l'uso di un indice GPU non necessariamente riduce la latenza rispetto all'uso di un indice CPU. Per massimizzare al massimo il throughput, è necessaria una pressione di richiesta estremamente elevata o un numero elevato di vettori di query.

performance prestazioni

Il supporto GPU di Milvus è fornito dal team Nvidia RAPIDS. I tipi di indice GPU attualmente supportati da Milvus sono i seguenti.

GPU_CAGRA

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

  • Parametri di costruzione dell'indice

    ParametroDescrizioneValore predefinito
    intermediate_graph_degreeInfluenza il richiamo e il tempo di costruzione determinando il grado del grafo prima della potatura. I valori consigliati sono 32 o 64.128
    graph_degreeInfluisce 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_algoSeleziona 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 Fornisce una creazione più rapida con un richiamo potenzialmente inferiore.
    IVF_PQ
    cache_dataset_on_deviceDecide 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_cpuDecide se utilizzare la GPU per la creazione dell'indice 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

    ParametroDescrizioneValore predefinito
    itopk_sizeDetermina 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_widthSpecifica 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_iterationsControlla 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_sizeSpecifica 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
    efSpecifica 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]
  • Limiti di ricerca

    ParametroIntervallo
    limit (top-K)<= 1024
    limit (top-K)<=max((itopk_size + 31)// 32, search_width) * 32

GPU_IVF_FLAT

Simile a IVF_FLAT, anche GPU_IVF_FLAT divide i dati vettoriali in unità cluster nlist e poi confronta le distanze tra il vettore di input target e il centro di ciascun cluster. A seconda del numero di cluster che il sistema è impostato per interrogare (nprobe), i risultati della ricerca di similarità vengono restituiti in base al confronto tra l'input di destinazione e i vettori nei soli cluster più simili, riducendo drasticamente i tempi di interrogazione.

Regolando nprobe, è possibile trovare un equilibrio ideale tra precisione e velocità per un determinato scenario. I risultati del test delle prestazioni di IVF_FLAT dimostrano che il tempo di interrogazione aumenta bruscamente all'aumentare del numero di vettori di input target (nq) e del numero di cluster da ricercare (nprobe).

GPU_IVF_FLAT è l'indice IVF più semplice e i dati codificati memorizzati in ogni unità sono coerenti con i dati originali.

Quando si effettuano le ricerche, è possibile impostare il top-K fino a 256 per qualsiasi ricerca su una raccolta indicizzata con GPU_IVF_FLAT.

  • Parametri di costruzione dell'indice

    ParametroDescrizioneIntervalloValore predefinito
    nlistNumero di unità cluster[1, 65536]128
    cache_dataset_on_deviceDecide 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 raffinando i risultati della ricerca.
    “false” Non memorizza nella cache il set di dati originale per risparmiare memoria della GPU.
    "true" "flase""false"
  • Parametri di ricerca

    • Ricerca comune

      ParametroDescrizioneIntervalloValore predefinito
      nprobeNumero di unità da interrogare[1, nlist]8
  • Limiti di ricerca

    ParametroIntervallo
    limit (top-K)<= 2048

GPU_IVF_PQ

PQ (Product Quantization) decompone uniformemente lo spazio vettoriale originale ad alta dimensione in prodotti cartesiani di m spazi vettoriali a bassa dimensione, quindi quantizza gli spazi vettoriali a bassa dimensione decomposti. Invece di calcolare le distanze tra il vettore target e il centro di tutte le unità, la quantizzazione del prodotto consente di calcolare le distanze tra il vettore target e il centro di raggruppamento di ogni spazio a bassa dimensione, riducendo notevolmente la complessità temporale e spaziale dell'algoritmo.

IVF_PQ esegue il clustering dell'indice IVF prima di quantizzare il prodotto dei vettori. Il suo file di indici è ancora più piccolo di IVF_SQ8, ma comporta una perdita di precisione nella ricerca dei vettori.

I parametri di costruzione dell'indice e di ricerca variano a seconda della distribuzione Milvus. Selezionare prima la distribuzione Milvus.

Quando si effettuano le ricerche, è possibile impostare il top-K fino a 8192 per qualsiasi ricerca su una collezione indicizzata GPU_IVF_FLAT.

  • Parametri di costruzione dell'indice

    ParametroDescrizioneIntervalloValore predefinito
    nlistNumero di unità cluster[1, 65536]128
    mNumero di fattori di quantizzazione del prodotto,dim mod m or = 00
    nbits[Numero di bit in cui viene memorizzato ogni vettore a bassa dimensione.[1, 16]8
    cache_dataset_on_deviceDecide 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.
    "true" "false""false"
  • Parametri di ricerca

    • Ricerca comune

      ParametroDescrizioneIntervalloValore predefinito
      nprobeNumero di unità da interrogare[1, nlist]8
  • Limiti di ricerca

    ParametroIntervallo
    limit (top-K)<= 1024

GPU_BRUTE_FORCE

GPU_BRUTE_FORCE è stato pensato per i casi in cui è fondamentale un richiamo estremamente elevato, garantendo un richiamo pari a 1 confrontando ogni query con tutti i vettori del set di dati. Richiede solo il tipo di metrica (metric_type) e top-k (limit) come parametri di costruzione e ricerca dell'indice.

Per GPU_BRUTE_FORCE non sono necessari altri parametri di costruzione dell'indice o di ricerca.

Conclusione

Attualmente, Milvus carica tutti gli indici nella memoria della GPU per rendere efficienti le operazioni di ricerca. La quantità di dati che può essere caricata dipende dalla dimensione della memoria della GPU:

  • GPU_CAGRA: l'utilizzo della memoria è circa 1,8 volte quello dei dati vettoriali originali.
  • GPU_IVF_FLAT e GPU_BRUTE_FORCE: Richiedono una memoria pari alla dimensione dei dati originali.
  • GPU_IVF_PQ: Utilizza un ingombro di memoria inferiore, che dipende dalle impostazioni dei parametri di compressione.

Tradotto daDeepL

Try Managed Milvus for Free

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

Get Started
Feedback

Questa pagina è stata utile?