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

milvus-logo
LFAI
  • Home
  • Blog
  • Effiziente Vektorähnlichkeitssuche in Empfehlungsworkflows mit Milvus und NVIDIA Merlin

Effiziente Vektorähnlichkeitssuche in Empfehlungsworkflows mit Milvus und NVIDIA Merlin

  • Engineering
December 15, 2023
Burcin Bozkaya

Dieser Beitrag wurde zuerst auf dem Medium-Kanal von NVIDIA Merlin veröffentlicht und mit Erlaubnis bearbeitet und hier erneut veröffentlicht. Er wurde gemeinsam von Burcin Bozkaya und William Hicks von NVIDIA und Filip Haltmayer und Li Liu von Zilliz verfasst.

Einführung

Moderne Empfehlungssysteme (Recsys) bestehen aus Trainings-/Inferenz-Pipelines, die mehrere Stufen der Datenaufnahme, der Datenvorverarbeitung, des Modelltrainings und des Hyperparameter-Tunings für die Suche, das Filtern, das Ranking und die Bewertung relevanter Artikel umfassen. Ein wesentlicher Bestandteil einer Empfehlungssystem-Pipeline ist das Auffinden von Dingen, die für einen Benutzer am relevantesten sind, insbesondere bei großen Objektkatalogen. Dieser Schritt beinhaltet in der Regel eine ANN-Suche (Approximate Nearest Neighbour) über eine indizierte Datenbank mit niedrigdimensionalen Vektordarstellungen (d. h. Einbettungen) von Produkt- und Benutzerattributen, die mit Hilfe von Deep-Learning-Modellen erstellt wurden, die auf Interaktionen zwischen Benutzern und Produkten/Dienstleistungen trainiert wurden.

NVIDIA Merlin, ein Open-Source-Framework, das für das Training von End-to-End-Modellen zur Erstellung von Empfehlungen in beliebigem Umfang entwickelt wurde, ist mit einem effizienten Index- und Such-Framework für Vektordatenbanken integriert. Ein solches Framework, das in letzter Zeit viel Aufmerksamkeit erregt hat, ist Milvus, eine Open-Source-Vektordatenbank, die von Zilliz entwickelt wurde. Sie bietet schnelle Index- und Abfragefunktionen. Milvus hat kürzlich die Unterstützung für GPU-Beschleunigung hinzugefügt, die NVIDIA-GPUs zur Unterstützung von KI-Workflows nutzt. Die Unterstützung der GPU-Beschleunigung ist eine gute Nachricht, da eine beschleunigte Vektorsuchbibliothek schnelle gleichzeitige Abfragen ermöglicht, was sich positiv auf die Latenzanforderungen in den heutigen Empfehlungssystemen auswirkt, bei denen Entwickler viele gleichzeitige Anfragen erwarten. Milvus hat über 5 Millionen Docker-Pulls, ~23.000 Sterne auf GitHub (Stand: September 2023), über 5.000 Unternehmenskunden und ist eine Kernkomponente vieler Anwendungen (siehe Anwendungsfälle).

Dieser Blog demonstriert, wie Milvus mit dem Merlin Recsys-Framework beim Training und bei der Inferenz arbeitet. Wir zeigen, wie Milvus Merlin in der Phase des Item Retrieval durch eine hocheffiziente Top-k-Vektoreinbettungssuche ergänzt und wie es mit NVIDIA Triton Inference Server (TIS) zur Inferenzzeit verwendet werden kann (siehe Abbildung 1). Unsere Benchmark-Ergebnisse zeigen eine beeindruckende Beschleunigung um das 37- bis 91-fache mit GPU-beschleunigtem Milvus, das NVIDIA RAFT mit den von Merlin Models generierten Vektoreinbettungen verwendet. Der Code, mit dem wir die Merlin-Milvus-Integration und die detaillierten Benchmark-Ergebnisse zeigen, sowie die Bibliothek, die unsere Benchmark-Studie ermöglicht hat, sind hier verfügbar.

