Che cos'è il Milvus?

Il Milvus è un rapace del genere Milvus della famiglia dei falchi Accipaitridae, famoso per la velocità di volo, la vista acuta e la notevole adattabilità.

Zilliz adotta il nome Milvus per il suo database vettoriale open-source ad alte prestazioni e altamente scalabile, che funziona in modo efficiente in un'ampia gamma di ambienti, dal laptop ai sistemi distribuiti su larga scala. È disponibile sia come software open-source che come servizio cloud.

Sviluppato da Zilliz e presto donato alla LF AI & Data Foundation nell'ambito della Linux Foundation, Milvus è diventato uno dei principali progetti di database vettoriali open-source al mondo. È distribuito con licenza Apache 2.0 e la maggior parte dei collaboratori è costituita da 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.

È interessante notare che ogni progetto open-source di Zilliz prende il nome da un uccello, una convenzione di denominazione che simboleggia la libertà, la lungimiranza e l'agile evoluzione della tecnologia.

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.

Untructured data, embeddings, and Milvus 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 adattare Milvus a 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, piuttosto che 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:

Highly decoupled system architecture of Milvus 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 specificato 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 sopra, Milvus offre anche una serie di funzioni implementate intorno alle ricerche di RNA, in modo da poterne utilizzare appieno le capacità.

API e SDK

Tipi di dati avanzati

Oltre ai tipi di dati primitivi, Milvus supporta diversi tipi di dati avanzati e le rispettive metriche di distanza applicabili.

Perché Milvus?

  • Prestazioni elevate su scala e alta disponibilità

    Milvus è dotato di un'architettura distribuita che separa calcolo e archiviazione. Milvus è in grado di scalare orizzontalmente e di adattarsi a diversi modelli di traffico, ottenendo prestazioni ottimali aumentando in modo indipendente i nodi di interrogazione per i carichi di lavoro pesanti in lettura e i nodi di dati per i carichi di lavoro pesanti in scrittura. I microservizi stateless su K8s consentono un rapido recupero dai guasti, garantendo un'elevata disponibilità. Il supporto per le repliche migliora ulteriormente la tolleranza ai guasti e il throughput caricando i segmenti di dati su più nodi di interrogazione. Vedere il benchmark per il confronto delle prestazioni.

  • Supporto per vari tipi di indici vettoriali e accelerazione hardware

    Milvus separa il sistema e il motore di ricerca vettoriale di base, consentendo di supportare tutti i principali tipi di indici vettoriali ottimizzati per diversi scenari, tra cui HNSW, IVF, FLAT (forza bruta), SCANN e DiskANN, con variazioni basate sulla quantizzazione e mmap. Milvus ottimizza la ricerca vettoriale per funzioni avanzate come il filtraggio dei metadati e la ricerca per intervallo. Inoltre, Milvus implementa l'accelerazione hardware per migliorare le prestazioni della ricerca vettoriale e supporta l'indicizzazione su GPU, come CAGRA di NVIDIA.

  • Multi-tenancy flessibile e archiviazione calda/fredda

    Milvus supporta la multi-tenancy attraverso l'isolamento a livello di database, collezione, partizione o chiave di partizione. Le strategie flessibili consentono a un singolo cluster di gestire da centinaia a milioni di tenant, garantendo inoltre prestazioni di ricerca ottimizzate e un controllo flessibile degli accessi. Milvus migliora l'efficienza dei costi grazie allo storage caldo/freddo. I dati caldi a cui si accede di frequente possono essere archiviati in memoria o su SSD per ottenere migliori prestazioni, mentre i dati freddi a cui si accede di meno vengono conservati su uno storage più lento ed economico. Questo meccanismo può ridurre significativamente i costi, mantenendo alte le prestazioni per le attività critiche.

  • Vettori sparsi per la ricerca full text e la ricerca ibrida

    Oltre alla ricerca semantica tramite vettori densi, Milvus supporta in modo nativo anche la ricerca full text con BM25 e l'embedding sparse apprese come SPLADE e BGE-M3. Gli utenti possono memorizzare vettori sparsi e vettori densi nella stessa collezione e definire funzioni per classificare i risultati di più richieste di ricerca. Vedere esempi di ricerca ibrida con ricerca semantica + ricerca full text.

  • Sicurezza dei dati e controllo degli accessi a grana fine

    Milvus garantisce la sicurezza dei dati implementando l'autenticazione obbligatoria degli utenti, la crittografia TLS e il controllo degli accessi basato sui ruoli (RBAC). L'autenticazione degli utenti garantisce che solo gli utenti autorizzati con credenziali valide possano accedere al database, mentre la crittografia TLS protegge tutte le comunicazioni all'interno della rete. Inoltre, il RBAC consente un controllo degli accessi a grana fine, assegnando agli utenti autorizzazioni specifiche in base ai loro ruoli. Queste caratteristiche rendono Milvus una scelta robusta e sicura per le applicazioni aziendali, proteggendo i dati sensibili da accessi non autorizzati e potenziali violazioni.

Integrazioni AI

  • Integrazioni di modelli di embedding I modelli di embedding 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 provider 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 i dettagli, consultare VTS.