Cosa sono le estensioni vettoriali avanzate?
Le macchine intelligenti e coscienti che vogliono conquistare il mondo sono una costante della fantascienza, ma in realtà i computer moderni sono molto obbedienti. Senza istruzioni, raramente sanno cosa fare da soli. I computer eseguono compiti basati su istruzioni, o ordini, inviati da un programma a un processore. Al livello più basso, ogni istruzione è una sequenza di uno e zero che descrive un'operazione che il computer deve eseguire. In genere, nei linguaggi di assemblaggio dei computer ogni istruzione del linguaggio macchina corrisponde a un'istruzione del processore. L'unità di elaborazione centrale (CPU) si basa sulle istruzioni per eseguire calcoli e controllare i sistemi. Inoltre, le prestazioni della CPU sono spesso misurate in termini di capacità di esecuzione delle istruzioni (ad esempio, il tempo di esecuzione).
Cosa sono le estensioni vettoriali avanzate?
Le Advanced Vector Extensions (AVX) sono un set di istruzioni per microprocessori che si basano sulla famiglia di architetture x86. Proposte per la prima volta da Intel nel marzo 2008, le AVX hanno ottenuto un ampio sostegno tre anni dopo con il lancio di Sandy Bridge - una microarchitettura utilizzata nella seconda generazione di processori Intel Core (ad esempio, Core i7, i5, i3) - e della microarchitettura concorrente di AMD, rilasciata anch'essa nel 2011, Bulldozer.
AVX ha introdotto un nuovo schema di codifica, nuove funzionalità e nuove istruzioni. AVX2 espande la maggior parte delle operazioni sugli interi a 256 bit e introduce le operazioni di moltiplicazione-accumulazione fuse (FMA). AVX-512 espande le operazioni AVX a 512 bit utilizzando una nuova codifica del prefisso EVEX (enhanced vector extension).
Milvus è un database vettoriale open-source progettato per la ricerca di similarità e le applicazioni di intelligenza artificiale (AI). La piattaforma supporta il set di istruzioni AVX-512, il che significa che può essere utilizzata con tutte le CPU che includono le istruzioni AVX-512. Milvus ha ampie applicazioni che spaziano dai sistemi di raccomandazione, alla computer vision, all'elaborazione del linguaggio naturale (NLP) e altro ancora. Questo articolo presenta i risultati e l'analisi delle prestazioni di un database vettoriale Milvus su AVX-512 e AVX2.
Prestazioni di Milvus su AVX-512 e AVX2
Configurazione del sistema
- CPU: CPU Intel® Platinum 8163 @ 2,50GHz24 core 48 threads
- Numero di CPU: 2
- Scheda grafica, GeForce RTX 2080Ti 11GB 4 schede
- Memoria: 768 GB
- Disco: 2TB SSD
Parametri di Milvus
- cahce.cahe_size: 25, La dimensione della memoria della CPU utilizzata per la cache dei dati per una query più veloce.
- nlist: 4096
- nprobe: 128
Nota: nlist
è il parametro di indicizzazione da creare dal client; nprobe
il parametro di ricerca. Sia IVF_FLAT che IVF_SQ8 utilizzano un algoritmo di clustering per suddividere un gran numero di vettori in bucket; nlist
è il numero totale di bucket da suddividere durante il clustering. Il primo passo di una query consiste nel trovare il numero di bucket che sono più vicini al vettore target e il secondo passo consiste nel trovare i vettori top-k in questi bucket confrontando la distanza dei vettori. nprobe
si riferisce al numero di bucket nel primo passo.
Set di dati: Set di dati SIFT10M
Questi test utilizzano il dataset SIFT10M, che contiene un milione di vettori a 128 dimensioni ed è spesso utilizzato per analizzare le prestazioni dei corrispondenti metodi di ricerca nearest-neighbor. Il tempo di ricerca top-1 per nq = [1, 10, 100, 500, 1000] sarà confrontato tra i due set di istruzioni.
Risultati per tipo di indice vettoriale
Gliindici vettoriali sono strutture di dati efficienti dal punto di vista del tempo e dello spazio costruite sul campo vettoriale di una collezione utilizzando vari modelli matematici. L'indicizzazione vettoriale consente di effettuare ricerche efficienti su grandi insiemi di dati quando si cerca di identificare vettori simili a un vettore di input. A causa della natura dispendiosa in termini di tempo del recupero accurato, la maggior parte dei tipi di indice supportati da Milvus utilizza la ricerca approssimativa del vicino (ANN).
Per questi test sono stati utilizzati tre indici con AVX-512 e AVX2: IVF_FLAT, IVF_SQ8 e HNSW.
IVF_FLAT
Il file invertito (IVF_FLAT) è un tipo di indice basato sulla quantizzazione. È l'indice FIV più elementare e i dati codificati memorizzati in ogni unità sono coerenti con i dati originali. L'indice divide i dati vettoriali in un certo numero di unità di cluster (nlist), quindi confronta le distanze tra il vettore di input di destinazione 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 cluster più simili, riducendo drasticamente il tempo di interrogazione. Regolando nprobe, è possibile trovare un equilibrio ideale tra precisione e velocità per un determinato scenario.
Risultati delle prestazioni IVF_FLAT.png
IVF_SQ8
IVF_FLAT non esegue alcuna compressione, pertanto i file di indice che produce hanno all'incirca le stesse dimensioni dei dati vettoriali originali non indicizzati. Quando le risorse di memoria del disco, della CPU o della GPU sono limitate, IVF_SQ8 è un'opzione migliore di IVF_FLAT. Questo tipo di indice è in grado di convertire ogni dimensione del vettore originale da un numero in virgola mobile a quattro byte a un intero senza segno a un byte, eseguendo una quantizzazione scalare. Questo riduce il consumo di memoria su disco, CPU e GPU del 70-75%.
Risultati delle prestazioni IVF_SQ8.png
HNSW
Hierarchical Small World Graph (HNSW) è un algoritmo di indicizzazione basato su grafi. Le interrogazioni iniziano nel livello più alto trovando il nodo più vicino all'obiettivo, quindi scendono al livello successivo per un altro ciclo di ricerca. Dopo diverse iterazioni, può avvicinarsi rapidamente alla posizione del target.
Risultati delle prestazioni HNSW.png
Confronto tra gli indici vettoriali
Il recupero dei vettori è sempre più veloce con il set di istruzioni AVX-512 che con AVX2. Questo perché AVX-512 supporta il calcolo a 512 bit, rispetto ai soli 256 bit di AVX2. Teoricamente, l'AVX-512 dovrebbe essere due volte più veloce dell'AVX2, ma Milvus esegue altri compiti che richiedono molto tempo oltre al calcolo della similarità vettoriale. È improbabile che il tempo complessivo di recupero dell'AVX-512 sia doppio rispetto all'AVX2 in scenari reali. comparison.png
Il recupero è significativamente più veloce sull'indice HNSW rispetto agli altri due indici, mentre il recupero IVF_SQ8 è leggermente più veloce di IVF_FLAT su entrambi i set di istruzioni. Questo è probabilmente dovuto al fatto che IVF_SQ8 richiede solo il 25% della memoria necessaria a IVF_FLAT. IVF_SQ8 carica 1 byte per ogni dimensione del vettore, mentre IVF_FLAT carica 4 byte per ogni dimensione del vettore. Il tempo necessario per il calcolo è probabilmente limitato dalla larghezza di banda della memoria. Di conseguenza, IVF_SQ8 non solo occupa meno spazio, ma richiede anche meno tempo per recuperare i vettori.
Milvus è un database vettoriale versatile e ad alte prestazioni.
I test presentati in questo articolo dimostrano che Milvus offre prestazioni eccellenti su entrambi i set di istruzioni AVX-512 e AVX2 utilizzando diversi indici. Indipendentemente dal tipo di indice, Milvus ha prestazioni migliori su AVX-512.
Milvus è compatibile con diverse piattaforme di deep learning e viene utilizzato in varie applicazioni di IA. Milvus 2.0, una versione rinnovata del database vettoriale più famoso al mondo, è stato rilasciato con licenza open-source nel luglio 2021. Per ulteriori informazioni sul progetto, consultare le seguenti risorse:
- Prestazioni di Milvus su AVX-512 e AVX2
- Confronto tra gli indici vettoriali
- Milvus è un database vettoriale versatile e ad alte prestazioni.
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word