Abbildung 1. Mehrstufiges Empfehlungssystem mit dem Milvus-Framework, das zur Abfragephase beiträgt. Quelle für die ursprüngliche mehrstufige Abbildung: dieser Blogbeitrag.

Die Herausforderungen für Empfehlungssysteme

Angesichts der mehrstufigen Natur von Empfehlungssystemen und der Verfügbarkeit verschiedener Komponenten und Bibliotheken, die sie integrieren, besteht eine große Herausforderung darin, alle Komponenten nahtlos in eine End-to-End-Pipeline zu integrieren. In unseren Beispiel-Notebooks wollen wir zeigen, dass die Integration mit weniger Aufwand möglich ist.

Eine weitere Herausforderung bei Empfehlungsworkflows ist die Beschleunigung bestimmter Teile der Pipeline. Während GPUs bekanntermaßen eine große Rolle beim Training großer neuronaler Netze spielen, sind sie bei Vektordatenbanken und der ANN-Suche erst seit kurzem im Einsatz. Angesichts der zunehmenden Größe von E-Commerce-Produktbeständen oder Streaming-Media-Datenbanken und der Anzahl der Nutzer, die diese Dienste nutzen, müssen CPUs die erforderliche Leistung erbringen, um Millionen von Nutzern in leistungsfähigen Recsys-Workflows zu bedienen. Die GPU-Beschleunigung in anderen Teilen der Pipeline ist notwendig geworden, um diese Herausforderung zu bewältigen. Die Lösung in diesem Blog befasst sich mit dieser Herausforderung, indem sie zeigt, dass die ANN-Suche bei Verwendung von GPUs effizient ist.

Tech Stacks für die Lösung

Beginnen wir mit einem Überblick über einige der Grundlagen, die für unsere Arbeit erforderlich sind.

  • NVIDIA Merlin: eine Open-Source-Bibliothek mit High-Level-APIs zur Beschleunigung von Empfehlungsprogrammen auf NVIDIA-GPUs.

  • NVTabular: für die Vorverarbeitung der tabellarischen Eingabedaten und das Feature-Engineering.

  • Merlin Models: zum Trainieren von Deep-Learning-Modellen und in diesem Fall zum Lernen von Vektoren zur Einbettung von Nutzern und Artikeln aus Nutzerinteraktionsdaten.

  • Merlin Systems: für die Kombination eines TensorFlow-basierten Empfehlungsmodells mit anderen Elementen (z.B. Feature Store, ANN-Suche mit Milvus), die mit TIS bedient werden.

  • Triton Inference Server: für die Inferenzphase, in der ein Benutzer-Merkmalsvektor übergeben wird und Produktempfehlungen generiert werden.

  • Containerisierung: Alle oben genannten Funktionen sind über Container verfügbar, die NVIDIA im NGC-Katalog bereitstellt. Wir haben den Merlin TensorFlow 23.06 Container verwendet, der hier verfügbar ist.

  • Milvus 2.3: für die Durchführung von GPU-beschleunigter Vektorindizierung und -abfrage.

  • Milvus 2.2.11: wie oben, aber für die Ausführung auf der CPU.

  • Pymilvus SDK: für die Verbindung mit dem Milvus-Server, die Erstellung von Vektor-Datenbank-Indizes und die Ausführung von Abfragen über eine Python-Schnittstelle.

  • Feast: für das Speichern und Abrufen von Benutzer- und Elementattributen in einem (Open-Source-)Feature-Store als Teil unserer End-to-End-RecSys-Pipeline.

Mehrere zugrunde liegende Bibliotheken und Frameworks werden auch unter der Haube verwendet. Merlin stützt sich beispielsweise auf andere NVIDIA-Bibliotheken, wie cuDF und Dask, die beide unter RAPIDS cuDF verfügbar sind. Ebenso stützt sich Milvus auf NVIDIA RAFT für Primitive bei der GPU-Beschleunigung und modifizierte Bibliotheken wie HNSW und FAISS für die Suche.

Verständnis von Vektordatenbanken und Milvus

