🚀 Testen Sie Zilliz Cloud, die vollständig verwaltete Milvus, kostenlos – erleben Sie 10x schnellere Leistung! Jetzt testen>>

milvus-logo
LFAI

HomeBlogsWie Sie mit Milvus beginnen

Wie Sie mit Milvus beginnen

  • Engineering
January 17, 2025
Ruben Winastwan

How to get started with Milvus Wie man mit Milvus anfängt

Letzte Aktualisierung Januar 2025

Die Fortschritte im Bereich der Large Language Models(LLMs) und das wachsende Datenvolumen erfordern eine flexible und skalierbare Infrastruktur zur Speicherung riesiger Informationsmengen, beispielsweise eine Datenbank. Herkömmliche Datenbanken sind jedoch für die Speicherung von tabellarischen und strukturierten Daten ausgelegt, während die Informationen, die für die Nutzung der Leistung von hochentwickelten LLMs und Algorithmen zur Informationsgewinnung nützlich sind, unstrukturiert sind, wie z. B. Text, Bilder, Videos oder Audio.

Vektordatenbanken sind Datenbanksysteme, die speziell für unstrukturierte Daten entwickelt wurden. Mit Vektordatenbanken können nicht nur riesige Mengen unstrukturierter Daten gespeichert werden, sondern es können auch Vektorsuchen durchgeführt werden. Vektordatenbanken verfügen über fortschrittliche Indizierungsmethoden wie Inverted File Index (IVFFlat) oder Hierarchical Navigable Small World(HNSW), um schnelle und effiziente Vektorsuch- und Informationsgewinnungsprozesse durchzuführen.

Milvus ist eine Open-Source-Vektordatenbank, mit der wir alle vorteilhaften Funktionen einer Vektordatenbank nutzen können. Das werden wir in diesem Beitrag behandeln:

Was ist Milvus?

Milvus ist eine Open-Source-Vektordatenbank, die es uns ermöglicht, große Mengen unstrukturierter Daten zu speichern und schnelle und effiziente Vektorsuchen durchzuführen. Milvus ist sehr nützlich für viele populäre GenAI-Anwendungen, wie z.B. Empfehlungssysteme, personalisierte Chatbots, Anomalieerkennung, Bildsuche, natürliche Sprachverarbeitung und Retrieval Augmented Generation(RAG).

Die Verwendung von Milvus als Vektordatenbank bietet mehrere Vorteile:

  • Milvus bietet mehrere Bereitstellungsoptionen, aus denen Sie je nach Ihrem Anwendungsfall und der Größe der zu erstellenden Anwendungen wählen können.

  • Milvus unterstützt eine Vielzahl von Indizierungsmethoden, um verschiedenen Daten- und Leistungsanforderungen gerecht zu werden, darunter In-Memory-Optionen wie FLAT, IVFFlat, HNSW und SCANN, quantisierte Varianten für Speichereffizienz, On-Disk-ANN für große Datensätze und GPU-optimierte Indizes wie GPU_CAGRA, GPU_IVF_FLAT und GPU_IVF_PQ für beschleunigte, speichereffiziente Suchen.

  • Milvus bietet auch eine hybride Suche, bei der wir eine Kombination aus dichten Einbettungen, spärlichen Einbettungen und Metadatenfilterung während der Vektorsuche verwenden können, was zu genaueren Suchergebnissen führt. Darüber hinaus unterstützt Milvus 2.5 jetzt eine hybride Volltextsuche und eine Vektorsuche, die Ihre Suche noch genauer macht.

  • Milvus kann über die Zilliz Cloud vollständig in der Cloud genutzt werden, wo Sie die Betriebskosten und die Geschwindigkeit der Vektorsuche dank vier fortschrittlicher Funktionen optimieren können: logische Cluster, Disaggregation von Streaming- und historischen Daten, Tiered Storage, Autoscaling und Hot-Cold-Trennung mit mehreren Mandanten.

Wenn Sie Milvus als Vektordatenbank verwenden, können Sie zwischen drei verschiedenen Bereitstellungsoptionen wählen, die jeweils ihre Stärken und Vorteile haben. Wir werden im nächsten Abschnitt auf jede dieser Optionen eingehen.

