Beschleunigung der Ähnlichkeitssuche auf wirklich großen Daten mit Vektorindizierung
Von der Computer Vision bis hin zur Entdeckung neuer Medikamente: Vektorielle Ähnlichkeitssuchmaschinen treiben viele beliebte Anwendungen der künstlichen Intelligenz (KI) an. Eine wichtige Komponente, die eine effiziente Abfrage der Millionen-, Milliarden- oder sogar Billionen-Vektordatensätze ermöglicht, auf die sich die Ähnlichkeitssuchmaschinen stützen, ist die Indizierung, ein Prozess zur Organisation von Daten, der die Big-Data-Suche drastisch beschleunigt. Dieser Artikel befasst sich mit der Rolle, die die Indizierung bei der effizienten Suche nach Vektorähnlichkeit spielt, mit verschiedenen Indexarten für invertierte Vektordateien (IVF) und mit Ratschlägen, welcher Index in verschiedenen Szenarien zu verwenden ist.
Springe zu:
- Beschleunigung der Ähnlichkeitssuche bei wirklich großen Daten mit Vektorindizierung
- Wie beschleunigt die Vektorindizierung die Ähnlichkeitssuche und das maschinelle Lernen?
- Welche verschiedenen Arten von IVF-Indizes gibt es und für welche Szenarien sind sie am besten geeignet?
- FLAT: Gut geeignet für die Suche in relativ kleinen Datensätzen (im Millionenbereich), wenn eine 100%ige Wiedererkennung erforderlich ist.
- IVF_FLAT: Verbessert die Geschwindigkeit auf Kosten der Genauigkeit (und umgekehrt).
- IVF_SQ8: Schneller und weniger ressourcenhungrig als IVF_FLAT, aber auch weniger genau.
- IVF_SQ8H: Neuer hybrider GPU/CPU-Ansatz, der noch schneller ist als IVF_SQ8.
- Erfahren Sie mehr über Milvus, eine Plattform zur Verwaltung von Vektordaten in großem Maßstab.
- Methodik
Wie beschleunigt die Vektorindizierung die Ähnlichkeitssuche und das maschinelle Lernen?
Ähnlichkeitssuchmaschinen vergleichen eine Eingabe mit einer Datenbank, um Objekte zu finden, die der Eingabe am ähnlichsten sind. Die Indizierung ist der Prozess der effizienten Organisation von Daten und spielt eine wichtige Rolle bei der Nützlichkeit der Ähnlichkeitssuche, indem sie zeitaufwändige Abfragen in großen Datensätzen erheblich beschleunigt. Nachdem ein großer Vektordatensatz indiziert wurde, können Abfragen zu Clustern oder Teilmengen von Daten geleitet werden, die mit hoher Wahrscheinlichkeit Vektoren enthalten, die einer Eingabeabfrage ähnlich sind. In der Praxis bedeutet dies, dass ein gewisses Maß an Genauigkeit geopfert werden muss, um Abfragen auf wirklich großen Vektordaten zu beschleunigen.
Es kann eine Analogie zu einem Wörterbuch gezogen werden, in dem die Wörter alphabetisch sortiert sind. Wenn man ein Wort nachschlägt, kann man schnell zu einem Abschnitt navigieren, der nur Wörter mit demselben Anfangsbuchstaben enthält, was die Suche nach der Definition des eingegebenen Wortes drastisch beschleunigt.
Welche verschiedenen Arten von IVF-Indizes gibt es und für welche Szenarien sind sie am besten geeignet?
Es gibt zahlreiche Indizes, die für die hochdimensionale vektorielle Ähnlichkeitssuche entwickelt wurden, und jeder von ihnen bringt Kompromisse in Bezug auf Leistung, Genauigkeit und Speicherbedarf mit sich. In diesem Artikel werden verschiedene gängige IVF-Indextypen, ihre Stärken und Schwächen sowie die Ergebnisse von Leistungstests für jeden Indextyp behandelt. Die Leistungstests quantifizieren die Abfragezeit und die Abrufraten für jeden Indextyp in Milvus, einer Open-Source-Plattform zur Verwaltung von Vektordaten. Weitere Informationen über die Testumgebung finden Sie im Abschnitt über die Methodik am Ende dieses Artikels.
FLAT: Gut geeignet für die Suche in relativ kleinen Datensätzen (im Millionenbereich), wenn eine 100-prozentige Trefferquote erforderlich ist.
Für Anwendungen der Vektorähnlichkeitssuche, die eine perfekte Genauigkeit erfordern und von relativ kleinen Datensätzen (im Millionenbereich) abhängen, ist der FLAT-Index eine gute Wahl. FLAT komprimiert die Vektoren nicht und ist der einzige Index, der exakte Suchergebnisse garantieren kann. Die Ergebnisse von FLAT können auch als Vergleichspunkt für Ergebnisse anderer Indizes verwendet werden, die weniger als 100 % Recall haben.
FLAT ist genau, weil er einen erschöpfenden Suchansatz verfolgt, d. h. für jede Abfrage wird die Zieleingabe mit jedem Vektor in einem Datensatz verglichen. Dadurch ist FLAT der langsamste Index auf unserer Liste und eignet sich schlecht für die Abfrage umfangreicher Vektordaten. Es gibt keine Parameter für den FLAT-Index in Milvus, und seine Verwendung erfordert kein Datentraining oder zusätzlichen Speicher.
Ergebnisse der FLAT-Leistungstests:
Die Leistungstests für die FLAT-Abfragezeit wurden in Milvus mit einem Datensatz aus 2 Millionen 128-dimensionalen Vektoren durchgeführt.
Blog_Beschleunigung der Ähnlichkeitssuche bei wirklich großen Daten mit Vektorindizierung_2.png
Wichtige Erkenntnisse:
- Wenn nq (die Anzahl der Zielvektoren für eine Abfrage) steigt, erhöht sich die Abfragezeit.
- Bei Verwendung des FLAT-Index in Milvus können wir sehen, dass die Abfragezeit stark ansteigt, sobald nq 200 überschreitet.
- Im Allgemeinen ist der FLAT-Index schneller und konsistenter, wenn Milvus auf der GPU und nicht auf der CPU ausgeführt wird. Allerdings sind FLAT-Abfragen auf der CPU schneller, wenn nq unter 20 liegt.
IVF_FLAT: Verbessert die Geschwindigkeit auf Kosten der Genauigkeit (und umgekehrt).
Eine gängige Methode zur Beschleunigung der Ähnlichkeitssuche auf Kosten der Genauigkeit ist die Durchführung einer ANN-Suche (approximate nearest neighbor). ANN-Algorithmen verringern den Speicherbedarf und die Rechenlast, indem sie ähnliche Vektoren zu Clustern zusammenfassen, was zu einer schnelleren Vektorsuche führt. IVF_FLAT ist der einfachste invertierte Dateiindex-Typ und basiert auf einer Form der ANN-Suche.
IVF_FLAT unterteilt die Vektordaten in eine Anzahl von Cluster-Einheiten (nlist) und vergleicht dann die Abstände zwischen dem Ziel-Eingangsvektor und dem Zentrum jedes Clusters. Abhängig von der Anzahl der Cluster, die das System abfragen soll (nprobe), werden die Ergebnisse der Ähnlichkeitssuche nur auf der Grundlage von Vergleichen zwischen der Zieleingabe und den Vektoren in den ähnlichsten Clustern zurückgegeben, was die Abfragezeit drastisch reduziert.
Durch die Anpassung von nprobe kann ein ideales Gleichgewicht zwischen Genauigkeit und Geschwindigkeit für ein bestimmtes Szenario gefunden werden. Die Ergebnisse unseres IVF_FLAT-Leistungstests zeigen, dass die Abfragezeit stark ansteigt, wenn sowohl die Anzahl der Zieleingangsvektoren (nq) als auch die Anzahl der zu durchsuchenden Cluster (nprobe) zunimmt. IVF_FLAT komprimiert die Vektordaten nicht, die Indexdateien enthalten jedoch Metadaten, die den Speicherbedarf im Vergleich zum unindizierten Vektordatensatz geringfügig erhöhen.
Ergebnisse der IVF_FLAT-Leistungstests:
IVF_FLAT-Abfragezeittests wurden in Milvus unter Verwendung des öffentlichen 1B SIFT-Datensatzes durchgeführt, der 1 Milliarde 128-dimensionale Vektoren enthält.
Blog_Beschleunigung der Ähnlichkeitssuche bei wirklich großen Daten mit Vektorindizierung_3.png
Wichtigste Erkenntnisse:
- Bei der Ausführung auf der CPU steigt die Abfragezeit für den IVF_FLAT-Index in Milvus sowohl mit nprobe als auch mit nq. Das bedeutet, je mehr Eingabevektoren eine Abfrage enthält oder je mehr Cluster eine Abfrage durchsucht, desto länger wird die Abfragezeit.
- Auf der GPU zeigt der Index eine geringere Zeitvarianz bei Änderungen von nq und nprobe. Dies liegt daran, dass die Indexdaten groß sind und das Kopieren der Daten vom CPU-Speicher in den GPU-Speicher den Großteil der gesamten Abfragezeit ausmacht.
- In allen Szenarien, außer bei nq = 1.000 und nprobe = 32, ist der IVF_FLAT-Index effizienter, wenn er auf der CPU läuft.
IVF_FLAT-Recall-Leistungstests wurden in Milvus durchgeführt, wobei sowohl der öffentliche 1M-SIFT-Datensatz, der 1 Million 128-dimensionale Vektoren enthält, als auch der glove-200-angular-Datensatz, der 1+ Millionen 200-dimensionale Vektoren enthält, für die Indexerstellung verwendet wurden (nlist = 16.384).
Blog_Beschleunigung der Ähnlichkeitssuche bei wirklich großen Daten mit Vektorindizierung_4.png
Wichtigste Erkenntnisse:
- Der IVF_FLAT-Index kann auf Genauigkeit optimiert werden und erreicht eine Wiederfindungsrate von über 0,99 auf dem 1M-SIFT-Datensatz, wenn nprobe = 256.
IVF_SQ8: Schneller und weniger ressourcenhungrig als IVF_FLAT, aber auch weniger genau.
IVF_FLAT führt keine Komprimierung durch, so dass die erzeugten Indexdateien ungefähr die gleiche Größe haben wie die ursprünglichen, nicht indizierten Vektordaten. Wenn z. B. der ursprüngliche 1B-SIFT-Datensatz 476 GB groß ist, sind die IVF_FLAT-Indexdateien etwas größer (~470 GB). Wenn alle Indexdateien in den Speicher geladen werden, werden 470 GB Speicherplatz verbraucht.
Wenn Festplatten-, CPU- oder GPU-Speicherressourcen begrenzt sind, ist IVF_SQ8 eine bessere Option als IVF_FLAT. Dieser Indextyp kann jedes FLOAT (4 Byte) in UINT8 (1 Byte) umwandeln, indem er eine skalare Quantisierung durchführt. Dies reduziert den Festplatten-, CPU- und GPU-Speicherverbrauch um 70-75 %. Für den 1B-SIFT-Datensatz benötigen die IVF_SQ8-Indexdateien nur 140 GB Speicherplatz.
IVF_SQ8-Leistungstestergebnisse:
IVF_SQ8-Abfragezeittests wurden in Milvus unter Verwendung des öffentlichen 1B-SIFT-Datensatzes, der 1 Milliarde 128-dimensionale Vektoren enthält, zur Indexerstellung durchgeführt.
Blog_Beschleunigung der Ähnlichkeitssuche bei wirklich großen Daten mit Vektorindizierung_5.png
Wichtigste Erkenntnisse:
- Durch die Reduzierung der Indexdateigröße bietet IVF_SQ8 deutliche Leistungsverbesserungen gegenüber IVF_FLAT. IVF_SQ8 folgt einer ähnlichen Leistungskurve wie IVF_FLAT, wobei die Abfragezeit mit nq und nprobe zunimmt.
- Ähnlich wie bei IVF_FLAT ist die Leistung von IVF_SQ8 höher, wenn die Abfrage auf der CPU ausgeführt wird und wenn nq und nprobe kleiner sind.
IVF_SQ8 wurde in Milvus mit dem öffentlichen 1M-SIFT-Datensatz, der 1 Million 128-dimensionale Vektoren enthält, und dem glove-200-angular-Datensatz, der 1+ Millionen 200-dimensionale Vektoren enthält, für die Indexerstellung getestet (nlist = 16.384).
Blog_Beschleunigung der Ähnlichkeitssuche bei wirklich großen Daten mit Vektorindizierung_6.png
Wichtigste Erkenntnisse:
- Trotz der Komprimierung der Originaldaten ist bei IVF_SQ8 kein signifikanter Rückgang der Abfragegenauigkeit zu verzeichnen. Bei verschiedenen nprobe-Einstellungen hat IVF_SQ8 höchstens eine um 1 % niedrigere Rückrufrate als IVF_FLAT.
IVF_SQ8H: Neuer hybrider GPU/CPU-Ansatz, der noch schneller ist als IVF_SQ8.
IVF_SQ8H ist ein neuer Indextyp, der die Abfrageleistung im Vergleich zu IVF_SQ8 verbessert. Wenn ein IVF_SQ8-Index, der auf der CPU läuft, abgefragt wird, wird der größte Teil der gesamten Abfragezeit damit verbracht, nprobe Cluster zu finden, die dem Zieleingabevektor am nächsten sind. Um die Abfragezeit zu verkürzen, kopiert IVF_SQ8 die Daten für die Grobquantisierungsoperationen, die kleiner sind als die Indexdateien, in den GPU-Speicher, was die Grobquantisierungsoperationen erheblich beschleunigt. Dann bestimmt gpu_search_threshold, welches Gerät die Abfrage ausführt. Wenn nq >= gpu_search_threshold ist, führt die GPU die Abfrage aus; andernfalls führt die CPU die Abfrage aus.
IVF_SQ8H ist ein hybrider Indextyp, bei dem CPU und GPU zusammenarbeiten müssen. Er kann nur mit GPU-aktiviertem Milvus verwendet werden.
IVF_SQ8H Leistungstestergebnisse:
IVF_SQ8H-Abfragezeit-Leistungstests wurden in Milvus unter Verwendung des öffentlichen 1B-SIFT-Datensatzes, der 1 Milliarde 128-dimensionale Vektoren enthält, zur Indexerstellung durchgeführt.
Blog_Beschleunigung der Ähnlichkeitssuche bei wirklich großen Daten mit Vektorindizierung_7.png
Wichtigste Erkenntnisse:
- Wenn nq kleiner oder gleich 1.000 ist, sind die Abfragezeiten bei IVF_SQ8H fast doppelt so schnell wie bei IVFSQ8.
- Wenn nq = 2000 ist, sind die Abfragezeiten für IVFSQ8H und IVF_SQ8 gleich lang. Wenn jedoch der Parameter gpu_search_threshold kleiner als 2000 ist, ist IVF_SQ8H schneller als IVF_SQ8.
- Die Abfrageerinnerungsrate von IVF_SQ8H ist identisch mit der von IVF_SQ8, was bedeutet, dass weniger Abfragezeit ohne Verlust an Suchgenauigkeit erreicht wird.
Erfahren Sie mehr über Milvus, eine Plattform zur Verwaltung von Vektordaten in großem Maßstab.
Milvus ist eine Plattform zur Verwaltung von Vektordaten, die Anwendungen zur Ähnlichkeitssuche in den Bereichen künstliche Intelligenz, Deep Learning, herkömmliche Vektorberechnungen und mehr unterstützen kann. Weitere Informationen über Milvus finden Sie in den folgenden Ressourcen:
- Milvus ist unter einer Open-Source-Lizenz auf GitHub verfügbar.
- Zusätzliche Indextypen, einschließlich graph- und baumbasierte Indizes, werden in Milvus unterstützt. Eine umfassende Liste der unterstützten Indextypen finden Sie in der Dokumentation für Vektorindizes in Milvus.
- Um mehr über das Unternehmen zu erfahren, das Milvus auf den Markt gebracht hat, besuchen Sie Zilliz.com.
- Chatten Sie mit der Milvus-Community oder erhalten Sie Hilfe bei einem Problem auf Slack.
Methodik
Umgebung für Leistungstests
Die Serverkonfiguration, die für die Leistungstests in diesem Artikel verwendet wurde, sieht wie folgt aus:
- Intel ® Xeon ® Platinum 8163 @ 2.50GHz, 24 Kerne
- GeForce GTX 2080Ti x 4
- 768 GB Speicher
Relevante technische Konzepte
Auch wenn dies für das Verständnis dieses Artikels nicht erforderlich ist, finden Sie hier einige technische Konzepte, die für die Interpretation der Ergebnisse unserer Indexleistungstests hilfreich sind:
Blog_Beschleunigung der Ähnlichkeitssuche bei wirklich großen Daten mit Vektorindizierung_8.png
Ressourcen
Die folgenden Quellen wurden für diesen Artikel verwendet:
- "Enzyklopädie der Datenbanksysteme", Ling Liu und M. Tamer Özsu.
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word