Approximate Nearest Neighbour (ANN) ist eine Funktionalität, die relationale Datenbanken nicht beherrschen. Relationale Datenbanken sind für den Umgang mit tabellarischen Daten mit vordefinierten Strukturen und direkt vergleichbaren Werten konzipiert. Relationale Datenbankindizes nutzen dies, um Daten zu vergleichen und Strukturen zu erstellen, die den Vorteil haben, zu wissen, ob ein Wert kleiner oder größer als der andere ist. Einbettungsvektoren können auf diese Weise nicht direkt miteinander verglichen werden, da wir wissen müssen, was jeder Wert im Vektor darstellt. Sie können nicht sagen, ob ein Vektor notwendigerweise kleiner ist als der andere. Das Einzige, was wir tun können, ist, den Abstand zwischen den beiden Vektoren zu berechnen. Wenn der Abstand zwischen zwei Vektoren klein ist, können wir davon ausgehen, dass die Merkmale, die sie repräsentieren, ähnlich sind, und wenn er groß ist, können wir davon ausgehen, dass die Daten, die sie repräsentieren, eher unterschiedlich sind. Diese effizienten Indizes haben jedoch ihren Preis: Die Berechnung des Abstands zwischen zwei Vektoren ist sehr rechenintensiv, und die Vektorindizes sind nicht ohne Weiteres anpassbar und manchmal auch nicht änderbar. Aufgrund dieser beiden Einschränkungen ist die Integration dieser Indizes in relationalen Datenbanken komplexer, weshalb speziell entwickelte Vektordatenbanken erforderlich sind.

Milvus wurde entwickelt, um die Probleme zu lösen, auf die relationale Datenbanken mit Vektoren stoßen, und wurde von Grund auf so konzipiert, dass es diese einbettenden Vektoren und ihre Indizes in großem Maßstab verarbeiten kann. Um das Cloud-Native-Zeichen zu erfüllen, trennt Milvus Rechen- und Speicherfunktionen sowie verschiedene Rechenaufgaben - Abfragen, Datenverarbeitung und Indizierung. Die Benutzer können jeden Teil der Datenbank skalieren, um andere Anwendungsfälle zu bewältigen, egal ob es sich um Dateneinfügung oder Suche handelt. Bei einem großen Zustrom von Einfügeanforderungen kann der Benutzer die Indexknoten vorübergehend horizontal und vertikal skalieren, um die Einfügung zu bewältigen. Wenn keine Daten eingegeben, aber viele Suchanfragen gestellt werden, kann der Benutzer die Indexknoten reduzieren und stattdessen die Abfrageknoten vergrößern, um den Durchsatz zu erhöhen. Dieses Systemdesign (siehe Abbildung 2) erforderte eine parallele Denkweise, was zu einem rechenoptimierten System führte, dem viele Türen für weitere Optimierungen offen stehen.

Abbildung 2. Milvus-Systementwurf

Milvus verwendet auch viele hochmoderne Indizierungsbibliotheken, um den Benutzern so viel Anpassungsmöglichkeiten für ihr System wie möglich zu bieten. Es verbessert diese Bibliotheken, indem es die Fähigkeit hinzufügt, CRUD-Operationen, Datenströme und Filterung zu verarbeiten. Später werden wir erörtern, wie sich diese Indizes unterscheiden und welche Vor- und Nachteile sie jeweils haben.

Beispiellösung: Integration von Milvus und Merlin

Die hier vorgestellte Beispiellösung demonstriert die Integration von Milvus mit Merlin in der Phase des Item Retrievals (wenn die k relevantesten Items durch eine ANN-Suche abgerufen werden). Wir verwenden einen realen Datensatz aus einem RecSys-Wettbewerb, der im Folgenden beschrieben wird. Wir trainieren ein Two-Tower Deep Learning-Modell, das Vektoreinbettungen für Benutzer und Artikel lernt. Dieser Abschnitt enthält auch den Entwurf unserer Benchmarking-Arbeit, einschließlich der Metriken, die wir sammeln, und der Bandbreite der Parameter, die wir verwenden.

Unser Ansatz umfasst:

  • Dateneingabe und Vorverarbeitung

  • Training des Two-Tower Deep Learning Modells

  • Aufbau des Milvus-Index

  • Milvus-Ähnlichkeitssuche