Milvus-Bereitstellungsoptionen

Für den Start mit Milvus stehen vier Bereitstellungsoptionen zur Verfügung: Milvus Lite, Milvus Standalone, Milvus Distributed und Zilliz Cloud (verwaltetes Milvus). Jede Bereitstellungsoption ist auf verschiedene Szenarien in unserem Anwendungsfall zugeschnitten, wie z. B. die Größe unserer Daten, den Zweck unserer Anwendung und den Umfang unserer Anwendung.

Milvus Lite

Milvus Lite ist eine leichtgewichtige Version von Milvus und der einfachste Weg für uns, um loszulegen. Im nächsten Abschnitt werden wir sehen, wie wir Milvus Lite in Aktion ausführen können. Alles, was wir dafür tun müssen, ist die Installation der Pymilvus-Bibliothek mit pip. Danach können wir die meisten Kernfunktionalitäten von Milvus als Vektordatenbank ausführen.

Milvus Lite eignet sich perfekt für schnelles Prototyping oder zu Lernzwecken und kann ohne komplizierte Einrichtung in einem Jupyter-Notebook ausgeführt werden. Was die Vektorspeicherung angeht, so ist Milvus Lite für die Speicherung von bis zu einer Million Vektoreinbettungen geeignet. Aufgrund seines geringen Gewichts und seiner Speicherkapazität ist Milvus Lite eine perfekte Einsatzoption für die Arbeit mit Edge-Geräten, z. B. als Suchmaschine für private Dokumente, On-Device-Objekterkennung usw.

Milvus Standalone

Milvus Standalone ist eine Serverbereitstellung für eine einzelne Maschine, die in einem Docker-Image verpackt ist. Alles, was wir tun müssen, um loszulegen, ist die Installation von Milvus in Docker und der anschließende Start des Docker-Containers. Im nächsten Abschnitt sehen wir uns die detaillierte Implementierung von Milvus Standalone an.

Milvus Standalone ist ideal für die Entwicklung und Produktion von kleinen bis mittelgroßen Anwendungen, da es bis zu 10 Millionen Vektoreinbettungen speichern kann. Darüber hinaus bietet Milvus Standalone eine hohe Verfügbarkeit durch einen primären Backup-Modus, was es für den Einsatz in produktionsreifen Anwendungen äußerst zuverlässig macht.

Wir können Milvus Standalone zum Beispiel auch nach einem schnellen Prototyping und dem Erlernen der Milvus-Funktionalitäten mit Milvus Lite verwenden, da sowohl Milvus Standalone als auch Milvus Lite dieselbe clientseitige API nutzen.

Milvus Verteilt

Milvus Distributed ist eine Bereitstellungsoption, die eine Cloud-basierte Architektur nutzt, bei der Dateneingabe und -abruf separat gehandhabt werden, was eine hoch skalierbare und effiziente Anwendung ermöglicht.

Für die Ausführung von Milvus Distributed ist in der Regel ein Kubernetes-Cluster erforderlich, damit der Container auf mehreren Maschinen und Umgebungen ausgeführt werden kann. Der Einsatz eines Kubernetes-Clusters gewährleistet die Skalierbarkeit und Flexibilität von Milvus Distributed, indem die zugewiesenen Ressourcen je nach Bedarf und Arbeitslast angepasst werden können. Das bedeutet auch, dass bei einem Ausfall eines Teils die anderen Teile übernehmen können, so dass das gesamte System unterbrechungsfrei bleibt.

Milvus Distributed ist in der Lage, bis zu zehn Milliarden Vektoreinbettungen zu verarbeiten und wurde speziell für Anwendungsfälle entwickelt, in denen die Daten zu groß sind, um auf einem einzelnen Server gespeichert zu werden. Daher ist diese Bereitstellungsoption ideal für Unternehmensclients, die eine große Benutzerbasis bedienen.

Abbildung: Speicherkapazität für die Vektoreinbettung bei verschiedenen Milvus-Bereitstellungsoptionen.

