milvus-logo
LFAI
Casa
  • Concetti

Indice su disco

Questo articolo presenta un algoritmo di indicizzazione su disco chiamato DiskANN. Basato sui grafi Vamana, DiskANN consente di effettuare ricerche efficienti all'interno di grandi insiemi di dati.

Per migliorare le prestazioni delle query, è possibile specificare un tipo di indice per ogni campo vettoriale.

Attualmente, un campo vettoriale supporta solo un tipo di indice. Milvus cancella automaticamente il vecchio indice quando si cambia tipo di indice.

Prerequisiti

Per utilizzare DiskANN, tenere presente che

  • DiskANN è disattivato per impostazione predefinita. Se si preferisce un indice in-memory a uno su disco, si consiglia di disabilitare questa funzione per ottenere prestazioni migliori.
    • Per disabilitarla, si può cambiare queryNode.enableDisk in false nel file di configurazione di milvus.
    • Per abilitarla di nuovo, si può impostare queryNode.enableDisk su true.
  • L'istanza di Milvus funziona su Ubuntu 18.04.6 o su una versione successiva.
  • Il percorso dei dati di Milvus deve essere montato su un'unità SSD NVMe per ottenere prestazioni ottimali:
    • Per un'istanza Milvus Standalone, il percorso dei dati deve essere /var/lib/milvus/data nel contenitore in cui viene eseguita l'istanza.
    • Per un'istanza Milvus Cluster, il percorso dei dati dovrebbe essere /var/lib/milvus/data nei container in cui girano i QueryNode e gli IndexNode.

Limiti

Per utilizzare DiskANN, assicurarsi che

  • Usare solo vettori float con almeno 1 dimensione nei dati.
  • Utilizzare solo la distanza euclidea (L2), il prodotto interno (IP) o COSINE per misurare la distanza tra i vettori.

Impostazioni dell'indice e della ricerca

  • Parametri di costruzione dell'indice

    Quando si costruisce un indice DiskANN, utilizzare DISKANN come tipo di indice. Non sono necessari parametri di indice.

  • Parametri di ricerca

    ParametroDescrizioneIntervalloValore predefinito
    search_listDimensione dell'elenco dei candidati; una dimensione maggiore offre un tasso di richiamo più elevato con prestazioni inferiori.[topk, int32_max]16

DiskANN è sintonizzabile. È possibile modificare i parametri relativi a DiskANN in ${MILVUS_ROOT_PATH}/configs/milvus.yaml per migliorarne le prestazioni.

...
DiskIndex:
  MaxDegree: 56
  SearchListSize: 100
  PQCodeBugetGBRatio: 0.125
  SearchCacheBudgetGBRatio: 0.125
  BeamWidthRatio: 4.0
...
ParametroDescrizioneIntervallo di valoriValore predefinito
MaxDegreeGrado massimo del grafo Vamana.
Un valore maggiore offre un tasso di richiamo più elevato, ma aumenta le dimensioni e il tempo di costruzione dell'indice.
[1, 512]56
SearchListSizeDimensione dell'elenco dei candidati.
Un valore maggiore aumenta il tempo impiegato per costruire l'indice, ma offre un tasso di richiamo più elevato.
Impostare un valore inferiore a MaxDegree a meno che non sia necessario ridurre il tempo di costruzione dell'indice.
[1, int32_max]100
PQCodeBugetGBRatioLimite di dimensione del codice PQ.
Un valore maggiore offre un tasso di richiamo più elevato, ma aumenta l'utilizzo della memoria.
(0.0, 0.25]0.125
SearchCacheBudgetGBRatioRapporto tra i numeri dei nodi in cache e i dati grezzi.
Un valore maggiore migliora le prestazioni di costruzione dell'indice, ma aumenta l'uso della memoria.
[0.0, 0.3)0.10
BeamWidthRatioRapporto tra il numero massimo di richieste IO per iterazione di ricerca e il numero di CPU.[1, max(128/numero di CPU, 16)].4.0

Risoluzione dei problemi

  • Come risolvere l'errore io_setup() failed; returned -11, errno=11:Resource temporarily unavailable?

    Il kernel Linux offre la funzione Asynchronous non-blocking I/O (AIO) che consente a un processo di avviare più operazioni di I/O simultaneamente senza dover attendere il completamento di nessuna di esse. Ciò contribuisce ad aumentare le prestazioni delle applicazioni che possono sovrapporre elaborazione e I/O.

    Le prestazioni possono essere regolate utilizzando il file virtuale /proc/sys/fs/aio-max-nr nel file system proc. Il parametro aio-max-nr determina il numero massimo di richieste contemporanee consentite.

    Il valore predefinito di aio-max-nr è 65535, ma è possibile impostarlo su 10485760.

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?