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

milvus-logo
LFAI
  • Home
  • Blog
  • Was sind erweiterte Vektorerweiterungen?

Was sind erweiterte Vektorerweiterungen?

  • Engineering
November 10, 2020
milvus

Bewusste intelligente Maschinen, die die Welt übernehmen wollen, sind ein fester Bestandteil der Science-Fiction, aber in Wirklichkeit sind moderne Computer sehr gehorsam. Ohne dass man es ihnen sagt, wissen sie selten, was sie mit sich selbst anfangen sollen. Computer führen Aufgaben auf der Grundlage von Anweisungen oder Befehlen aus, die von einem Programm an einen Prozessor gesendet werden. Auf der untersten Ebene ist jede Anweisung eine Folge von Einsen und Nullen, die eine Operation beschreibt, die der Computer ausführen soll. In den Assemblersprachen von Computern entspricht jede Anweisung in der Maschinensprache in der Regel einer Prozessoranweisung. Die Zentraleinheit (CPU) stützt sich auf Anweisungen, um Berechnungen durchzuführen und Systeme zu steuern. Darüber hinaus wird die CPU-Leistung häufig anhand der Fähigkeit zur Befehlsausführung (z. B. Ausführungszeit) gemessen.

Was sind erweiterte Vektorerweiterungen?

Advanced Vector Extensions (AVX) sind ein Befehlssatz für Mikroprozessoren, die auf der x86-Familie von Befehlssatzarchitekturen basieren. Erstmals von Intel im März 2008 vorgeschlagen, fand AVX drei Jahre später mit der Einführung von Sandy Bridge - einer Mikroarchitektur, die in der zweiten Generation von Intel Core-Prozessoren (z. B. Core i7, i5, i3) verwendet wird - und der konkurrierenden Mikroarchitektur von AMD, die ebenfalls 2011 veröffentlicht wurde, Bulldozer, breite Unterstützung.

Mit AVX wurden ein neues Kodierungsschema, neue Funktionen und neue Anweisungen eingeführt. AVX2 erweitert die meisten Ganzzahloperationen auf 256 Bit und führt FMA-Operationen (Fused Multiply-Accumulate) ein. AVX-512 erweitert AVX auf 512-Bit-Operationen unter Verwendung einer neuen EVEX-Präfixkodierung (Enhanced Vector Extension).

Milvus ist eine Open-Source-Vektordatenbank, die für die Ähnlichkeitssuche und Anwendungen der künstlichen Intelligenz (KI) entwickelt wurde. Die Plattform unterstützt den AVX-512-Befehlssatz, d. h. sie kann mit allen CPUs verwendet werden, die AVX-512-Befehle enthalten. Milvus hat ein breites Anwendungsspektrum, das Empfehlungssysteme, Computer Vision, natürliche Sprachverarbeitung (NLP) und mehr umfasst. In diesem Artikel werden Leistungsergebnisse und Analysen einer Milvus-Vektor-Datenbank auf AVX-512 und AVX2 vorgestellt.

Milvus-Leistung auf AVX-512 vs. AVX2

System-Konfiguration

  • CPU: Intel® Platinum 8163 CPU @ 2.50GHz24 Kerne 48 Threads
  • Anzahl der CPUs: 2
  • Grafikkarte, GeForce RTX 2080Ti 11GB 4 Karten
  • Arbeitsspeicher: 768 GB
  • Festplatte: 2TB SSD

Milvus-Parameter

  • cahce.cahe_size: 25, Die Größe des CPU-Speichers, der zum Zwischenspeichern von Daten für schnellere Abfragen verwendet wird.
  • nlist: 4096
  • nprobe: 128

Hinweis: nlist ist der Indizierungsparameter, der vom Client erstellt wird; nprobe ist der Suchparameter. Sowohl IVF_FLAT als auch IVF_SQ8 verwenden einen Clustering-Algorithmus, um eine große Anzahl von Vektoren in Buckets zu partitionieren, wobei nlist die Gesamtzahl der Buckets ist, die während des Clustering partitioniert werden. Der erste Schritt bei einer Abfrage besteht darin, die Anzahl der Buckets zu finden, die dem Zielvektor am nächsten liegen, und der zweite Schritt besteht darin, die Top-k-Vektoren in diesen Buckets zu finden, indem der Abstand der Vektoren verglichen wird. nprobe bezieht sich auf die Anzahl der Buckets im ersten Schritt.

Datensatz: SIFT10M-Datensatz

Für diese Tests wird der SIFT10M-Datensatz verwendet, der eine Million 128-dimensionale Vektoren enthält und häufig für die Analyse der Leistung entsprechender Nearest-Neighbor-Suchmethoden verwendet wird. Die Top-1-Suchzeit für nq = [1, 10, 100, 500, 1000] wird zwischen den beiden Befehlssätzen verglichen.

Ergebnisse nach Vektorindex-Typ

