• Über Milvus
  • Los geht's
  • Konzepte
  • Benutzerhandbuch
  • Datenimport
  • AI-Tools
  • Leitfaden für die Verwaltung
  • Werkzeuge
  • Integrationen
  • Anleitungen
  • FAQs
  • API Reference

GPU-Index-Übersicht

Der Aufbau eines Index mit GPU-Unterstützung in Milvus kann die Suchleistung in Szenarien mit hohem Durchsatz und hohem Rückruf deutlich verbessern.

Die folgende Abbildung vergleicht den Abfragedurchsatz (Abfragen pro Sekunde) über verschiedene Indexkonfigurationen, Hardwarekonfigurationen, Vektordatensätze (Cohere und OpenAI) und Suchstapelgrößen hinweg. Dabei zeigt sich, dass GPU_CAGRA durchweg besser abschneidet als andere Methoden.

Gpu Index Performance GPU-Indexleistung

Konfigurieren Sie den GPU-Speicherpool für Milvus

Milvus unterstützt einen globalen GPU-Speicherpool und bietet zwei Konfigurationsparameter, initMemSize und maxMemSize, in der Milvus-Konfigurationsdatei.

gpu:
  initMemSize: 0 # set the initial memory pool size.
  maxMemSize: 0 # sets the maximum memory usage limit. When the memory usage exceeds initMemSize, Milvus will attempt to expand the memory pool.

Der Standardwert initMemSize ist normalerweise die Hälfte des GPU-Speichers, wenn Milvus startet, und maxMemSize ist der Standardwert für den gesamten GPU-Speicher. Die Größe des GPU-Speicherpools ist anfänglich auf initMemSize eingestellt und wird bei Bedarf automatisch auf maxMemSize erweitert.

Wenn ein GPU-aktivierter Index angegeben wird, lädt Milvus die Zielsammlungsdaten vor der Suche in den GPU-Speicher, so dass maxMemSize mindestens die Datengröße sein muss.

Begrenzungen

  • Für GPU_IVF_FLAT beträgt der Höchstwert für limit 1.024.

  • Für GPU_IVF_PQ und GPU_CAGRA ist der Höchstwert für limit 1.024.

  • Während es für GPU_BRUTE_FORCE keinen festgelegten limit gibt, wird empfohlen, 4.096 nicht zu überschreiten, um mögliche Leistungsprobleme zu vermeiden.

  • Derzeit unterstützen GPU-Indizes nicht den COSINE Abstand. Wenn der COSINE Abstand benötigt wird, sollten die Daten zuerst normalisiert werden, und dann kann der innere Produktabstand (IP) als Ersatz verwendet werden.

  • Das Laden von OOM-Schutz für GPU-Indizes wird nicht vollständig unterstützt, zu viele Daten können zum Absturz von QueryNode führen.

  • GPU-Indizes unterstützen keine Suchfunktionen wie Bereichssuche und Gruppierungssuche.

Unterstützte GPU-Indextypen

In der folgenden Tabelle sind die von Milvus unterstützten GPU-Indextypen aufgeführt.

Index-Typ

Beschreibung

Speicherverwendung

GPU_CAGRA

GPU_CAGRA ist ein graphenbasierter Index, der für GPUs optimiert ist. Die Verwendung von GPUs mit Inferenzqualität zur Ausführung der GPU-Version von Milvus kann im Vergleich zur Verwendung teurer GPUs mit Trainingsqualität kostengünstiger sein.

Der Speicherbedarf ist etwa 1,8 Mal so hoch wie der der ursprünglichen Vektordaten.

GPU_IVF_FLAT

GPU_IVF_FLAT ist der einfachste IVF-Index, und die in jeder Einheit gespeicherten kodierten Daten stimmen mit den Originaldaten überein. Beachten Sie bei der Durchführung von Suchvorgängen, dass Sie für jede Suche in einer GPU_IVF_FLAT-indizierten Sammlung den Top-k-Wert (limit) auf bis zu 256 einstellen können.

Benötigt Speicher, der der Größe der Originaldaten entspricht.

GPU_IVF_PQ

GPU_IVF_PQ führt ein IVF-Indexclustering durch, bevor das Produkt der Vektoren quantisiert wird. Beachten Sie bei der Durchführung von Suchvorgängen, dass Sie den Top-k-Wert (limit) für jede Suche in einer GPU_IVF_FLAT-indizierten Sammlung auf bis zu 8.192 einstellen können.

