Che cos'è Milvus?
Milvus è un database vettoriale ad alte prestazioni e altamente scalabile che funziona in modo efficiente in un'ampia gamma di ambienti, dal computer portatile ai sistemi distribuiti su larga scala. È disponibile sia come software open-source che come servizio cloud.
Milvus è un progetto open-source della LF AI & Data Foundation, distribuito sotto la licenza Apache 2.0. La maggior parte dei collaboratori sono esperti della comunità del calcolo ad alte prestazioni (HPC), specializzati nella costruzione di sistemi su larga scala e nell'ottimizzazione del codice consapevole dell'hardware. Tra i collaboratori principali figurano professionisti di Zilliz, ARM, NVIDIA, AMD, Intel, Meta, IBM, Salesforce, Alibaba e Microsoft.
Dati non strutturati, embeddings e Milvus
I dati non strutturati, come il testo, le immagini e l'audio, hanno formati diversi e una ricca semantica di fondo, che li rende difficili da analizzare. Per gestire questa complessità, si utilizzano gli embeddings per convertire i dati non strutturati in vettori numerici che ne catturano le caratteristiche essenziali. Questi vettori vengono poi memorizzati in un database vettoriale, consentendo ricerche e analisi veloci e scalabili.
Milvus offre solide capacità di modellazione dei dati, consentendo di organizzare i dati non strutturati o multimodali in raccolte strutturate. Supporta un'ampia gamma di tipi di dati per la modellazione di diversi attributi, tra cui i comuni tipi numerici e di caratteri, vari tipi di vettori, array, set e JSON, risparmiandovi lo sforzo di mantenere più sistemi di database.
Dati non strutturati, embeddings e Milvus
Milvus offre tre modalità di distribuzione, che coprono un'ampia gamma di scale di dati: dalla prototipazione locale in Jupyter Notebook ai cluster Kubernetes massicci che gestiscono decine di miliardi di vettori:
- Milvus Lite è una libreria Python che può essere facilmente integrata nelle applicazioni. Essendo una versione leggera di Milvus, è ideale per la prototipazione rapida in Jupyter Notebook o per l'esecuzione su dispositivi edge con risorse limitate. Per saperne di più.
- Milvus Standalone è una versione server per una sola macchina, con tutti i componenti riuniti in un'unica immagine Docker per una comoda distribuzione. Per saperne di più.
- Milvus Distributed può essere distribuito su cluster Kubernetes, con un'architettura cloud-native progettata per scenari di dimensioni miliardarie o addirittura superiori. Questa architettura garantisce la ridondanza dei componenti critici. Per saperne di più.
Che cosa rende Milvus così veloce?
Milvus è stato progettato fin dal primo giorno per essere un sistema di database vettoriale altamente efficiente. Nella maggior parte dei casi, Milvus supera gli altri database vettoriali di 2-5 volte (si vedano i risultati di VectorDBBench). Queste prestazioni elevate sono il risultato di diverse scelte progettuali fondamentali:
Ottimizzazione consapevole dell'hardware: Per adattarsi a Milvus in vari ambienti hardware, abbiamo ottimizzato le sue prestazioni in modo specifico per molte architetture e piattaforme hardware, tra cui AVX512, SIMD, GPU e SSD NVMe.
Algoritmi di ricerca avanzati: Milvus supporta un'ampia gamma di algoritmi di indicizzazione/ricerca in-memory e su disco, tra cui IVF, HNSW, DiskANN e altri, tutti profondamente ottimizzati. Rispetto a implementazioni popolari come FAISS e HNSWLib, Milvus offre prestazioni migliori del 30%-70%.
Motore di ricerca in C++: Oltre l'80% delle prestazioni di un database vettoriale è determinato dal suo motore di ricerca. Milvus utilizza il C++ per questo componente critico, grazie alle elevate prestazioni, all'ottimizzazione a basso livello e alla gestione efficiente delle risorse di questo linguaggio. Soprattutto, Milvus integra numerose ottimizzazioni del codice consapevoli dell'hardware, che vanno dalla vettorizzazione a livello di assembly alla parallelizzazione e allo scheduling multi-thread, per sfruttare appieno le capacità dell'hardware.
Orientato alle colonne: Milvus è un sistema di database vettoriale orientato alle colonne. I vantaggi principali derivano dai modelli di accesso ai dati. Quando si eseguono le query, un database orientato alle colonne legge solo i campi specifici coinvolti nella query, anziché intere righe, riducendo notevolmente la quantità di dati a cui si accede. Inoltre, le operazioni sui dati basati sulle colonne possono essere facilmente vettorializzate, consentendo di applicare le operazioni alle intere colonne in una sola volta, migliorando ulteriormente le prestazioni.
Cosa rende Milvus così scalabile
Nel 2022 Milvus ha supportato vettori su scala miliardaria e nel 2023 è arrivato a decine di miliardi con una stabilità costante, alimentando scenari su larga scala per oltre 300 grandi aziende, tra cui Salesforce, PayPal, Shopee, Airbnb, eBay, NVIDIA, IBM, AT&T, LINE, ROBLOX, Inflection, ecc.
L'architettura di sistema cloud-native e altamente disaccoppiata di Milvus garantisce che il sistema possa espandersi continuamente con la crescita dei dati:
Architettura di sistema altamente disaccoppiata di Milvus
Milvus è completamente stateless, quindi può essere facilmente scalato con l'aiuto di Kubernetes o di cloud pubblici. Inoltre, i componenti di Milvus sono ben disaccoppiati, con i tre compiti più critici - ricerca, inserimento dei dati e indicizzazione/compattazione - progettati come processi facilmente parallelizzabili, con logica complessa separata. Ciò garantisce che il nodo di query, il nodo di dati e il nodo di indicizzazione corrispondenti possano scalare in modo indipendente, ottimizzando le prestazioni e l'efficienza dei costi.
Tipi di ricerca supportati da Milvus
Milvus supporta vari tipi di funzioni di ricerca per soddisfare le esigenze dei diversi casi d'uso:
- Ricerca RNA: Trova i primi K vettori più vicini al vettore interrogato.
- Ricerca per filtro: Esegue la ricerca RNA in base a condizioni di filtraggio specificate.
- Ricerca per intervallo: Trova i vettori entro un raggio specifico dal vettore di interrogazione.
- Ricerca ibrida: Esegue una ricerca ANN basata su più campi vettoriali.
- Ricerca a testo completo: Ricerca full text basata su BM25.
- Reranking: Regola l'ordine dei risultati della ricerca in base a criteri aggiuntivi o a un algoritmo secondario, affinando i risultati iniziali della ricerca ANN.
- Recupera: Recupera i dati in base alle loro chiavi primarie.
- Interrogazione: Recupera i dati utilizzando espressioni specifiche.
Set di funzioni completo
Oltre alle funzioni di ricerca chiave menzionate in precedenza, Milvus offre anche una serie di funzioni implementate intorno alle ricerche ANN, in modo da poterne utilizzare appieno le capacità.
API e SDK
- API RESTful (ufficiale)
- PyMilvus (SDK Python) (ufficiale)
- SDK Go (ufficiale)
- SDK Java (ufficiale)
- Node.js (JavaScript) SDK (ufficiale)
- C# (contribuito da Microsoft)
Tipi di dati avanzati
Oltre ai tipi di dati primitivi, Milvus supporta diversi tipi di dati avanzati e le rispettive metriche di distanza applicabili.
Accelerazione
Algoritmi di ricerca Milvus supporta una serie di algoritmi di indicizzazione e ricerca regolabili. Per maggiori dettagli, vedere Indice in memoria, Indice su disco e Indice su GPU.
Partizioni e chiavi di partizione Le partizioni sono suddivisioni di una collezione Milvus. È possibile scegliere un campo scalare come chiave di partizione per migliorare le prestazioni di ricerca. Per ulteriori informazioni, vedere Gestione delle partizioni e Uso della chiave di partizione.
Modello di consistenza regolabile La consistenza garantisce che ogni nodo o replica Milvus abbia la stessa visione dei dati quando scrive o legge i dati in un determinato momento. È possibile sintonizzare facilmente il livello di consistenza quando si effettuano ricerche RNA in Milvus. Per maggiori dettagli, vedere Consistenza.
Importazione di dati ad alta velocità Per importare un grande volume di dati in Milvus invece di inserirli uno dopo l'altro, è possibile utilizzare i nostri strumenti di importazione di dati ad alta velocità. Per i dettagli, vedere Preparazione dei dati di origine e Importazione dei dati.
Supporto multi-tenancy Milvus ha implementato molte funzioni orientate agli scenari multi-tenancy, tra cui Partition Key, Clustering Key e altre. Per i dettagli, vedere Strategie multi-tenancy.
Sicurezza e autorizzazione
Modello di coerenza regolabile La coerenza garantisce che ogni nodo o replica Milvus abbia la stessa visione dei dati quando scrive o legge i dati in un determinato momento. È possibile sintonizzare facilmente il livello di consistenza quando si effettuano ricerche RNA in Milvus. Per maggiori dettagli, vedere Consistenza.
Isolamento dei dati e controllo delle risorse Per gli scenari multi-tenancy, l'isolamento dei dati è un requisito di sicurezza fondamentale. Milvus implementa diverse funzioni per risolvere i problemi di sicurezza. Per maggiori dettagli, vedere Gestione dei gruppi di risorse e Compattazione del clustering.
Integrazioni AI
Integrazioni di modelli di inclusione I modelli di inclusione convertono i dati non strutturati nella loro rappresentazione numerica in uno spazio dati ad alta dimensionalità, in modo da poterli memorizzare in Milvus. Attualmente, PyMilvus, l'SDK di Python, integra diversi modelli di embedding, in modo da poter preparare rapidamente i dati in embedding vettoriali. Per maggiori dettagli, vedere Panoramica sull'embedding.
Integrazioni di modelli di reranking Nel campo del reperimento delle informazioni e dell'IA generativa, un reranker è uno strumento essenziale che ottimizza l'ordine dei risultati delle ricerche iniziali. PyMilvus integra anche diversi modelli di reranking per ottimizzare l'ordine dei risultati restituiti dalle ricerche iniziali. Per maggiori dettagli, consultare la sezione Panoramica sui reranker.
LangChain e altre integrazioni di strumenti di intelligenza artificiale Nell'era della GenAI, gli strumenti come LangChain sono oggetto di grande attenzione da parte degli sviluppatori di applicazioni. Come componente principale, Milvus funge solitamente da archivio di vettori in questi strumenti. Per sapere come integrare Milvus nei vostri strumenti di IA preferiti, consultate le nostre integrazioni e i nostri tutorial.
Strumenti ed ecosistema
Attu Attu è un'interfaccia grafica intuitiva che aiuta a gestire Milvus e i dati che memorizza. Per maggiori dettagli, consultare il repository di Attu.
Birdwatcher Birdwatcher è uno strumento di debug per Milvus. Utilizzandolo per connettersi a etcd, è possibile controllare lo stato del sistema Milvus o configurarlo al volo. Per maggiori dettagli, consultare BirdWatcher.
Integrazioni con Promethus e Grafana Prometheus è un toolkit open-source per il monitoraggio dei sistemi e gli avvisi per Kubernetes. Grafana è uno stack di visualizzazione open-source in grado di connettersi con tutte le fonti di dati. È possibile utilizzare Promethus e Grafana come fornitore di servizi di monitoraggio per controllare visivamente le prestazioni di Milvus distribuito. Per i dettagli, vedere Distribuzione dei servizi di monitoraggio.
Milvus Backup Milvus Backup è uno strumento che consente agli utenti di eseguire il backup e il ripristino dei dati di Milvus. Fornisce sia CLI che API per adattarsi a diversi scenari applicativi. Per i dettagli, consultare Milvus Backup.
Milvus Capture Data Change (CDC) Milvus-CDC è in grado di catturare e sincronizzare i dati incrementali nelle istanze Milvus e garantisce l'affidabilità dei dati aziendali trasferendoli senza soluzione di continuità tra le istanze di origine e di destinazione, consentendo un facile backup incrementale e il disaster recovery. Per maggiori dettagli, consultare Milvus CDC.
Connettori Milvus Milvus ha previsto una serie di connettori per integrare Milvus con strumenti di terze parti, come Apache Spark. Attualmente è possibile utilizzare il nostro connettore Spark per inviare i dati di Milvus ad Apache Spark per l'elaborazione dell'apprendimento automatico. Per maggiori dettagli, consultare Spark-Milvus Connector.
Vector Transmission Services (VTS) Milvus fornisce una serie di strumenti per trasferire i dati tra un'istanza Milvus e una serie di fonti di dati, tra cui cluster Zilliz, Elasticsearch, Postgres (PgVector) e un'altra istanza Milvus. Per maggiori dettagli, consultare la sezione Migrazioni.