Vektorindizes sind zeit- und platzsparende Datenstrukturen, die auf dem Vektorfeld einer Sammlung unter Verwendung verschiedener mathematischer Modelle aufgebaut sind. Mit Hilfe der Vektorindizierung können große Datensätze effizient durchsucht werden, wenn versucht wird, ähnliche Vektoren wie ein Eingangsvektor zu identifizieren. Da eine genaue Suche sehr zeitaufwändig ist, verwenden die meisten von Milvus unterstützten Indexarten die ANN-Suche (approximate nearest neighbor).

Für diese Tests wurden drei Indizes mit AVX-512 und AVX2 verwendet: IVF_FLAT, IVF_SQ8 und HNSW.

IVF_FLAT

Invertierte Datei (IVF_FLAT) ist ein auf Quantisierung basierender Indextyp. Er ist der einfachste IVF-Index, und die kodierten Daten, die in jeder Einheit gespeichert sind, stimmen mit den Originaldaten überein. Der Index unterteilt die Vektordaten in eine Anzahl von Cluster-Einheiten (nlist) und vergleicht dann die Abstände zwischen dem Zieleingangsvektor und dem Zentrum jedes Clusters. Je nach 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 verkürzt. Durch die Anpassung von nprobe kann ein ideales Gleichgewicht zwischen Genauigkeit und Geschwindigkeit für ein bestimmtes Szenario gefunden werden.

Leistungsergebnisse IVF_FLAT.pngIVF_FLAT.png

IVF_SQ8

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 Festplatten-, CPU- oder GPU-Speicherressourcen begrenzt sind, ist IVF_SQ8 eine bessere Option als IVF_FLAT. Dieser Indextyp kann jede Dimension des ursprünglichen Vektors von einer Vier-Byte-Gleitkommazahl in eine vorzeichenlose Ein-Byte-Ganzzahl konvertieren, indem er eine skalare Quantisierung durchführt. Dies reduziert den Festplatten-, CPU- und GPU-Speicherverbrauch um 70-75 %.

Leistungsergebnisse IVF_SQ8.pngIVF_SQ8.png

HNSW

Hierarchical Small World Graph (HNSW) ist ein graphbasierter Indizierungsalgorithmus. Abfragen beginnen in der obersten Ebene mit der Suche nach dem Knoten, der dem Ziel am nächsten liegt, und gehen dann in die nächste Ebene für eine weitere Suchrunde. Nach mehreren Iterationen kann er sich schnell der Zielposition nähern.

Leistungsergebnisse HNSW.pngHNSW.png

Vergleich der Vektorindizes

Der Vektorabruf ist mit dem AVX-512-Befehlssatz durchweg schneller als mit AVX2. Das liegt daran, dass AVX-512 512-Bit-Berechnungen unterstützt, während AVX2 nur 256-Bit-Berechnungen unterstützt. Theoretisch sollte AVX-512 doppelt so schnell sein wie AVX2, allerdings führt Milvus neben den Vektorähnlichkeitsberechnungen auch andere zeitaufwändige Aufgaben durch. Es ist unwahrscheinlich, dass die Gesamtabrufzeit von AVX-512 in realen Szenarien doppelt so kurz ist wie die von AVX2. comparison.pngcomparison.png

Der Abruf ist mit dem HNSW-Index deutlich schneller als mit den beiden anderen Indizes, während der Abruf mit IVF_SQ8 bei beiden Befehlssätzen etwas schneller ist als mit IVF_FLAT. Dies liegt wahrscheinlich daran, dass IVF_SQ8 nur 25 % des Speicherbedarfs von IVF_FLAT benötigt. IVF_SQ8 lädt 1 Byte für jede Vektordimension, während IVF_FLAT 4 Byte pro Vektordimension lädt. Die für die Berechnung benötigte Zeit wird höchstwahrscheinlich durch die Speicherbandbreite begrenzt. Infolgedessen benötigt IVF_SQ8 nicht nur weniger Platz, sondern auch weniger Zeit zum Abrufen von Vektoren.

Milvus ist eine vielseitige, leistungsstarke Vektordatenbank

Die in diesem Artikel vorgestellten Tests zeigen, dass Milvus sowohl auf dem AVX-512- als auch auf dem AVX2-Befehlssatz unter Verwendung verschiedener Indizes eine hervorragende Leistung bietet. Unabhängig vom Index-Typ schneidet Milvus auf AVX-512 besser ab.

Milvus ist mit einer Vielzahl von Deep-Learning-Plattformen kompatibel und wird in verschiedenen KI-Anwendungen eingesetzt. Milvus 2.0, eine überarbeitete Version der beliebtesten Vektordatenbank der Welt, wurde im Juli 2021 unter einer Open-Source-Lizenz veröffentlicht. Weitere Informationen über das Projekt finden Sie in den folgenden Ressourcen:

  • Finden Sie Milvus auf GitHub oder tragen Sie dazu bei.
  • Interagieren Sie mit der Community über Slack.
  • Verbinden Sie sich mit uns auf Twitter.

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

Weiterlesen