In diesem Artikel zeigen wir Ihnen, wie Sie sowohl mit Milvus Lite als auch mit Milvus Standalone beginnen können, da Sie mit beiden Methoden ohne komplizierte Einrichtung schnell loslegen können. Milvus Distributed hingegen ist komplizierter einzurichten. Sobald wir Milvus Distributed eingerichtet haben, sind der Code und der logische Prozess zur Erstellung von Sammlungen, zur Aufnahme von Daten, zur Durchführung von Vektorsuchen usw. ähnlich wie bei Milvus Lite und Milvus Standalone, da sie dieselbe clientseitige API verwenden.

Zusätzlich zu den drei oben genannten Bereitstellungsoptionen können Sie auch das verwaltete Milvus auf der Zilliz Cloud ausprobieren, um eine problemlose Erfahrung zu machen. Wir werden auch über Zilliz Cloud später in diesem Artikel sprechen.

Erste Schritte mit Milvus Lite

Milvus Lite kann direkt mit Python implementiert werden, indem eine Bibliothek namens Pymilvus mit pip importiert wird. Bevor Sie Pymilvus installieren, stellen Sie sicher, dass Ihre Umgebung die folgenden Anforderungen erfüllt:

  • Ubuntu >= 20.04 (x86_64 und arm64)

  • MacOS >= 11.0 (Apple Silicon M1/M2 und x86_64)

  • Python 3.7 oder höher

Sobald diese Voraussetzungen erfüllt sind, können Sie Milvus Lite und die notwendigen Abhängigkeiten für die Demonstration mit dem folgenden Befehl installieren:

!pip install -U pymilvus
!pip install "pymilvus[model]"
  • !pip install -U pymilvus: Dieser Befehl installiert oder aktualisiert die pymilvus Bibliothek, das Python SDK von Milvus. Milvus Lite ist mit PyMilvus gebündelt, so dass diese einzige Codezeile alles ist, was Sie brauchen, um Milvus Lite zu installieren.

  • !pip install "pymilvus[model]": Dieser Befehl fügt erweiterte Funktionen und zusätzliche Tools hinzu, die bereits in Milvus integriert sind, darunter Machine-Learning-Modelle wie Hugging Face Transformers, Jina AI Embedding Models und Reranking Models.

Hier sind die Schritte, die wir mit Milvus Lite durchführen werden:

  1. Umwandlung von Textdaten in ihre Einbettungsrepräsentation mithilfe eines Einbettungsmodells.

  2. Erstellen eines Schemas in unserer Milvus-Datenbank, um unsere Textdaten und deren Einbettungsrepräsentationen zu speichern.

  3. Speichern und indizieren Sie unsere Daten in unserem Schema.

  4. Durchführen einer einfachen Vektorsuche auf den gespeicherten Daten.

Abbildung: Arbeitsablauf einer Vektorsuche.

Um Textdaten in Vektoreinbettungen umzuwandeln, verwenden wir ein Einbettungsmodell von SentenceTransformers namens "all-MiniLM-L6-v2". Dieses Einbettungsmodell wandelt unseren Text in eine 384-dimensionale Vektoreinbettung um. Laden wir das Modell, transformieren wir unsere Textdaten und packen wir alles zusammen.

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)) ]

Als Nächstes erstellen wir ein Schema, um alle oben genannten Daten in Milvus zu speichern. Wie Sie oben sehen können, bestehen unsere Daten aus drei Feldern: ID, Vektor und Text. Daher werden wir ein Schema mit diesen drei Feldern erstellen.

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)

Mit Milvus Lite können wir ganz einfach eine Sammlung in einer bestimmten Datenbank auf der Grundlage des oben definierten Schemas erstellen und die Daten mit nur wenigen Zeilen Code in die Sammlung einfügen und indizieren.

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
)

Im obigen Code erstellen wir eine Sammlung namens "demo_collection" in einer Milvus-Datenbank namens "milvus_demo". Als Nächstes indexieren wir alle unsere Daten in die gerade erstellte "demo_collection".

