Come iniziare con Milvus
Come iniziare con Milvus
Ultimo aggiornamento gennaio 2025
I progressi dei Large Language Models(LLM) e il crescente volume di dati richiedono un'infrastruttura flessibile e scalabile per archiviare enormi quantità di informazioni, come un database. Tuttavia, i database tradizionali sono progettati per memorizzare dati tabellari e strutturati, mentre le informazioni comunemente utili per sfruttare la potenza dei sofisticati LLM e degli algoritmi di recupero delle informazioni sono non strutturate, come testo, immagini, video o audio.
Idatabase vettoriali sono sistemi di database progettati specificamente per i dati non strutturati. Con i database vettoriali è possibile non solo memorizzare enormi quantità di dati non strutturati, ma anche eseguire ricerche vettoriali. I database vettoriali dispongono di metodi di indicizzazione avanzati come l'Inverted File Index (IVFFlat) o l'Hierarchical Navigable Small World(HNSW) per eseguire processi di ricerca vettoriale e di recupero delle informazioni rapidi ed efficienti.
Milvus è un database vettoriale open-source che possiamo utilizzare per sfruttare tutte le caratteristiche vantaggiose che un database vettoriale può offrire. Ecco cosa tratteremo in questo post:
Che cos'è Milvus?
Milvus è un database vettoriale open-source che ci permette di memorizzare enormi quantità di dati non strutturati e di eseguire ricerche vettoriali rapide ed efficienti su di essi. Milvus è molto utile per molte applicazioni GenAI popolari, come i sistemi di raccomandazione, i chatbot personalizzati, il rilevamento di anomalie, la ricerca di immagini, l'elaborazione del linguaggio naturale e la retrieval augmented generation(RAG).
I vantaggi che si possono ottenere utilizzando Milvus come database vettoriale sono molteplici:
Milvus offre diverse opzioni di implementazione che si possono scegliere a seconda del caso d'uso e delle dimensioni delle applicazioni che si vogliono realizzare.
Milvus supporta una vasta gamma di metodi di indicizzazione per soddisfare le varie esigenze di dati e prestazioni, tra cui opzioni in-memory come FLAT, IVFFlat, HNSW e SCANN, varianti quantizzate per l'efficienza della memoria, DiskANN su disco per grandi insiemi di dati e indici ottimizzati per le GPU come GPU_CAGRA, GPU_IVF_FLAT e GPU_IVF_PQ per ricerche accelerate ed efficienti in termini di memoria.
Milvus offre anche una ricerca ibrida, in cui è possibile utilizzare una combinazione di embedding densi, embedding sparsi e filtraggio dei metadati durante le operazioni di ricerca vettoriale, ottenendo risultati di recupero più precisi. Inoltre, Milvus 2.5 supporta ora una ricerca ibrida full-text e una ricerca vettoriale, rendendo il reperimento ancora più accurato.
Milvus può essere utilizzato completamente nel cloud tramite Zilliz Cloud, dove è possibile ottimizzare i costi operativi e la velocità di ricerca vettoriale grazie a quattro funzionalità avanzate: cluster logici, disaggregazione dei dati storici e in streaming, storage a livelli, autoscaling e separazione hot-cold multi-tenancy.
Quando si usa Milvus come database vettoriale, si possono scegliere tre diverse opzioni di implementazione, ognuna con i suoi punti di forza e vantaggi. Nella prossima sezione parleremo di ciascuna di esse.
Opzioni di distribuzione di Milvus
Per iniziare a usare Milvus si può scegliere tra quattro opzioni di distribuzione: Milvus Lite, Milvus Standalone, Milvus Distributed e Zilliz Cloud (Milvus gestito). Ciascuna opzione di distribuzione è progettata per adattarsi ai vari scenari del nostro caso d'uso, come le dimensioni dei nostri dati, lo scopo della nostra applicazione e la scala della nostra applicazione.
Milvus Lite
Milvus Lite è una versione leggera di Milvus e rappresenta il modo più semplice per iniziare. Nella prossima sezione vedremo come eseguire Milvus Lite in azione e tutto ciò che dobbiamo fare per iniziare è installare la libreria Pymilvus con pip. Dopodiché, potremo eseguire la maggior parte delle funzionalità principali di Milvus come database vettoriale.
Milvus Lite è perfetto per la prototipazione rapida o per scopi di apprendimento e può essere eseguito in un notebook Jupyter senza alcuna configurazione complicata. In termini di archiviazione vettoriale, Milvus Lite è adatto a memorizzare fino a un milione di embeddings vettoriali. Grazie alla sua leggerezza e alla capacità di memorizzazione, Milvus Lite è un'opzione di distribuzione perfetta per lavorare con i dispositivi edge, come il motore di ricerca di documenti privati, il rilevamento di oggetti sul dispositivo, ecc.
Milvus Standalone
Milvus Standalone è una distribuzione di server a macchina singola contenuta in un'immagine Docker. Pertanto, per iniziare è sufficiente installare Milvus in Docker e avviare il contenitore Docker. Nella prossima sezione vedremo anche l'implementazione dettagliata di Milvus Standalone.
Milvus Standalone è ideale per la creazione e la produzione di applicazioni su piccola e media scala, in quanto è in grado di memorizzare fino a 10 milioni di embeddings vettoriali. Inoltre, Milvus Standalone offre un'elevata disponibilità attraverso una modalità di backup primario, che lo rende altamente affidabile per l'uso in applicazioni pronte per la produzione.
È possibile utilizzare Milvus Standalone, ad esempio, dopo aver eseguito una rapida prototipazione e aver appreso le funzionalità di Milvus con Milvus Lite, poiché sia Milvus Standalone che Milvus Lite condividono la stessa API lato client.
Milvus distribuito
Milvus Distributed è un'opzione di distribuzione che sfrutta un'architettura basata sul cloud, dove l'ingestione e il recupero dei dati sono gestiti separatamente, consentendo un'applicazione altamente scalabile ed efficiente.
Per eseguire Milvus Distributed, in genere è necessario utilizzare un cluster Kubernetes per consentire l'esecuzione del contenitore su più macchine e ambienti. L'applicazione di un cluster Kubernetes garantisce la scalabilità e la flessibilità di Milvus Distributed nel personalizzare le risorse allocate a seconda della domanda e del carico di lavoro. Ciò significa anche che se una parte si guasta, le altre possono subentrare, assicurando che l'intero sistema rimanga ininterrotto.
Milvus Distributed è in grado di gestire fino a decine di miliardi di embeddings vettoriali ed è stato progettato appositamente per i casi d'uso in cui i dati sono troppo grandi per essere archiviati in un'unica macchina server. Pertanto, questa opzione di distribuzione è perfetta per i clienti aziendali che servono un'ampia base di utenti.
Figura: Capacità di memorizzazione dell'incorporazione vettoriale delle diverse opzioni di distribuzione di Milvus.
In questo articolo vi mostreremo come iniziare a lavorare sia con Milvus Lite che con Milvus Standalone, in quanto è possibile iniziare rapidamente con entrambi i metodi senza complicate configurazioni. Milvus Distributed, invece, è più complicato da configurare. Una volta configurato Milvus Distributed, il codice e il processo logico per creare collezioni, ingerire dati, eseguire ricerche vettoriali, ecc. sono simili a quelli di Milvus Lite e Milvus Standalone, poiché condividono la stessa API lato client.
Oltre alle tre opzioni di distribuzione sopra menzionate, è possibile provare Milvus gestito su Zilliz Cloud per un'esperienza senza problemi. Parleremo di Zilliz Cloud più avanti in questo articolo.
Come iniziare con Milvus Lite
Milvus Lite può essere implementato subito con Python importando una libreria chiamata Pymilvus con pip. Prima di installare Pymilvus, assicuratevi che il vostro ambiente soddisfi i seguenti requisiti:
Ubuntu >= 20.04 (x86_64 e arm64)
MacOS >= 11.0 (Apple Silicon M1/M2 e x86_64)
Python 3.7 o successivo
Una volta soddisfatti questi requisiti, è possibile installare Milvus Lite e le dipendenze necessarie per la dimostrazione utilizzando il seguente comando:
!pip install -U pymilvus
!pip install "pymilvus[model]"
!pip install -U pymilvus
: Questo comando installa o aggiorna la libreriapymilvus
, l'SDK Python di Milvus. Milvus Lite viene fornito con PyMilvus, quindi questa singola riga di codice è tutto ciò che serve per installare Milvus Lite.!pip install "pymilvus[model]"
: Questo comando aggiunge funzionalità avanzate e strumenti extra pre-integrati con Milvus, tra cui modelli di apprendimento automatico come Hugging Face Transformers, modelli di incorporazione Jina AI e modelli di reranking.
Ecco i passi da seguire con Milvus Lite:
Trasformare i dati di testo nella loro rappresentazione di embedding utilizzando un modello di embedding.
Creare uno schema nel nostro database Milvus per memorizzare i dati di testo e le loro rappresentazioni di embedding.
Memorizzare e indicizzare i dati nello schema.
Eseguire una semplice ricerca vettoriale sui dati memorizzati.
Figura: Flusso di lavoro dell'operazione di ricerca vettoriale.
Per trasformare i dati di testo in incorporazioni vettoriali, utilizzeremo un modello di incorporamento di SentenceTransformers chiamato "all-MiniLM-L6-v2". Questo modello di embedding trasforma il nostro testo in un embedding vettoriale a 384 dimensioni. Carichiamo il modello, trasformiamo i dati del testo e mettiamo tutto insieme.
from pymilvus import model
docs = [
"Artificial intelligence was founded as an academic discipline in 1956.",
"Alan Turing was the first person to conduct substantial research in AI.",
"Born in Maida Vale, London, Turing was raised in southern England.",
]
sentence_transformer_ef = model.dense.SentenceTransformerEmbeddingFunction(
model_name='all-MiniLM-L6-v2',
device='cpu'
)
vectors = sentence_transformer_ef.encode_documents(docs)
data = [ {"id": i, "vector": vectors[i], "text": docs[i]} for i in range(len(vectors)) ]
Quindi, creiamo uno schema per memorizzare tutti i dati di cui sopra in Milvus. Come si può vedere qui sopra, i nostri dati sono costituiti da tre campi: ID, vettore e testo. Pertanto, creeremo uno schema con questi tre campi.
from pymilvus import MilvusClient, DataType, db, connections
schema = MilvusClient.create_schema(
auto_id=False,
enable_dynamic_field=True,
)
# Add fields to schema
schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True)
schema.add_field(field_name="vector", datatype=DataType.FLOAT_VECTOR, dim=384)
schema.add_field(field_name="text", datatype=DataType.VARCHAR, max_length=512)
Con Milvus Lite, possiamo creare facilmente una collezione su un determinato database in base allo schema definito sopra, nonché inserire e indicizzare i dati nella collezione in poche righe di codice.
client = MilvusClient("./milvus_demo.db")
index_params = client.prepare_index_params()
# Add indexes
index_params.add_index(
field_name="vector",
index_type="AUTOINDEX",
metric_type="COSINE"
)
# Create collection
client.create_collection(
collection_name="demo_collection",
schema=schema,
index_params=index_params
)
# Insert data into collection
res = client.insert(
collection_name="demo_collection",
data=data
)
Nel codice qui sopra, creiamo una raccolta chiamata "demo_collection" all'interno di un database Milvus chiamato "milvus_demo". Quindi, indicizziamo tutti i nostri dati nella "demo_collection" appena creata.
Ora che abbiamo i nostri dati nel database, possiamo eseguire una ricerca vettoriale su di essi per qualsiasi query. Supponiamo di avere una domanda: "Chi è Alan Turing?". Possiamo ottenere la risposta più appropriata alla domanda eseguendo i seguenti passaggi:
Trasformare la nostra query in un embedding vettoriale utilizzando lo stesso modello di embedding che abbiamo usato per trasformare i nostri dati nel database in embeddings.
Calcolare la somiglianza tra l'embedding della nostra query e l'embedding di ogni voce del database utilizzando metriche come la somiglianza coseno o la distanza euclidea.
Recuperare la voce più simile come risposta appropriata alla nostra query.
Di seguito è riportata l'implementazione dei passaggi sopra descritti con Milvus:
query = ["Who is Alan Turing"]
query_embedding = sentence_transformer_ef.encode_queries(query)
# Load collection
client.load_collection(
collection_name="demo_collection"
)
# Vector search
res = client.search(
collection_name="demo_collection",
data=query_embedding,
limit=1,
output_fields=["text"],
)
print(res)
"""
Output:
data: ["[{'id': 1, 'distance': 0.7199002504348755, 'entity': {'text': 'Alan Turing was the first person to conduct substantial research in AI.'}}]"]
"""
E questo è tutto! Per saperne di più su altre funzionalità offerte da Milvus, come la gestione dei database, l'inserimento e l'eliminazione di collezioni, la scelta del giusto metodo di indicizzazione e l'esecuzione di ricerche vettoriali più avanzate con il filtraggio dei metadati e la ricerca ibrida, consultare la documentazione di Milvus.
Come iniziare con Milvus Standalone
Milvus Standalone è un'opzione di distribuzione in cui tutto è racchiuso in un contenitore Docker. Pertanto, è necessario installare Milvus in Docker e poi avviare il contenitore Docker per iniziare con Milvus Standalone.
Prima di installare Milvus Standalone, assicuratevi che l'hardware e il software soddisfino i requisiti descritti in questa pagina. Inoltre, assicuratevi di aver installato Docker. Per installare Docker, consultare questa pagina.
Una volta che il nostro sistema soddisfa i requisiti e abbiamo installato Docker, possiamo procedere con l'installazione di Milvus in Docker usando il seguente comando:
# Download the installation script
$ curl -sfL <https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh> -o standalone_embed.sh
# Start the Docker container
$ bash standalone_embed.sh start
Nel codice sopra riportato, avviamo anche il contenitore Docker e, una volta avviato, otterremo un output simile a quello riportato di seguito:
Figura: Messaggio dopo l'avvio del contenitore Docker.
Dopo aver eseguito lo script di installazione "standalone_embed.sh" di cui sopra, viene avviato un contenitore Docker chiamato "milvus" sulla porta 19530. Pertanto, possiamo creare un nuovo database e accedere a tutto ciò che riguarda il database Milvus puntando a questa porta durante la creazione delle connessioni.
Supponiamo di voler creare un database chiamato "milvus_demo", simile a quello che abbiamo fatto in Milvus Lite. Possiamo farlo come segue:
conn = connections.connect(host="127.0.0.1", port=19530)
database = db.create_database("milvus_demo")
client = MilvusClient(
uri="<http://localhost:19530>",
token="root:Milvus",
db_name="milvus_demo"
)
Successivamente, è possibile verificare se il database appena creato chiamato "milvus_demo" esiste davvero nella vostra istanza Milvus accedendo all'interfaccia web di Milvus. Come suggerisce il nome, Milvus Web UI è un'interfaccia grafica fornita da Milvus per osservare le statistiche e le metriche dei componenti, controllare l'elenco e i dettagli di database, raccolte e configurazioni. È possibile accedere a Milvus Web UI una volta avviato il contenitore Docker di cui sopra all'indirizzo http://127.0.0.1:9091/webui/.
Accedendo al link di cui sopra, si vedrà una pagina di destinazione come questa:
Sotto la scheda "Collections", vedrete che il nostro database "milvus_demo" è stato creato con successo. Come si può vedere, con questa interfaccia web si possono controllare anche altre cose, come l'elenco delle collezioni, le configurazioni, le query eseguite e così via.
Ora possiamo eseguire tutto esattamente come abbiamo visto nella sezione Milvus Lite. Creiamo una collezione chiamata "demo_collection" all'interno del database "milvus_demo" che consiste di tre campi, gli stessi che avevamo nella sezione Milvus Lite. Quindi, inseriremo i nostri dati nella collezione.
index_params = client.prepare_index_params()
# Add indexes
index_params.add_index(
field_name="vector",
index_type="AUTOINDEX",
metric_type="COSINE"
)
# Create collection
client.create_collection(
collection_name="demo_collection",
schema=schema,
index_params=index_params
)
# Insert data into collection
res = client.insert(
collection_name="demo_collection",
data=data
)
Anche il codice per eseguire un'operazione di ricerca vettoriale è lo stesso di Milvus Lite, come si può vedere nel codice sottostante:
query = ["Who is Alan Turing"]
query_embedding = sentence_transformer_ef.encode_queries(query)
# Load collection
client.load_collection(
collection_name="demo_collection"
)
# Vector search
res = client.search(
collection_name="demo_collection",
data=query_embedding,
limit=1,
output_fields=["text"],
)
print(res)
"""
Output:
data: ["[{'id': 1, 'distance': 0.7199004292488098, 'entity': {'text': 'Alan Turing was the first person to conduct substantial research in AI.'}}]"]
"""
Oltre a Docker, è possibile utilizzare Milvus Standalone con Docker Compose (per Linux) e Docker Desktop (per Windows).
Quando non utilizziamo più la nostra istanza Milvus, possiamo fermare Milvus Standalone con il seguente comando:
$ bash standalone_embed.sh stop
Milvus completamente gestito
Un modo alternativo per iniziare a lavorare con Milvus è quello di utilizzare un'infrastruttura nativa basata su cloud in Zilliz Cloud, dove è possibile ottenere un'esperienza senza problemi e 10 volte più veloce.
Zilliz Cloud offre cluster dedicati con ambienti e risorse dedicate per supportare la vostra applicazione AI. Trattandosi di un database basato sul cloud costruito su Milvus, non è necessario impostare e gestire un'infrastruttura locale. Zilliz Cloud offre anche funzionalità più avanzate, come la separazione tra archiviazione vettoriale e calcolo, il backup dei dati su sistemi di archiviazione a oggetti popolari come S3 e il caching dei dati per accelerare le operazioni di ricerca e recupero dei vettori.
Tuttavia, un aspetto da considerare quando si prendono in considerazione i servizi basati sul cloud è il costo operativo. Nella maggior parte dei casi, è necessario pagare anche quando il cluster è inattivo, senza attività di ingestione dei dati o di ricerca vettoriale. Se volete ottimizzare ulteriormente i costi operativi e le prestazioni della vostra applicazione, Zilliz Cloud Serverless è un'opzione eccellente.
Figura: Vantaggi principali dell'utilizzo di Zilliz Cloud Serverless.
Zilliz Cloud Serverless è disponibile sui principali provider cloud come AWS, Azure e GCP. Offre caratteristiche come la tariffazione pay-as-you-go, ovvero si paga solo quando si utilizza il cluster.
Zilliz Cloud Serverless implementa anche tecnologie avanzate come i cluster logici, l'autoscaling, lo storage a livelli, la disaggregazione dei dati storici e in streaming e la separazione dei dati caldo-freddo. Queste caratteristiche consentono a Zilliz Cloud Serverless di ottenere un risparmio sui costi fino a 50 volte e operazioni di ricerca vettoriale circa 10 volte più veloci rispetto a Milvus in-memory.
Figura: Illustrazione dello storage a livelli e della separazione dei dati caldo-freddo.
Se desiderate iniziare a utilizzare Zilliz Cloud Serverless, consultate questa pagina per maggiori informazioni.
Conclusioni
Milvus si distingue come database vettoriale versatile e potente, progettato per affrontare le sfide della gestione dei dati non strutturati e dell'esecuzione di operazioni di ricerca vettoriale rapide ed efficienti nelle moderne applicazioni di intelligenza artificiale. Con opzioni di distribuzione come Milvus Lite per la prototipazione rapida, Milvus Standalone per applicazioni di piccole e medie dimensioni e Milvus Distributed per la scalabilità a livello aziendale, offre la flessibilità necessaria per soddisfare le dimensioni e la complessità di qualsiasi progetto.
Inoltre, Zilliz Cloud Serverless estende le funzionalità di Milvus nel cloud e fornisce un modello economico, pay-as-you-go, che elimina la necessità di un'infrastruttura locale. Grazie a funzionalità avanzate come lo storage a livelli e l'autoscaling, Zilliz Cloud Serverless garantisce operazioni di ricerca vettoriale più rapide, ottimizzando i costi.
- Che cos'è Milvus?
- Opzioni di distribuzione di Milvus
- Come iniziare con Milvus Lite
- Come iniziare con Milvus Standalone
- Milvus completamente gestito
- Conclusioni
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