Wir beschreiben jeden Schritt kurz und verweisen den Leser für Details auf unsere Notebooks.

Datensatz

Die YOOCHOOSE GmbH stellt den Datensatz, den wir in dieser Integrations- und Benchmarkstudie verwenden, für die RecSys 2015 Challenge zur Verfügung und ist auf Kaggle verfügbar. Er enthält Klick/Kauf-Ereignisse von Nutzern eines europäischen Online-Händlers mit Attributen wie Sitzungs-ID, Zeitstempel, Artikel-ID, die mit dem Klick/Kauf verbunden sind, und Artikelkategorie, die in der Datei yoochoose-clicks.dat verfügbar sind. Die Sitzungen sind unabhängig, und es gibt keinen Hinweis auf wiederkehrende Benutzer, so dass wir jede Sitzung als zu einem bestimmten Benutzer gehörend behandeln. Der Datensatz umfasst 9.249.729 eindeutige Sitzungen (Benutzer) und 52.739 eindeutige Elemente.

Dateneingabe und Vorverarbeitung

Das Tool, das wir für die Datenvorverarbeitung verwenden, ist NVTabular, eine GPU-beschleunigte, hoch skalierbare Feature-Engineering- und Vorverarbeitungskomponente von Merlin. Wir verwenden NVTabular, um Daten in den GPU-Speicher einzulesen, Merkmale nach Bedarf neu anzuordnen, in Parkettdateien zu exportieren und einen Train-Validation-Split für das Training zu erstellen. Das Ergebnis sind 7.305.761 eindeutige Benutzer und 49.008 eindeutige Elemente für das Training. Wir kategorisieren auch jede Spalte und ihre Werte in ganzzahlige Werte. Der Datensatz ist nun bereit für das Training mit dem Two-Tower-Modell.

Modell-Training

Wir verwenden das Deep-Learning-Modell Two-Tower zum Trainieren und Generieren von Benutzer- und Objekteinbettungen, die später bei der Vektorindizierung und Abfrage verwendet werden. Nach dem Training des Modells können wir die gelernten Benutzer- und Objekteinbettungen extrahieren.

Die folgenden beiden Schritte sind optional: ein DLRM-Modell, das trainiert wird, um die abgerufenen Elemente für Empfehlungen zu bewerten, und ein Merkmalsspeicher (in diesem Fall Feast), der zum Speichern und Abrufen von Benutzer- und Elementmerkmalen verwendet wird. Wir fügen sie der Vollständigkeit halber in den mehrstufigen Arbeitsablauf ein.

Abschließend exportieren wir die Benutzer- und Objekteinbettungen in Parkettdateien, die später wieder geladen werden können, um einen Milvus-Vektorindex zu erstellen.

Aufbau und Abfrage des Milvus-Index

Milvus erleichtert die Vektorindizierung und Ähnlichkeitssuche über einen "Server", der auf der Inferenzmaschine gestartet wird. In unserem Notizbuch #2 richten wir diesen ein, indem wir den Milvus-Server und Pymilvus per Pip installieren und den Server mit seinem Standard-Listening-Port starten. Als nächstes demonstrieren wir die Erstellung eines einfachen Index (IVF_FLAT) und die Abfrage mit den Funktionen setup_milvus bzw. query_milvus.

Benchmarking

Wir haben zwei Benchmarks entwickelt, um den Einsatz einer schnellen und effizienten Vektorindexierungs-/Suchbibliothek wie Milvus zu demonstrieren.

  1. Wir verwenden Milvus, um Vektorindizes mit den beiden von uns generierten Einbettungen zu erstellen: 1) Benutzer-Embeddings für 7,3 Millionen eindeutige Benutzer, aufgeteilt in 85% Trainingsmenge (für die Indizierung) und 15% Testmenge (für die Abfrage), und 2) Item-Embeddings für 49.000 Produkte (mit einer 50-50 Trainings-/Testaufteilung). Dieser Benchmark wird unabhängig für jeden Vektordatensatz durchgeführt, und die Ergebnisse werden getrennt ausgewiesen.

  2. Verwendung von Milvus zur Erstellung eines Vektorindexes für den 49K Item Embeddings-Datensatz und Abfrage der 7,3M eindeutigen Benutzer gegen diesen Index für die Ähnlichkeitssuche.