Jetzt, wo wir unsere Daten in der Datenbank haben, können wir für jede beliebige Abfrage eine Vektorsuche durchführen. Nehmen wir an, wir haben eine Abfrage: "Wer ist Alan Turing?". Wir können die am besten geeignete Antwort auf die Abfrage erhalten, indem wir die folgenden Schritte durchführen:

  1. Umwandlung unserer Abfrage in eine Vektoreinbettung unter Verwendung desselben Einbettungsmodells, das wir zur Umwandlung unserer Daten in der Datenbank in Einbettungen verwendet haben.

  2. Berechnung der Ähnlichkeit zwischen der Einbettung unserer Anfrage und der Einbettung jedes Eintrags in der Datenbank unter Verwendung von Metriken wie Cosinus-Ähnlichkeit oder Euklidischer Abstand.

  3. Abrufen des ähnlichsten Eintrags als passende Antwort auf unsere Anfrage.

Nachfolgend sehen Sie die Implementierung der oben genannten Schritte mit 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.'}}]"] 
"""

Und das war's! In der Milvus-Dokumentation können Sie auch mehr über andere Funktionen erfahren, die Milvus bietet, wie z. B. die Verwaltung von Datenbanken, das Einfügen und Löschen von Sammlungen, die Wahl der richtigen Indizierungsmethode und die Durchführung erweiterter Vektorsuchen mit Metadatenfilterung und hybrider Suche.

Erste Schritte mit Milvus Standalone

Milvus Standalone ist eine Bereitstellungsoption, bei der alles in einen Docker-Container gepackt ist. Daher müssen wir Milvus in Docker installieren und dann den Docker-Container starten, um mit Milvus Standalone beginnen zu können.

Bevor Sie Milvus Standalone installieren, stellen Sie sicher, dass sowohl Ihre Hardware als auch Ihre Software die auf dieser Seite beschriebenen Anforderungen erfüllen. Stellen Sie außerdem sicher, dass Sie Docker installiert haben. Um Docker zu installieren, lesen Sie bitte diese Seite.

Sobald unser System die Anforderungen erfüllt und wir Docker installiert haben, können wir mit der Milvus-Installation in Docker mit dem folgenden Befehl fortfahren:

# 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

Im obigen Code starten wir auch den Docker-Container und sobald er gestartet ist, erhalten Sie eine ähnliche Ausgabe wie unten:

Abbildung: Meldung nach erfolgreichem Start des Docker-Containers.

Nach der Ausführung des obigen Installationsskripts "standalone_embed.sh" wird ein Docker-Container namens "milvus" an Port 19530 gestartet. Daher können wir eine neue Datenbank erstellen und auf alles zugreifen, was mit der Milvus-Datenbank zu tun hat, indem wir beim Erstellen von Verbindungen auf diesen Port verweisen.

Nehmen wir an, wir wollen eine Datenbank mit dem Namen "milvus_demo" erstellen, ähnlich wie wir es oben in Milvus Lite getan haben. Wir können dies wie folgt tun:

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"
)

Als nächstes können Sie überprüfen, ob die neu erstellte Datenbank mit dem Namen "milvus_demo" wirklich in Ihrer Milvus-Instanz existiert, indem Sie auf die Milvus-Web-UI zugreifen. Wie der Name schon sagt, ist Milvus Web UI eine grafische Benutzeroberfläche, die von Milvus zur Verfügung gestellt wird, um die Statistiken und Metriken der Komponenten zu beobachten und die Liste und Details der Datenbanken, Sammlungen und Konfigurationen zu überprüfen. Sie können auf Milvus Web UI zugreifen, sobald Sie den oben genannten Docker-Container unter http://127.0.0.1:9091/webui/ gestartet haben.

Wenn Sie auf den oben genannten Link zugreifen, sehen Sie eine Landing Page wie diese:

Unter der Registerkarte "Collections" sehen Sie, dass unsere Datenbank "milvus_demo" erfolgreich erstellt wurde. Wie Sie sehen, können Sie mit dieser Web-UI auch andere Dinge wie die Liste der Sammlungen, Konfigurationen, die durchgeführten Abfragen usw. überprüfen.

Jetzt können wir alles genau so durchführen, wie wir es im obigen Abschnitt über Milvus Lite gesehen haben. Erstellen wir eine Sammlung mit dem Namen "demo_collection" in der Datenbank "milvus_demo", die aus drei Feldern besteht, genau wie im Abschnitt "Milvus Lite" zuvor. Dann werden wir unsere Daten in die Sammlung einfügen.

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
)

Der Code zur Durchführung einer Vektorsuche ist ebenfalls derselbe wie bei Milvus Lite, wie Sie im folgenden Code sehen können:

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.'}}]"] 
"""

