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

Panoramica dell'indice GPU

La creazione di un indice con il supporto delle GPU in Milvus può migliorare significativamente le prestazioni di ricerca in scenari ad alto throughput e ad alto richiamo.

La figura seguente confronta il throughput delle query (query al secondo) tra le configurazioni dell'indice, le configurazioni hardware, i dataset vettoriali (Cohere e OpenAI) e le dimensioni dei batch di ricerca, dimostrando che GPU_CAGRA supera costantemente gli altri metodi.

Gpu Index Performance Prestazioni dell'indice Gpu

Configurazione del pool di memoria della GPU per Milvus

Milvus supporta un pool di memoria GPU globale e fornisce due parametri di configurazione, initMemSize e maxMemSize, nel file di configurazione di Milvus.

gpu:
  initMemSize: 0 # set the initial memory pool size.
  maxMemSize: 0 # sets the maximum memory usage limit. When the memory usage exceeds initMemSize, Milvus will attempt to expand the memory pool.

Il valore predefinito di initMemSize è solitamente la metà della memoria della GPU all'avvio di Milvus, mentre quello di maxMemSize è l'intera memoria della GPU. La dimensione del pool di memoria della GPU è inizialmente impostata su initMemSize e si espanderà automaticamente a maxMemSize quando necessario.

Quando viene specificato un indice abilitato alla GPU, Milvus carica i dati della raccolta di destinazione nella memoria della GPU prima di effettuare le ricerche, quindi maxMemSize deve essere almeno la dimensione dei dati.

Limiti

  • Per GPU_IVF_FLAT, il valore massimo per limit è 1.024.

  • Per GPU_IVF_PQ e GPU_CAGRA, il valore massimo per limit è 1.024.

  • Sebbene non vi sia un valore impostato per limit per GPU_BRUTE_FORCE, si consiglia di non superare i 4.096 per evitare potenziali problemi di prestazioni.

  • Attualmente, gli indici della GPU non supportano la distanza COSINE. Se è necessaria la distanza COSINE, i dati devono essere prima normalizzati e poi si può usare la distanza del prodotto interno (IP) come sostituto.

  • Il caricamento della protezione OOM per gli indici GPU non è pienamente supportato, una quantità eccessiva di dati potrebbe causare l'arresto anomalo del QueryNode.

  • Gli indici GPU non supportano funzioni di ricerca come la ricerca per intervallo e la ricerca per raggruppamento.

Tipi di indice GPU supportati

La seguente tabella elenca i tipi di indice GPU supportati da Milvus.

Tipo di indice

Descrizione

Uso della memoria

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.

L'utilizzo della memoria è circa 1,8 volte quello dei dati vettoriali originali.

GPU_IVF_FLAT

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 ricerche, è possibile impostare il top-k (limit) fino a 256 per qualsiasi ricerca su una raccolta indicizzata con GPU_IVF_FLAT.

Richiede una memoria pari alla dimensione dei dati originali.

GPU_IVF_PQ

GPU_IVF_PQ esegue il raggruppamento degli indici IVF prima di quantizzare il prodotto dei vettori. Quando si effettuano le ricerche, è possibile impostare il top-k (limit) fino a 8.192 per qualsiasi ricerca su una raccolta indicizzata da GPU_IVF_FLAT.

Utilizza un ingombro di memoria minore, che dipende dalle impostazioni dei parametri di compressione.

GPU_BRUTE_FORCE

GPU_BRUTE_FORCE è stato pensato per i casi in cui è fondamentale un richiamo estremamente elevato, garantendo un richiamo di 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.

Richiede una memoria pari alla dimensione dei dati originali.

Configurare le impostazioni di Milvus per il controllo della memoria della GPU

Milvus utilizza un pool di memoria grafica globale per allocare la memoria della GPU. Supporta due parametri initMemSize e maxMemSize nel file di configurazione di Milvus. La dimensione del pool è inizialmente impostata su initMemSize e verrà automaticamente espansa a maxMemSize dopo aver superato questo limite.

Il valore predefinito di initMemSize è pari a 1/2 della memoria della GPU disponibile all'avvio di Milvus, mentre il valore predefinito di maxMemSize è pari a tutta la memoria della GPU disponibile.

Fino a Milvus 2.4.1, Milvus utilizza un pool di memoria GPU unificato. Per le versioni precedenti alla 2.4.1, si raccomandava di impostare entrambi i valori a 0.

gpu:
  initMemSize: 0 #set the initial memory pool size.
  maxMemSize: 0 #maxMemSize sets the maximum memory usage limit. When the memory usage exceed initMemSize, Milvus will attempt to expand the memory pool. 

A partire da Milvus 2.4.1, il pool di memoria GPU viene utilizzato solo per i dati temporanei della GPU durante le ricerche. Pertanto, si consiglia di impostare i valori 2048 e 4096.

gpu:
  initMemSize: 2048 #set the initial memory pool size.
  maxMemSize: 4096 #maxMemSize sets the maximum memory usage limit. When the memory usage exceed initMemSize, Milvus will attempt to expand the memory pool. 

Per sapere come costruire un indice GPU, consultare la guida specifica per ogni tipo di indice.

DOMANDE FREQUENTI

  • Quando è opportuno utilizzare un indice GPU?

    Un indice GPU è particolarmente vantaggioso in situazioni che richiedono un'elevata velocità di elaborazione o di richiamo. Ad esempio, quando si tratta di batch di grandi dimensioni, il throughput dell'indicizzazione su GPU può superare di ben 100 volte quello dell'indicizzazione su CPU. In scenari con batch più piccoli, gli indici su GPU superano comunque in modo significativo gli indici su CPU in termini di prestazioni. Inoltre, se è richiesto un inserimento rapido dei dati, l'integrazione di una GPU può accelerare notevolmente il processo di creazione degli indici.

  • In quali scenari sono più adatti gli indici su GPU come GPU_CAGRA, GPU_IVF_PQ, GPU_IVF_FLAT e GPU_BRUTE_FORCE?

    GPU_CAGRA Gli indici GPU sono ideali per gli scenari che richiedono prestazioni migliori, anche se a costo di consumare più memoria. Per gli ambienti in cui la conservazione della memoria è una priorità, l'indice GPU_IVF_PQ può aiutare a minimizzare i requisiti di memorizzazione, anche se comporta una maggiore perdita di precisione. L'indice GPU_IVF_FLAT è un'opzione equilibrata, che offre un compromesso tra prestazioni e utilizzo della memoria. Infine, l'indice GPU_BRUTE_FORCE è progettato per operazioni di ricerca esaustive, garantendo un tasso di richiamo pari a 1 mediante l'esecuzione di ricerche trasversali.