paint-brush
6 kritische Herausforderungen bei der Produktion der Vektorsuchevon@rocksetcloud
8,892 Lesungen
8,892 Lesungen

6 kritische Herausforderungen bei der Produktion der Vektorsuche

von Rockset6m2024/04/23
Read on Terminal Reader

Zu lang; Lesen

Bei der Produktion der Vektorsuche müssen Herausforderungen bei der Indizierung, Metadatenfilterung, Abfragesprache und Vektor-Lebenszyklusverwaltung bewältigt werden. Das Verständnis dieser Komplexitäten ist für eine erfolgreiche Bereitstellung und Anwendungsentwicklung von entscheidender Bedeutung.
featured image - 6 kritische Herausforderungen bei der Produktion der Vektorsuche
Rockset HackerNoon profile picture
0-item


Sie haben sich entschieden, die Vektorsuche in Ihrer Anwendung, Ihrem Produkt oder Ihrem Unternehmen zu verwenden. Sie haben untersucht, wie und warum Einbettungen und die Vektorsuche ein Problem lösbar machen oder neue Funktionen ermöglichen können. Sie haben sich in den heißen, aufstrebenden Bereich der approximativen Nearest-Neighbor-Algorithmen und Vektordatenbanken hineinversetzt.


Fast unmittelbar nach der Produktion von Vektorsuchanwendungen werden Sie auf sehr schwierige und möglicherweise unerwartete Schwierigkeiten stoßen. Dieser Blog versucht, Sie mit etwas Wissen über Ihre Zukunft, die Probleme, mit denen Sie konfrontiert werden, und Fragen auszustatten, von denen Sie vielleicht noch nicht wissen, dass Sie sie stellen müssen.


1. Vektorsuche ≠ Vektordatenbank

Die Vektorsuche und alle damit verbundenen intelligenten Algorithmen sind die zentrale Intelligenz jedes Systems, das versucht, Vektoren zu nutzen. Die gesamte damit verbundene Infrastruktur, um sie maximal nützlich und produktionsbereit zu machen, ist jedoch enorm und sehr, sehr leicht zu unterschätzen.


Um es so deutlich wie möglich auszudrücken: Eine produktionsreife Vektordatenbank wird viel, viel mehr „Datenbank“-Probleme als „Vektor“-Probleme lösen . Die Vektorsuche selbst ist keineswegs ein „einfaches“ Problem (und wir werden unten viele der schwierigen Unterprobleme behandeln), aber der Berg traditioneller Datenbankprobleme, die eine Vektordatenbank lösen muss, bleibt sicherlich der „schwierige Teil“.


Datenbanken lösen eine Vielzahl sehr realer und sehr gut untersuchter Probleme, von Atomizität und Transaktionen, Konsistenz, Leistungs- und Abfrageoptimierung, Haltbarkeit, Backups, Zugriffskontrolle, Mandantenfähigkeit, Skalierung und Sharding und vielem mehr. Vector-Datenbanken erfordern Antworten in all diesen Dimensionen für jedes Produkt, Geschäft oder Unternehmen.


Seien Sie sehr vorsichtig mit selbstgemachter „Vektorsuch-Infrastruktur“. Es ist nicht so schwer, eine moderne Vektorsuchbibliothek herunterzuladen und mit der Annäherung an nächste Nachbarn zu einem interessanten Prototyp zu gelangen. Wenn Sie diesen Weg jedoch weiterverfolgen, erfinden Sie versehentlich Ihre eigene Datenbank neu. Das ist wahrscheinlich eine Entscheidung, die Sie bewusst treffen möchten.


2. Inkrementelle Indizierung von Vektoren

Aufgrund der Art der modernsten ANN-Vektorsuchalgorithmen ist die inkrementelle Aktualisierung eines Vektorindex eine enorme Herausforderung. Dies ist ein bekanntes „hartes Problem“. Das Problem hierbei ist, dass diese Indizes sorgfältig für schnelle Suchvorgänge organisiert sind und jeder Versuch, sie inkrementell mit neuen Vektoren zu aktualisieren, die Eigenschaften der schnellen Suche schnell verschlechtert. Um schnelle Suchvorgänge bei hinzugefügten Vektoren aufrechtzuerhalten, müssen diese Indizes daher regelmäßig von Grund auf neu erstellt werden.