Verwendet einen kleineren Speicherbedarf, der von den Einstellungen der Kompressionsparameter abhängt.

GPU_BRUTE_FORCE

GPU_BRUTE_FORCE ist auf Fälle zugeschnitten, in denen eine extrem hohe Trefferquote entscheidend ist. Sie garantiert eine Trefferquote von 1, indem sie jede Abfrage mit allen Vektoren des Datensatzes vergleicht. Es benötigt nur den metrischen Typ (metric_type) und top-k (limit) als Indexaufbau- und Suchparameter.

Benötigt einen Speicherplatz, der der Größe der Originaldaten entspricht.

Konfigurieren Sie die Milvus-Einstellungen für die GPU-Speichersteuerung

Milvus verwendet einen globalen Grafikspeicher-Pool für die Zuweisung von GPU-Speicher. Er unterstützt zwei Parameter initMemSize und maxMemSize in der Milvus-Konfigurationsdatei. Die Poolgröße ist anfänglich auf initMemSize eingestellt und wird automatisch auf maxMemSize erweitert, wenn diese Grenze überschritten wird.

Der Standardwert initMemSize ist 1/2 des verfügbaren GPU-Speichers, wenn Milvus startet, und der Standardwert maxMemSize ist gleich dem gesamten verfügbaren GPU-Speicher.

Bis zu Milvus 2.4.1 verwendet Milvus einen einheitlichen GPU-Speicherpool. Für Versionen vor 2.4.1 wurde empfohlen, beide Werte auf 0 zu setzen.

gpu:
  initMemSize: 0 #set the initial memory pool size.
  maxMemSize: 0 #maxMemSize sets the maximum memory usage limit. When the memory usage exceed initMemSize, Milvus will attempt to expand the memory pool. 

Ab Milvus 2.4.1 wird der GPU-Speicherpool nur noch für temporäre GPU-Daten während der Suche verwendet. Es wird daher empfohlen, ihn auf 2048 und 4096 zu setzen.

gpu:
  initMemSize: 2048 #set the initial memory pool size.
  maxMemSize: 4096 #maxMemSize sets the maximum memory usage limit. When the memory usage exceed initMemSize, Milvus will attempt to expand the memory pool. 

Um zu erfahren, wie man einen GPU-Index erstellt, lesen Sie die spezifische Anleitung für jeden Indextyp.

FAQ

  • Wann ist es sinnvoll, einen GPU-Index zu verwenden?

    Ein GPU-Index ist besonders vorteilhaft in Situationen, die einen hohen Durchsatz oder eine hohe Abrufrate erfordern. Bei großen Batches kann der Durchsatz der GPU-Indizierung beispielsweise den der CPU-Indizierung um das 100-fache übertreffen. In Szenarien mit kleineren Stapeln übertrifft die GPU-Indizierung die CPU-Indizierung in Bezug auf die Leistung immer noch deutlich. Darüber hinaus kann die Einbindung einer GPU den Prozess der Indexerstellung erheblich beschleunigen, wenn Daten schnell eingefügt werden müssen.

  • Für welche Szenarien sind GPU-Indizes wie GPU_CAGRA, GPU_IVF_PQ, GPU_IVF_FLAT und GPU_BRUTE_FORCE am besten geeignet?

    GPU_CAGRA GPU_IVF_PQ und GPU_BRUTE_FORCE-Indizes sind ideal für Szenarien, die eine höhere Leistung erfordern, allerdings um den Preis, dass mehr Speicher verbraucht wird. In Umgebungen, in denen Speicherplatzeinsparung eine Priorität ist, kann der Index GPU_IVF_PQ dazu beitragen, die Speicheranforderungen zu minimieren, auch wenn dies mit einem höheren Präzisionsverlust einhergeht. Der Index GPU_IVF_FLAT stellt eine ausgewogene Option dar, die einen Kompromiss zwischen Leistung und Speicherbedarf bietet. Der Index GPU_BRUTE_FORCE schließlich ist für erschöpfende Suchvorgänge konzipiert und garantiert durch die Durchführung von Traversalsuchen eine Abrufrate von 1.

Try Managed Milvus for Free

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

Get Started
Feedback

War diese Seite hilfreich?