Milvus
Zilliz
Casa
  • Guida per l'utente
  • Home
  • Docs
  • Guida per l'utente

  • Indici

  • Indici vettoriali flottanti

  • AISAQ

AISAQCompatible with Milvus 2.6.4+

AISAQ è un indice vettoriale basato su disco che estende DISKANN per gestire insiemi di dati su scala miliardaria senza superare i limiti della RAM. A differenza di DISKANN, che mantiene i vettori compressi in memoria, AISAQ memorizza tutti i dati su disco, offrendo due modalità per bilanciare le prestazioni e i costi di archiviazione.

Utilizzate AISAQ quando il vostro set di dati vettoriali è troppo grande per stare comodamente nella RAM, o quando dovete ottimizzare i costi dell'infrastruttura scambiando alcune prestazioni delle query con una riduzione dei requisiti di memoria.

Come funziona AISAQ

Il diagramma qui sopra confronta i layout di archiviazione di DISKANN, AISAQ-Performance e AISAQ-Scale, mostrando come i dati (vettori grezzi, elenchi di bordi e codici PQ) sono distribuiti tra RAM e disco.

Aisaq Vs Diskann Aisaq Vs Diskann

Fondazione: Riepilogo DISKANN

In DISKANN, i vettori grezzi e gli elenchi di bordi sono memorizzati su disco, mentre i vettori compressi PQ sono conservati in memoria (DRAM).

Quando DISKANN passa a un nodo (ad esempio, il vettore 0):

  • Carica il vettore grezzo(raw_vector_0) e il suo elenco di bordi(edgelist_0) dal disco.

  • L'elenco dei bordi indica i vicini da visitare successivamente (i nodi 2, 3 e 5 in questo esempio).

  • Il vettore grezzo viene utilizzato per calcolare la distanza esatta dal vettore di query per la classificazione.

  • I dati PQ in memoria vengono utilizzati per il filtraggio approssimativo della distanza per guidare l'attraversamento successivo.

Poiché i dati PQ sono già memorizzati nella DRAM, ogni visita al nodo richiede solo un I/O su disco, ottenendo un'elevata velocità di interrogazione con un uso moderato della memoria.

Per una spiegazione dettagliata di questi componenti e parametri, consultare DISKANN.

Modalità AISAQ

AISAQ offre due strategie di archiviazione su disco. La differenza principale è la modalità di memorizzazione dei dati compressi PQ.

AISAQ-performance

AISAQ-performance consente di ottenere un'archiviazione completamente basata su disco, spostando i dati PQ dalla memoria al disco e mantenendo bassi IOPS grazie alla colocazione e alla ridondanza dei dati.

In questa modalità:

  • Il vettore grezzo di ogni nodo, l'elenco dei bordi e i dati PQ dei suoi vicini sono memorizzati insieme su disco.

  • Questa disposizione garantisce che la visita di un nodo (ad esempio, il vettore 0) richieda un solo I/O su disco.

  • Tuttavia, poiché i dati PQ sono memorizzati in modo ridondante vicino a più nodi, la dimensione del file indice aumenta in modo significativo, consumando più spazio su disco.

AISAQ-scale

AISAQ-scale si concentra sulla riduzione dello spazio su disco, mantenendo tutti i dati su disco.

In questa modalità:

  • I dati PQ sono memorizzati separatamente su disco, senza ridondanza.

  • Questo design riduce al minimo le dimensioni dell'indice, ma comporta un maggior numero di operazioni di I/O durante l'attraversamento del grafo.

  • Per ridurre il sovraccarico di IOPS, AISAQ introduce due ottimizzazioni:

    • Una strategia di riordino che ordina i vettori PQ in base alla priorità per migliorare la localizzazione dei dati.

    • Una cache PQ nella DRAM (pq_cache_size) che memorizza i dati PQ di accesso frequente.

Di conseguenza, AISAQ-scale raggiunge una migliore efficienza di memorizzazione ma prestazioni inferiori rispetto a DISKANN o AISAQ-Performance.

Esempio di configurazione

# milvus.yaml
knowhere:
  AISAQ:
    build:
      max_degree: 56 # Maximum degree of the Vamana graph
      pq_code_budget_gb_ratio: 0.125 # Size limit on the PQ code (compared with raw data)
      search_list_size: 100 # Size of the candidate list during building graph
    search:
      beam_width_ratio: 4 # Ratio between the maximum number of IO requests per search iteration and CPU number

Parametri specifici di AISAQ

AISAQ eredita molti parametri da DISKANN. Per evitare ridondanze, di seguito vengono descritti solo i parametri specifici di AISAQ. Per le descrizioni dei parametri condivisi, come max_degree, pq_code_budget_gb_ratio, search_list_size e beam_width_ratio, fare riferimento a DISKANN.

Parametro

Descrizione

Intervallo di valori

Suggerimento per la regolazione

inline_pq

Numero di vettori PQ memorizzati in linea per nodo. Determina il layout di memorizzazione (modalità Performance o Scala).

Tipo: Intero

Intervallo: [0, max_degree]

Valore predefinito: -1

Più inline_pq si avvicina a max_degree, più le prestazioni tendono a migliorare, ma la dimensione del file indice aumenta in modo significativo.

Quando inline_pq si avvicina a 0, le prestazioni diminuiscono e la dimensione dell'indice diventa simile a quella di DISKANN.

Nota: dipende molto dalle prestazioni del disco. Se le prestazioni del disco sono scarse, si sconsiglia di attivare questa opzione, poiché la limitata larghezza di banda del disco potrebbe diventare un collo di bottiglia e degradare le prestazioni complessive.

rearrange

Abilita l'ordinamento dei vettori PQ per priorità per migliorare la localizzazione dell'I/O.

Tipo: Booleano

Intervallo: [true, false]

Valore predefinito: false

Riduce l'I/O delle query ma aumenta il tempo di creazione dell'indice.

pq_cache_size

Dimensione della cache PQ in DRAM (byte).

Tipo: Intero

Intervallo: [0, 1<<30]

Valore predefinito: 0

Una cache più grande migliora le prestazioni delle query, ma aumenta l'utilizzo della DRAM.

Considerazioni

  • Le prestazioni del disco sono importanti. AISAQ dipende in larga misura dalle IOPS dell'SSD; uno storage scadente può ridurre i QPS.

  • La modalità AISAQ-performance ≈ latenza DISKANN, ma può richiedere uno spazio su disco diverse volte superiore.

  • La modalità AISAQ-scale è adatta alla ricerca offline o ai carichi di lavoro di archiviazione dei dati, dove il QPS è meno critico.

Try Managed Milvus for Free

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

Get Started
Feedback

Questa pagina è stata utile?