Jede Anwendung, die kontinuierlich neue Vektoren streamen möchte und dabei sowohl die Vektoren schnell im Index anzeigen als auch die Abfragen schnell bleiben muss, benötigt ernsthafte Unterstützung für das Problem der „inkrementellen Indizierung“. Dies ist ein sehr wichtiger Bereich, den Sie über Ihre Datenbank verstehen müssen, und ein guter Ort, um eine Reihe schwieriger Fragen zu stellen.


Es gibt viele mögliche Ansätze, die eine Datenbank verfolgen könnte, um dieses Problem für Sie zu lösen. Eine ordnungsgemäße Übersicht über diese Ansätze würde viele Blogbeiträge dieser Größe füllen. Es ist wichtig, einige der technischen Details des Ansatzes Ihrer Datenbank zu verstehen, da dieser in Ihrer Anwendung unerwartete Kompromisse oder Konsequenzen haben kann. Wenn eine Datenbank beispielsweise in bestimmten Abständen eine vollständige Neuindizierung durchführt, kann dies zu einer hohen CPU-Auslastung führen und daher regelmäßig die Abfragelatenzen beeinträchtigen.


Sie sollten sich darüber im Klaren sein, welche Anforderungen Ihre Anwendungen an die inkrementelle Indizierung stellen und welche Fähigkeiten das System bietet, auf das Sie sich dabei verlassen.


3. Datenlatenz für Vektoren und Metadaten

Jede Anwendung sollte sich über ihre Notwendigkeit und Toleranz gegenüber Datenlatenz im Klaren sein. Vektorbasierte Indizes haben, zumindest im Vergleich zu anderen Datenbankstandards, relativ hohe Indizierungskosten. Es besteht ein erheblicher Kompromiss zwischen Kosten und Datenlatenz.


Wie lange muss es dauern, bis ein Vektor nach der „Erstellung“ in Ihrem Index durchsuchbar ist? Wenn dies bald der Fall ist, ist die Vektorlatenz ein wichtiger Designpunkt in diesen Systemen.


Dasselbe gilt für die Metadaten Ihres Systems. Generell ist es ziemlich üblich, dass Metadaten sich ändern (z. B. sich ändern, ob ein Benutzer online ist oder nicht). Daher ist es normalerweise sehr wichtig, dass nach Metadaten gefilterte Abfragen schnell auf Aktualisierungen der Metadaten reagieren. Im obigen Beispiel ist es nicht hilfreich, wenn Ihre Vektorsuche eine Abfrage für jemanden zurückgibt, der kürzlich offline gegangen ist!


Wenn Sie kontinuierlich Vektoren zum System streamen oder die Metadaten dieser Vektoren kontinuierlich aktualisieren müssen, benötigen Sie eine andere zugrunde liegende Datenbankarchitektur, als wenn es für Ihren Anwendungsfall akzeptabel ist, beispielsweise jeden Abend den vollständigen Index neu zu erstellen, um ihn am nächsten Tag zu verwenden.


4. Metadatenfilterung

Ich möchte diesen Punkt ausdrücklich betonen: Ich denke, dass das Produkterlebnis in fast allen Fällen besser ist, wenn die zugrunde liegende Vektorsuchinfrastruktur durch Metadatenfilterung (oder Hybridsuche) erweitert werden kann .


Zeigen Sie mir alle Restaurants an, die mir gefallen könnten (Vektorsuche), die im Umkreis von 10 Meilen liegen und ein niedriges bis mittleres Preisniveau haben (Metadatenfilter).


Der zweite Teil dieser Abfrage ist eine traditionelle SQL-ähnliche WHERE -Klausel, die im ersten Teil mit einem Vektorsuchergebnis gekreuzt ist. Aufgrund der Natur dieser großen, relativ statischen, relativ monolithischen Vektorindizes ist es sehr schwierig, eine gemeinsame Vektor- und Metadatensuche effizient durchzuführen. Dies ist ein weiteres der bekannten „harten Probleme“, die Vektordatenbanken für Sie lösen müssen.


Es gibt viele technische Ansätze, mit denen Datenbanken dieses Problem für Sie lösen können. Sie können „vorfiltern“, d. h. zuerst den Filter anwenden und dann eine Vektorsuche durchführen. Dieser Ansatz hat den Nachteil, dass er den vorgefertigten Vektorindex nicht effektiv nutzen kann. Sie können die Ergebnisse „nachfiltern“, nachdem Sie eine vollständige Vektorsuche durchgeführt haben. Dies funktioniert hervorragend, es sei denn, Ihr Filter ist sehr selektiv. In diesem Fall verbringen Sie sehr viel Zeit damit, Vektoren zu finden, die Sie später verwerfen, weil sie die angegebenen Kriterien nicht erfüllen. Manchmal, wie dies bei Rockset der Fall ist, können Sie eine „einstufige“ Filterung durchführen, d. h. Sie versuchen, die Phase der Metadatenfilterung mit der Phase der Vektorsuche so zu verschmelzen, dass das Beste aus beiden Welten erhalten bleibt.