Bei diesen Benchmarks wurden IVFPQ- und HNSW-Indizierungsalgorithmen auf GPU und CPU sowie verschiedene Parameterkombinationen verwendet. Details sind hier verfügbar.

Der Kompromiss zwischen Suchqualität und Durchsatz ist ein wichtiger Leistungsaspekt, insbesondere in einer Produktionsumgebung. Milvus ermöglicht die vollständige Kontrolle über die Indizierungsparameter, um diesen Kompromiss für einen bestimmten Anwendungsfall zu untersuchen und bessere Suchergebnisse mit Ground Truth zu erzielen. Dies kann zu höheren Rechenkosten in Form einer geringeren Durchsatzrate oder Abfragen pro Sekunde (QPS) führen. Wir messen die Qualität der ANN-Suche mit einer Recall-Metrik und stellen QPS-Recall-Kurven bereit, die den Kompromiss aufzeigen. Man kann dann entscheiden, welches Niveau der Suchqualität angesichts der Rechenressourcen oder Latenz-/Durchsatzanforderungen des Geschäftsfalls akzeptabel ist.

Beachten Sie auch die Abfragestapelgröße (nq), die in unseren Benchmarks verwendet wird. Dies ist in Arbeitsabläufen nützlich, bei denen mehrere gleichzeitige Anfragen an die Inferenz gesendet werden (z. B. Offline-Empfehlungen, die angefordert und an eine Liste von E-Mail-Empfängern gesendet werden, oder Online-Empfehlungen, die durch das Zusammenfassen gleichzeitiger Anfragen erstellt werden, die alle auf einmal verarbeitet werden). Je nach Anwendungsfall kann TIS auch dabei helfen, diese Anfragen in Stapeln zu verarbeiten.

Ergebnisse

Wir berichten nun über die Ergebnisse für die drei Benchmark-Sets auf CPU und GPU unter Verwendung der von Milvus implementierten Index-Typen HNSW (nur CPU) und IVF_PQ (CPU und GPU).

Bei diesem kleinsten Datensatz werden bei jedem Durchlauf für eine bestimmte Parameterkombination 50 % der Item-Vektoren als Abfragevektoren verwendet und die 100 ähnlichsten Vektoren vom Rest abgefragt. HNSW und IVF_PQ erzielen mit den getesteten Parametereinstellungen eine hohe Trefferquote, die im Bereich von 0,958-1,0 bzw. 0,665-0,997 liegt. Dieses Ergebnis deutet darauf hin, dass HNSW in Bezug auf den Recall besser abschneidet, während IVF_PQ mit kleinen nlist-Einstellungen einen sehr vergleichbaren Recall erzielt. Wir sollten auch beachten, dass die Recall-Werte je nach den Indizierungs- und Abfrageparametern stark variieren können. Die von uns angegebenen Werte wurden nach vorläufigen Experimenten mit allgemeinen Parameterbereichen und weiterem Zoomen in eine ausgewählte Teilmenge ermittelt.

Die Gesamtzeit für die Ausführung aller Abfragen auf der CPU mit HNSW für eine bestimmte Parameterkombination liegt zwischen 5,22 und 5,33 Sekunden (schneller, wenn m größer wird, relativ unverändert mit ef) und mit IVF_PQ zwischen 13,67 und 14,67 Sekunden (langsamer, wenn nlist und nprobe größer werden). Die GPU-Beschleunigung hat einen spürbaren Effekt, wie in Abbildung 3 zu sehen ist.

