Warum und wann brauchen Sie eine zweckgebundene Vektordatenbank?
Dieser Artikel wurde ursprünglich auf AIAI veröffentlicht und wird hier mit Genehmigung wiederveröffentlicht.
Die zunehmende Beliebtheit von ChatGPT und anderen großen Sprachmodellen (LLMs) hat den Aufstieg von Vektorsuchtechnologien vorangetrieben, darunter speziell entwickelte Vektordatenbanken wie Milvus und Zilliz Cloud, Vektorsuchbibliotheken wie FAISS und in herkömmliche Datenbanken integrierte Vektorsuch-Plugins. Die Wahl der besten Lösung für Ihre Anforderungen kann jedoch eine Herausforderung sein. Wie bei der Wahl zwischen einem Spitzenrestaurant und einer Fast-Food-Kette hängt die Auswahl der richtigen Vektorsuchtechnologie von Ihren Bedürfnissen und Erwartungen ab.
In diesem Beitrag gebe ich einen Überblick über die Vektorsuche und ihre Funktionsweise, vergleiche verschiedene Vektorsuchtechnologien und erkläre, warum die Entscheidung für eine speziell entwickelte Vektordatenbank entscheidend ist.
Was ist die Vektorsuche, und wie funktioniert sie?
DieVektorsuche, auch bekannt als Vektorähnlichkeitssuche, ist eine Technik zum Abrufen der Top-k-Ergebnisse, die einem gegebenen Abfragevektor am ähnlichsten oder semantisch verwandt sind, aus einer umfangreichen Sammlung dichter Vektordaten.
Bevor wir eine Ähnlichkeitssuche durchführen, nutzen wir neuronale Netze, um unstrukturierte Daten wie Text, Bilder, Videos und Audio in hochdimensionale numerische Vektoren umzuwandeln, die als Einbettungsvektoren bezeichnet werden. So können wir beispielsweise das vortrainierte neuronale Faltungsnetzwerk ResNet-50 verwenden, um ein Vogelbild in eine Sammlung von Einbettungsvektoren mit 2.048 Dimensionen umzuwandeln. Hier werden die ersten drei und die letzten drei Vektorelemente aufgeführt: [0.1392, 0.3572, 0.1988, ..., 0.2888, 0.6611, 0.2909]
.
Ein Vogelbild von Patrice Bouchard
Nach der Erzeugung von Einbettungsvektoren vergleichen Vektorsuchmaschinen den räumlichen Abstand zwischen dem Eingabeabfragevektor und den Vektoren in den Vektorspeichern. Je näher sie sich im Raum befinden, desto ähnlicher sind sie sich.
Arithmetik der Einbettung
Beliebte Vektorsuchtechnologien
Auf dem Markt sind mehrere Vektorsuchtechnologien erhältlich, darunter Bibliotheken für maschinelles Lernen wie NumPy von Python, Vektorsuchbibliotheken wie FAISS, Vektorsuch-Plugins, die auf herkömmlichen Datenbanken aufbauen, und spezialisierte Vektordatenbanken wie Milvus und Zilliz Cloud.
Bibliotheken für maschinelles Lernen
Die Verwendung von Bibliotheken für maschinelles Lernen ist der einfachste Weg, um Vektorsuchen zu implementieren. Zum Beispiel können wir mit NumPy von Python einen Nearest Neighbor-Algorithmus in weniger als 20 Zeilen Code implementieren.
import numpy as np
# Function to calculate euclidean distance
def euclidean_distance(a, b):
return np.linalg.norm(a - b)
# Function to perform knn
def knn(data, target, k):
# Calculate distances between target and all points in the data
distances = [euclidean_distance(d, target) for d in data]
# Combine distances with data indices
distances = np.array(list(zip(distances, np.arange(len(data)))))
# Sort by distance
sorted_distances = distances[distances[:, 0].argsort()]
# Get the top k closest indices
closest_k_indices = sorted_distances[:k, 1].astype(int)
# Return the top k closest vectors
return data[closest_k_indices]
Wir können 100 zweidimensionale Vektoren erzeugen und den nächsten Nachbarn des Vektors [0.5, 0.5] finden.
# Define some 2D vectors
data = np.random.rand(100, 2)
# Define a target vector
target = np.array([0.5, 0.5])
# Define k
k = 3
# Perform knn
closest_vectors = knn(data, target, k)
# Print the result
print("The closest vectors are:")
print(closest_vectors)
Bibliotheken für maschinelles Lernen, wie z. B. NumPy von Python, bieten große Flexibilität zu geringen Kosten. Allerdings haben sie auch einige Einschränkungen. Zum Beispiel können sie nur eine kleine Datenmenge verarbeiten und gewährleisten keine Datenpersistenz.
Ich empfehle die Verwendung von NumPy oder anderen Bibliotheken für maschinelles Lernen für die Vektorsuche nur, wenn:
- Sie schnelles Prototyping benötigen.
- Sie sich nicht um die Datenpersistenz kümmern.
- Ihre Datengröße unter einer Million liegt und Sie keine skalare Filterung benötigen.
- Sie keine hohe Leistung benötigen.
Vektorsuchbibliotheken
Mit Hilfe von Vektorsuchbibliotheken können Sie schnell einen leistungsstarken Prototyp für ein Vektorsuchsystem erstellen. FAISS ist ein typisches Beispiel. Es ist Open-Source und wurde von Meta für effiziente Ähnlichkeitssuche und dichtes Vektorclustering entwickelt. FAISS kann Vektorsammlungen beliebiger Größe verarbeiten, auch solche, die nicht vollständig in den Speicher geladen werden können. Darüber hinaus bietet FAISS Werkzeuge für die Auswertung und Parameterabstimmung. Obwohl in C++ geschrieben, bietet FAISS eine Python/NumPy-Schnittstelle.
Nachfolgend finden Sie den Code für eine beispielhafte Vektorsuche auf der Grundlage von FAISS:
import numpy as np
import faiss
# Generate some example data
dimension = 64 # dimension of the vector space
database_size = 10000 # size of the database
query_size = 100 # number of queries to perform
np.random.seed(123) # make the random numbers predictable
# Generating vectors to index in the database (db_vectors)
db_vectors = np.random.random((database_size, dimension)).astype('float32')
# Generating vectors for query (query_vectors)
query_vectors = np.random.random((query_size, dimension)).astype('float32')
# Building the index
index = faiss.IndexFlatL2(dimension) # using the L2 distance metric
print(index.is_trained) # should return True
# Adding vectors to the index
index.add(db_vectors)
print(index.ntotal) # should return database_size (10000)
# Perform a search
k = 4 # we want to see 4 nearest neighbors
distances, indices = index.search(query_vectors, k)
# Print the results
print("Indices of nearest neighbors: \n", indices)
print("\nL2 distances to the nearest neighbors: \n", distances)
Vektorsuchbibliotheken wie FAISS sind einfach zu verwenden und schnell genug, um kleine Produktionsumgebungen mit Millionen von Vektoren zu verarbeiten. Sie können ihre Abfrageleistung verbessern, indem Sie Quantisierung und GPUs nutzen und die Datenabmessungen reduzieren.
Diese Bibliotheken haben jedoch einige Einschränkungen, wenn sie in der Produktion eingesetzt werden. So unterstützt FAISS beispielsweise nicht das Hinzufügen und Löschen von Daten in Echtzeit, Remote-Aufrufe, mehrere Sprachen, skalare Filterung, Skalierbarkeit oder Notfallwiederherstellung.
Verschiedene Arten von Vektordatenbanken
Vektordatenbanken wurden entwickelt, um die Einschränkungen der oben genannten Bibliotheken zu überwinden und eine umfassendere und praktischere Lösung für Produktionsanwendungen zu bieten.
Vier Arten von Vektordatenbanken sind auf dem Schlachtfeld verfügbar:
- Vorhandene relationale oder spaltenbasierte Datenbanken, die ein Vektorsuch-Plugin enthalten. PG Vector ist ein Beispiel dafür.
- Herkömmliche Suchmaschinen mit invertiertem Index und Unterstützung für dichte Vektorindizierung. ElasticSearch ist ein Beispiel dafür.
- Leichtgewichtige Vektordatenbanken, die auf Vektorsuchbibliotheken aufbauen. Chroma ist ein Beispiel dafür.
- Speziell angefertigte Vektordatenbanken. Dieser Datenbanktyp ist speziell für die Vektorsuche von Grund auf konzipiert und optimiert. Speziell entwickelte Vektordatenbanken bieten in der Regel erweiterte Funktionen, einschließlich verteilter Datenverarbeitung, Notfallwiederherstellung und Datenpersistenz. Milvus ist ein gutes Beispiel dafür.
Nicht alle Vektordatenbanken sind gleich. Jeder Stack hat einzigartige Vorteile und Einschränkungen, die sie für verschiedene Anwendungen mehr oder weniger geeignet machen.
Ich bevorzuge spezialisierte Vektordatenbanken gegenüber anderen Lösungen, weil sie die effizienteste und bequemste Option sind und zahlreiche einzigartige Vorteile bieten. In den folgenden Abschnitten werde ich am Beispiel von Milvus die Gründe für meine Bevorzugung erläutern.
Hauptvorteile speziell entwickelter Vektordatenbanken
Milvus ist eine verteilte, zweckbestimmte Open-Source-Vektordatenbank, die Milliarden von Einbettungsvektoren speichern, indizieren, verwalten und abrufen kann. Sie ist auch eine der beliebtesten Vektordatenbanken für die LLM-Augmented-Generierung. Als beispielhaftes Beispiel für zweckbestimmte Vektordatenbanken hat Milvus viele einzigartige Vorteile mit seinen Gegenstücken gemeinsam.
Datenpersistenz und kosteneffiziente Speicherung
Die Vermeidung von Datenverlusten ist zwar die Mindestanforderung an eine Datenbank, aber bei vielen Ein-Maschinen- und leichtgewichtigen Vektordatenbanken steht die Zuverlässigkeit der Daten nicht im Vordergrund. Im Gegensatz dazu legen speziell entwickelte verteilte Vektordatenbanken wie Milvus durch die Trennung von Speicherung und Berechnung den Schwerpunkt auf Systemstabilität, Skalierbarkeit und Datenpersistenz.
Darüber hinaus benötigen die meisten Vektordatenbanken, die ANN-Indizes (Approximate Nearest Neighbour) verwenden, viel Speicher für die Vektorsuche, da sie ANN-Indizes nur in den Speicher laden. Milvus unterstützt jedoch Festplattenindizes, wodurch die Speicherung mehr als zehnmal kostengünstiger ist als bei In-Memory-Indizes.
Optimale Abfrageleistung
Eine spezialisierte Vektordatenbank bietet eine optimale Abfrageleistung im Vergleich zu anderen Vektorsuchoptionen. So ist Milvus beispielsweise zehnmal schneller bei der Bearbeitung von Abfragen als Vektorsuch-Plugins. Milvus verwendet den ANN-Algorithmus anstelle des brutalen KNN-Suchalgorithmus für eine schnellere Vektorsuche. Darüber hinaus werden die Indizes gesplittet, wodurch die Zeit für den Aufbau eines Indexes bei zunehmendem Datenvolumen reduziert wird. Dank dieses Ansatzes kann Milvus problemlos Milliarden von Vektoren verarbeiten, wobei Daten in Echtzeit hinzugefügt und gelöscht werden. Im Gegensatz dazu eignen sich andere Add-ons für die Vektorsuche nur für Szenarien mit weniger als zehn Millionen Daten und seltenen Hinzufügungen und Löschungen.
Milvus unterstützt auch GPU-Beschleunigung. Interne Tests zeigen, dass die GPU-beschleunigte Vektorindizierung bei der Suche nach zehn Millionen Daten mehr als 10.000 QPS erreichen kann, was mindestens zehnmal schneller ist als die herkömmliche CPU-Indizierung bei der Abfrageleistung auf einer Maschine.
System-Zuverlässigkeit
Viele Anwendungen nutzen Vektordatenbanken für Online-Abfragen, die eine geringe Abfragelatenz und einen hohen Durchsatz erfordern. Diese Anwendungen erfordern ein Single-Machine-Failover auf Minutenebene, und einige erfordern sogar eine regionsübergreifende Disaster Recovery für kritische Szenarien. Herkömmliche Replikationsstrategien auf der Grundlage von Raft/Paxos sind sehr ressourcenintensiv und benötigen Hilfe bei der Vorverteilung der Daten, was zu einer geringen Zuverlässigkeit führt. Im Gegensatz dazu verfügt Milvus über eine verteilte Architektur, die K8s Message Queues für eine hohe Verfügbarkeit nutzt, wodurch die Wiederherstellungszeit verkürzt und Ressourcen gespart werden.
Bedienbarkeit und Beobachtbarkeit
Um Unternehmensanwender besser bedienen zu können, müssen Vektordatenbanken eine Reihe von Funktionen auf Unternehmensebene für eine bessere Bedienbarkeit und Beobachtbarkeit bieten. Milvus unterstützt mehrere Bereitstellungsmethoden, darunter K8s Operator und Helm chart, docker-compose und pip install, wodurch es für Benutzer mit unterschiedlichen Anforderungen zugänglich ist. Milvus bietet auch ein Überwachungs- und Alarmsystem, das auf Grafana, Prometheus und Loki basiert und die Beobachtbarkeit verbessert. Mit einer verteilten Cloud-nativen Architektur ist Milvus die branchenweit erste Vektordatenbank, die Multi-Tenant-Isolation, RBAC, Quotenbegrenzung und rollierende Upgrades unterstützt. All diese Ansätze machen die Verwaltung und Überwachung von Milvus wesentlich einfacher.
Die ersten Schritte mit Milvus in 3 einfachen Schritten innerhalb von 10 Minuten
Der Aufbau einer Vektordatenbank ist eine komplexe Aufgabe, aber die Verwendung einer solchen ist so einfach wie die Verwendung von Numpy und FAISS. Selbst Studenten, die mit KI nicht vertraut sind, können eine Vektorsuche auf der Grundlage von Milvus in nur zehn Minuten implementieren. Um hoch skalierbare und leistungsstarke Vektorsuchdienste zu nutzen, folgen Sie diesen drei Schritten:
- Installieren Sie Milvus auf Ihrem Server mit Hilfe des Milvus Deployment Dokuments.
- Implementieren Sie die Vektorsuche mit nur 50 Zeilen Code, indem Sie das Hello Milvus-Dokument zu Rate ziehen.
- Schauen Sie sich die Beispieldokumente von Towhee an, um einen Einblick in beliebte Anwendungsfälle von Vektordatenbanken zu erhalten.
- Was ist die Vektorsuche, und wie funktioniert sie?
- Beliebte Vektorsuchtechnologien
- Hauptvorteile speziell entwickelter Vektordatenbanken
- Die ersten Schritte mit Milvus in 3 einfachen Schritten innerhalb von 10 Minuten
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