Wenn Sie meinen, dass die Filterung von Metadaten für Ihre Anwendung von entscheidender Bedeutung ist (und ich behaupte oben, dass dies fast immer der Fall sein wird), sollten Sie die Vor- und Nachteile sowie die Funktionalität der Metadatenfilterung sehr sorgfältig prüfen.


5. Metadatenabfragesprache

Wenn ich Recht habe und die Filterung von Metadaten für die Anwendung, die Sie erstellen, von entscheidender Bedeutung ist, herzlichen Glückwunsch, Sie haben noch ein weiteres Problem. Sie müssen eine Möglichkeit finden, Filter für diese Metadaten anzugeben. Dies ist eine Abfragesprache.


Da ich aus der Datenbankperspektive komme und dies ein Rockset-Blog ist, können Sie wahrscheinlich ahnen, worauf ich hinaus will. SQL ist der Industriestandard zum Ausdrücken dieser Art von Anweisungen. „Metadatenfilter“ in der Vektorsprache sind einfach „die WHERE Klausel“ für eine herkömmliche Datenbank. Es hat den Vorteil, dass es auch relativ einfach zwischen verschiedenen Systemen portiert werden kann.


Darüber hinaus sind diese Filter Abfragen, und Abfragen können optimiert werden. Die Komplexität des Abfrageoptimierers kann einen großen Einfluss auf die Leistung Ihrer Abfragen haben. Beispielsweise versuchen ausgefeilte Optimierer, zuerst die selektivsten Metadatenfilter anzuwenden, da dies den Arbeitsaufwand für spätere Phasen der Filterung minimiert und zu einer deutlichen Leistungssteigerung führt.


Wenn Sie vorhaben, nicht triviale Anwendungen mithilfe der Vektorsuche und Metadatenfilter zu schreiben, ist es wichtig, dass Sie die Abfragesprache, deren Verwendung, Schreiben und Wartung Sie planen, sowohl hinsichtlich der Ergonomie als auch der Implementierung verstehen und damit vertraut sind.


6. Vektor-Lebenszyklusmanagement

Okay, Sie haben es bis hierhin geschafft. Sie haben eine Vektordatenbank, die alle erforderlichen Datenbankgrundlagen bietet, die richtige inkrementelle Indizierungsstrategie für Ihren Anwendungsfall hat, eine gute Geschichte rund um Ihre Anforderungen an die Metadatenfilterung hat und ihren Index mit für Sie tolerierbaren Latenzen auf dem neuesten Stand hält. Fantastisch.


Ihr ML-Team (oder vielleicht OpenAI) veröffentlicht eine neue Version seines Einbettungsmodells. Sie haben eine riesige Datenbank voller alter Vektoren, die nun aktualisiert werden müssen. Was nun? Wo werden Sie diesen großen Batch-ML-Job ausführen? Wie werden Sie die Zwischenergebnisse speichern? Wie werden Sie auf die neue Version umsteigen? Wie wollen Sie dies auf eine Weise tun, die Ihre Produktionsarbeitslast nicht beeinträchtigt?


Stellen Sie die schwierigen Fragen

Die Vektorsuche ist ein sich rasch entwickelnder Bereich, und wir sehen, dass viele Benutzer beginnen, Anwendungen in die Produktion zu bringen. Mein Ziel für diesen Beitrag war es, Sie mit einigen der entscheidenden, schwierigen Fragen zu wappnen, die Sie vielleicht noch nicht zu stellen wissen. Und Sie werden stark davon profitieren, wenn Sie diese Fragen eher früher als später beantworten.


In diesem Beitrag habe ich nicht darauf eingegangen, wie Rockset an der Lösung all dieser Probleme gearbeitet hat und arbeitet und warum einige unserer Lösungen dafür bahnbrechend und besser sind als die meisten anderen Versuche auf dem neuesten Stand der Technik. Dies abzudecken würde viele Blogbeiträge dieser Größe erfordern, und ich denke, genau das werden wir tun. Bleiben Sie dran für mehr.