Calcolatore della dimensione di un database vettoriale
Dati di input
| Numero di vettori | 1.000.000 |
|---|---|
| Dimensioni | 1.536 |
| Byte per valore | 4 |
| Sovraccarico dell'indice | 25 % |
Calcolatore della dimensione di un database vettoriale
Stima lo spazio di archiviazione occupato da un indice di embedding partendo dal numero di vettori, dalla dimensione del vettore, dai byte per valore e dal sovraccarico dell'indice aggiunto dalle strutture di ricerca approssimata del vicino più prossimo.
Dati di input
Vettori
Indice
Risultati
Inserisci un valore per visualizzare i risultati.
Dettagli
Definizione
La dimensione di un database vettoriale è la quantità di spazio di archiviazione necessaria per contenere un insieme di vettori di embedding insieme all'indice di ricerca costruito sopra di essi. Quando un sistema di recupero genera gli embedding di un corpus, ogni segmento di documento diventa un vettore — un elenco di numeri di lunghezza fissa — e tutti questi vettori devono risiedere in un luogo che supporti una ricerca per similarità veloce. Lo spazio occupato dipende da tre fattori: quanti vettori ci sono, quanto è lungo ciascun vettore e quanti byte occupa ogni valore.
Composizione dello spazio occupato
Un singolo vettore è un array di un certo numero di valori, pari alle sue dimensioni. Ogni numero viene archiviato a una precisione scelta: 4 byte per un numero in virgola mobile a 32 bit, 2 byte per uno a 16 bit, oppure 1 byte per un intero quantizzato a 8 bit. Moltiplicando la dimensione in byte di un valore per il numero di dimensioni si ottiene la dimensione di un vettore, e moltiplicando per il numero di vettori si ottiene il contenuto grezzo.
Sopra ai vettori grezzi si colloca l'indice. Confrontare una richiesta con ogni vettore archiviato è accurato ma diventa lento quando il numero raggiunge i milioni, quindi i database vettoriali costruiscono una struttura di ricerca approssimata del vicino più prossimo — più comunemente un grafo HNSW — che permette alla ricerca di visitare solo una piccola frazione dei vettori. Quel grafo memorizza i collegamenti ai vicini per ogni vettore, e questi collegamenti sono dati aggiuntivi, che di solito aggiungono tra un quinto e la metà della dimensione grezza.
Formula
Con vettori di dimensione , ognuno con valori che occupano byte, lo spazio grezzo è
Sraw=N⋅d⋅be aggiungendo un sovraccarico frazionario dell'indice si ottiene il totale:
S=Sraw⋅(1+o)Esempio
Si consideri un archivio di 2.400.000 vettori prodotti da un modello con dimensione 768, mantenuti a precisione piena così che ogni valore occupi 4 byte, con un indice HNSW che aggiunge il 35 percento di sovraccarico. La dimensione grezza è
Sraw=2.400.000×768×4=7.372.800.000 byte≈7,37 GBe con l'indice,
S=7,37 GB×1,35≈9,95 GBPassando gli stessi vettori alla quantizzazione a 8 bit, 1 byte per valore, la dimensione grezza scenderebbe a circa 1,84 GB e il totale a circa 2,49 GB — una riduzione di quattro volte — al costo di una piccola perdita di precisione nel calcolo della distanza.
Note e varianti
La stima copre solo i vettori e l'indice. La maggior parte dei database archivia anche il segmento di testo originale e i metadati accanto a ogni vettore; per i segmenti brevi questo contenuto può essere paragonabile al vettore stesso, quindi conviene aggiungerlo a parte quando si dimensiona lo spazio su disco complessivo. La riduzione della dimensione e la quantizzazione sono le due leve principali per ridurre un indice: dimezzare la dimensione o quantizzare a int8 riducono sensibilmente la dimensione grezza prima ancora di applicare il sovraccarico dell'indice.
Applicazioni
La dimensione di archiviazione è il dato di partenza per il costo di hosting — una volta noto quanti gigabyte occupa un indice, il Calcolatore del costo di un database vettoriale lo trasforma in un addebito mensile. I vettori dimensionati qui sono prodotti dalla fase di embedding il cui prezzo è calcolato dal Calcolatore del costo degli embedding, e il numero di vettori deriva di solito da come vengono suddivisi i documenti di origine.
Domande frequenti (FAQ)
Perché l'indice aggiunge un sovraccarico?
Archiviare i vettori grezzi permette di confrontare una richiesta con ogni vettore, ma questa scansione esaustiva diventa lenta su grandi volumi. Gli indici di ricerca approssimata del vicino più prossimo come HNSW costruiscono un grafo navigabile, così la ricerca visita solo una piccola frazione dei vettori.
Quel grafo memorizza i collegamenti ai vicini per ogni vettore, ovvero dati aggiuntivi oltre ai vettori stessi — di solito dal 20 al 50 percento in più, a seconda di quanto densamente è connesso il grafo.
Quanto fa risparmiare la quantizzazione?
I valori di embedding vengono prodotti come numeri in virgola mobile a 32 bit, 4 byte ciascuno. Archiviarli come numeri a 16 bit dimezza lo spazio occupato, e la quantizzazione a interi di 8 bit lo riduce a un quarto.
La quantizzazione introduce piccoli errori di arrotondamento nel calcolo della distanza, ma per il recupero la perdita di qualità nel ranking è di solito modesta, quindi int8 è un modo diffuso per ridurre un indice di grandi dimensioni. Il campo dei byte per valore permette di confrontare direttamente le tre opzioni.
Sono inclusi i metadati e il testo?
No. La stima copre solo i vettori e l'indice di ricerca. La maggior parte dei database vettoriali archivia anche il segmento di testo originale e i metadati come gli identificatori dei documenti, i titoli e le etichette accanto a ogni vettore. Per i segmenti brevi questo contenuto può eguagliare o superare la dimensione del vettore, quindi conviene aggiungerlo a parte quando si dimensiona lo spazio su disco complessivo.
Avvertenze legali
Questa è una stima approssimativa dello spazio occupato dai vettori e dall'indice. I database reali archiviano anche il testo di origine, i metadati e le informazioni interne di gestione, e il sovraccarico di un indice specifico dipende dalla sua configurazione. Conviene trattare il risultato come una stima di pianificazione, non come un valore esatto di occupazione del disco.