Abgesehen von der Verwendung von Docker können Sie Milvus Standalone auch mit Docker Compose (für Linux) und Docker Desktop (für Windows) verwenden.

Wenn wir unsere Milvus-Instanz nicht mehr verwenden, können wir Milvus Standalone mit dem folgenden Befehl beenden:

$ bash standalone_embed.sh stop

Vollständig verwaltetes Milvus

Ein alternativer Weg, um mit Milvus zu beginnen, ist über eine native Cloud-basierte Infrastruktur in Zilliz Cloud, wo Sie eine problemlose, 10x schnellere Erfahrung machen können.

Zilliz Cloud bietet dedizierte Cluster mit dedizierten Umgebungen und Ressourcen zur Unterstützung Ihrer KI-Anwendung. Da es sich um eine Cloud-basierte Datenbank handelt, die auf Milvus aufbaut, müssen wir keine lokale Infrastruktur einrichten und verwalten. Zilliz Cloud bietet auch fortschrittlichere Funktionen, wie z. B. die Trennung zwischen Vektorspeicherung und Berechnung, Datensicherung in gängigen Objektspeichersystemen wie S3 und Datencaching zur Beschleunigung von Vektorsuch- und -abrufvorgängen.

Ein Punkt, den man bei Cloud-basierten Diensten beachten sollte, sind jedoch die Betriebskosten. In den meisten Fällen fallen auch dann Kosten an, wenn der Cluster im Leerlauf ist und keine Dateneingabe oder Vektorsuche stattfindet. Wenn Sie die Betriebskosten und die Leistung Ihrer Anwendung weiter optimieren möchten, wäre Zilliz Cloud Serverless eine hervorragende Option.

Abbildung: Hauptvorteile der Nutzung von Zilliz Cloud Serverless.

Zilliz Cloud Serverless ist bei großen Cloud-Anbietern wie AWS, Azure und GCP verfügbar. Sie bietet Funktionen wie Pay-as-you-go-Preise, d. h. Sie zahlen nur, wenn Sie den Cluster nutzen.

Zilliz Cloud Serverless implementiert auch fortschrittliche Technologien wie logische Cluster, automatische Skalierung, Tiered Storage, Disaggregation von Streaming- und historischen Daten und Hot-Cold-Datentrennung. Diese Funktionen ermöglichen Zilliz Cloud Serverless bis zu 50-fache Kosteneinsparungen und etwa 10-fach schnellere Vektorsuchoperationen im Vergleich zu In-Memory Milvus.

Abbildung: Illustration von Tiered Storage und Hot-Cold-Datentrennung.

Wenn Sie mit Zilliz Cloud Serverless beginnen möchten, finden Sie auf dieser Seite weitere Informationen.

Fazit

Milvus zeichnet sich als vielseitige und leistungsstarke Vektordatenbank aus, die für die Herausforderungen der Verwaltung unstrukturierter Daten und der Durchführung schneller, effizienter Vektorsuchvorgänge in modernen KI-Anwendungen entwickelt wurde. Mit Bereitstellungsoptionen wie Milvus Lite für schnelles Prototyping, Milvus Standalone für kleine bis mittelgroße Anwendungen und Milvus Distributed für Skalierbarkeit auf Unternehmensebene bietet es Flexibilität für die Größe und Komplexität eines jeden Projekts.

Zusätzlich erweitert Zilliz Cloud Serverless die Fähigkeiten von Milvus in die Cloud und bietet ein kosteneffizientes Pay-as-you-go-Modell, das die Notwendigkeit einer lokalen Infrastruktur eliminiert. Mit fortschrittlichen Funktionen wie Tiered Storage und Auto-Scaling sorgt Zilliz Cloud Serverless für schnellere Vektorsuchvorgänge bei gleichzeitiger Kostenoptimierung.

Like the article? Spread the word

Weiterlesen