Abbildung 3 zeigt den Kompromiss zwischen Abruf und Durchsatz für alle auf CPU und GPU durchgeführten Läufe mit diesem kleinen Datensatz unter Verwendung von IVF_PQ. Wir stellen fest, dass die GPU bei allen getesteten Parameterkombinationen einen Geschwindigkeitszuwachs von 4x bis 15x bietet (größerer Geschwindigkeitszuwachs, wenn nprobe größer wird). Dies wird berechnet, indem man das Verhältnis von QPS von GPU zu QPS von CPU-Läufen für jede Parameterkombination nimmt. Insgesamt stellt dieser Satz eine kleine Herausforderung für CPU oder GPU dar und bietet Aussichten auf eine weitere Beschleunigung bei größeren Datensätzen, wie unten beschrieben.

Abbildung 3. GPU-Beschleunigung mit dem Milvus IVF_PQ-Algorithmus auf dem NVIDIA A100-GPU (Element-Element-Ähnlichkeitssuche)

Mit dem viel größeren zweiten Datensatz (7,3 Mio. Benutzer) haben wir 85 % (~6,2 Mio.) der Vektoren als "train" (die Menge der zu indizierenden Vektoren) und die verbleibenden 15 % (~1,1 Mio.) als "test" oder Abfragevektormenge beiseite gelegt. HNSW und IVF_PQ schneiden in diesem Fall außergewöhnlich gut ab, mit Recall-Werten von 0,884-1,0 bzw. 0,922-0,999. Sie sind jedoch rechnerisch wesentlich anspruchsvoller, insbesondere IVF_PQ auf der CPU. Die Gesamtzeit für die Ausführung aller Abfragen auf der CPU mit HNSW liegt zwischen 279,89 und 295,56 s und mit IVF_PQ zwischen 3082,67 und 10932,33 s. Beachten Sie, dass diese Abfragezeiten für 1,1 Mio. abgefragte Vektoren kumulativ sind, so dass man sagen kann, dass eine einzelne Abfrage gegen den Index immer noch sehr schnell ist.

CPU-basierte Abfragen sind jedoch möglicherweise nicht praktikabel, wenn der Inferenzserver viele Tausend gleichzeitige Anfragen erwartet, um Abfragen gegen einen Bestand von Millionen von Elementen durchzuführen.

Der A100-Grafikprozessor liefert über alle Parameterkombinationen hinweg mit IVF_PQ einen enormen Geschwindigkeitszuwachs von 37x bis 91x (im Durchschnitt 76,1x) in Bezug auf den Durchsatz (QPS), wie in Abbildung 4 dargestellt. Dies entspricht dem, was wir mit dem kleinen Datensatz beobachtet haben, was darauf hindeutet, dass die GPU-Leistung bei der Verwendung von Milvus mit Millionen von Einbettungsvektoren recht gut skaliert.

Abbildung 4. GPU-Beschleunigung mit dem Milvus IVF_PQ-Algorithmus auf dem NVIDIA A100-GPU (Ähnlichkeitssuche zwischen Benutzern)

Die folgende detaillierte Abbildung 5 zeigt den Recall-QPS-Tradeoff für alle Parameterkombinationen, die mit IVF_PQ auf CPU und GPU getestet wurden. Jeder Punktsatz (oben für GPU, unten für CPU) in diesem Diagramm zeigt den Kompromiss, der beim Ändern von Vektorindizierungs-/Abfrageparametern zum Erreichen eines höheren Recalls auf Kosten eines geringeren Durchsatzes besteht. Man beachte den beträchtlichen Verlust an QPS im GPU-Fall, wenn man versucht, eine höhere Wiederauffindbarkeit zu erreichen.

Abbildung 5. Kompromiss zwischen Recall und Durchsatz für alle auf CPU und GPU getesteten Parameterkombinationen mit IVF_PQ (Benutzer vs. Benutzer)

Abschließend betrachten wir einen weiteren realistischen Anwendungsfall, bei dem Benutzervektoren gegen Item-Vektoren abgefragt werden (wie in Notebook 01 oben demonstriert). In diesem Fall werden 49K Objektvektoren indiziert und 7,3M Benutzervektoren werden jeweils nach den 100 ähnlichsten Objekten abgefragt.

An dieser Stelle wird es interessant, denn die Abfrage von 7,3M in Stapeln von 1000 gegen einen Index von 49K Elementen scheint auf der CPU sowohl für HNSW als auch für IVF_PQ zeitaufwändig zu sein. Die GPU scheint diesen Fall besser zu bewältigen (siehe Abbildung 6). Die höchsten Genauigkeitsniveaus von IVF_PQ auf der CPU bei nlist = 100 werden im Durchschnitt in etwa 86 Minuten berechnet, variieren jedoch erheblich, wenn der nprobe-Wert steigt (51 Min. bei nprobe = 5 vs. 128 Min. bei nprobe = 20). Der NVIDIA A100-Grafikprozessor beschleunigt die Leistung beträchtlich, und zwar um den Faktor 4 bis 17 (höhere Geschwindigkeitssteigerungen, wenn nprobe größer wird). Es sei daran erinnert, dass der IVF_PQ-Algorithmus durch seine Quantisierungstechnik auch den Speicherbedarf reduziert und in Kombination mit der GPU-Beschleunigung eine rechnerisch praktikable ANN-Suchlösung bietet.

Abbildung 6. GPU-Beschleunigung mit dem Milvus-IVF_PQ-Algorithmus auf dem NVIDIA A100-GPU (Ähnlichkeitssuche nach Benutzer-Elementen)

Ähnlich wie in Abbildung 5 ist in Abbildung 7 der Kompromiss zwischen Rückruf und Durchsatz für alle mit IVF_PQ getesteten Parameterkombinationen dargestellt. Hier ist immer noch zu erkennen, dass man bei der ANN-Suche zugunsten eines höheren Durchsatzes etwas an Genauigkeit einbüßen muss, obwohl die Unterschiede viel weniger auffällig sind, insbesondere bei GPU-Läufen. Dies deutet darauf hin, dass man mit der GPU eine relativ gleichbleibend hohe Rechenleistung erwarten kann, während man dennoch eine hohe Trefferquote erzielt.

Abbildung 7. Kompromiss zwischen Rückruf und Durchsatz für alle auf CPU und GPU getesteten Parameterkombinationen mit IVF_PQ (Benutzer vs. Elemente)

Schlussfolgerung

Wenn Sie es bis hierher geschafft haben, würden wir Ihnen gerne ein paar abschließende Bemerkungen mitteilen. Wir möchten Sie daran erinnern, dass die Komplexität und der mehrstufige Charakter des modernen Recsys bei jedem Schritt Leistung und Effizienz erfordern. Wir hoffen, dass Sie in diesem Blog überzeugende Gründe gefunden haben, die Verwendung zweier wichtiger Funktionen in Ihren RecSys-Pipelines in Betracht zu ziehen:

  • Mit der Merlin Systems-Bibliothek von NVIDIA Merlin können Sie Milvus, eine effiziente, GPU-beschleunigte Vektorsuchmaschine, einfach einbinden.

  • Nutzen Sie GPU zur Beschleunigung von Berechnungen für die Indizierung von Vektordatenbanken und die ANN-Suche mit Technologien wie RAPIDS RAFT.

Diese Ergebnisse deuten darauf hin, dass die vorgestellte Merlin-Milvus-Integration sehr leistungsfähig und viel weniger komplex ist als andere Optionen für Training und Inferenz. Außerdem werden beide Frameworks aktiv weiterentwickelt, und viele neue Funktionen (z. B. neue GPU-beschleunigte Vektordatenbankindizes von Milvus) werden in jeder Version hinzugefügt. Die Tatsache, dass die vektorielle Ähnlichkeitssuche eine entscheidende Komponente in verschiedenen Arbeitsabläufen ist, wie z.B. Computer Vision, Large Language Modeling und Recommender Systems, macht diese Bemühungen umso lohnender.

Abschließend möchten wir uns bei allen Mitarbeitern von Zilliz/Milvus und Merlin sowie den RAFT-Teams bedanken, die an der Erstellung dieser Arbeit und des Blogbeitrags beteiligt waren. Wir freuen uns darauf, von Ihnen zu hören, wenn Sie die Möglichkeit haben, Merlin und Milvus in Ihren Recsys oder anderen Arbeitsabläufen einzusetzen.

Like the article? Spread the word

Weiterlesen