milvus-logo
LFAI
Home
  • Konzepte

GPU-Index

Milvus unterstützt verschiedene GPU-Indextypen, um die Suchleistung und -effizienz zu beschleunigen, insbesondere in Szenarien mit hohem Durchsatz und hohem Wiederaufruf. Dieses Thema bietet einen Überblick über die von Milvus unterstützten GPU-Indextypen, ihre geeigneten Anwendungsfälle und Leistungsmerkmale. Informationen zur Erstellung von Indizes mit GPU finden Sie unter Index mit GPU.

Es ist wichtig zu beachten, dass die Verwendung eines GPU-Index nicht unbedingt die Latenzzeit im Vergleich zu einem CPU-Index reduziert. Wenn Sie den Durchsatz vollständig maximieren möchten, benötigen Sie einen extrem hohen Anfragedruck oder eine große Anzahl von Abfragevektoren.

performance Leistung

Die GPU-Unterstützung von Milvus wird vom Nvidia RAPIDS-Team beigesteuert. Im Folgenden sind die GPU-Indextypen aufgeführt, die derzeit von Milvus unterstützt werden.

GPU_CAGRA

GPU_CAGRA ist ein graphbasierter 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.

  • Parameter für die Indexerstellung

    ParameterBeschreibungStandardwert
    intermediate_graph_degreeBeeinflusst Recall und Erstellungszeit, indem der Grad des Graphen vor dem Pruning bestimmt wird. Empfohlene Werte sind 32 oder 64.128
    graph_degreeBeeinflusst die Suchleistung und den Abruf, indem der Grad des Graphen nach dem Pruning festgelegt wird. Eine größere Differenz zwischen diesen beiden Graden führt zu einer längeren Erstellungszeit. Sein Wert muss kleiner sein als der Wert von intermediate_graph_degree.64
    build_algoWählt den Graphenerzeugungsalgorithmus vor dem Pruning. Mögliche Werte:
    IVF_PQ: Bietet eine höhere Qualität, aber eine langsamere Erstellungszeit.
    NN_DESCENT Bietet einen schnelleren Aufbau mit potenziell geringerer Wiedererkennung.
    IVF_PQ
    cache_dataset_on_deviceLegt fest, ob der Originaldatensatz im GPU-Speicher zwischengespeichert werden soll. Mögliche Werte:
    “true”: Zwischenspeichern des Originaldatensatzes zur Verbesserung der Wiederauffindung durch Verfeinerung der Suchergebnisse.
    “false” Cache: Der Originaldatensatz wird nicht zwischengespeichert, um GPU-Speicher zu sparen.
    “false”
    adapt_for_cpuEntscheidet, ob die GPU für die Indexerstellung und die CPU für die Suche verwendet werden soll.
    Die Einstellung dieses Parameters auf true erfordert das Vorhandensein des Parameters ef in den Suchanfragen.
    “false”
  • Suchparameter

    ParameterBeschreibungStandardwert
    itopk_sizeBestimmt die Größe der Zwischenergebnisse, die während der Suche gespeichert werden. Ein größerer Wert kann die Wiederauffindbarkeit auf Kosten der Suchleistung verbessern. Er sollte mindestens dem endgültigen Top-k-Wert (Grenzwert) entsprechen und ist normalerweise eine Potenz von 2 (z. B. 16, 32, 64, 128).Leer
    search_widthGibt die Anzahl der Einstiegspunkte in den CAGRA-Graphen während der Suche an. Eine Erhöhung dieses Wertes kann die Wiederauffindbarkeit verbessern, kann sich aber auf die Suchleistung auswirken(z.B. 1, 2, 4, 8, 16, 32).Leer
    min_iterations / max_iterationsSteuert den Iterationsprozess der Suche. Standardmäßig sind sie auf 0 eingestellt, und CAGRA bestimmt automatisch die Anzahl der Iterationen auf der Grundlage von itopk_size und search_width. Eine manuelle Anpassung dieser Werte kann helfen, Leistung und Genauigkeit auszugleichen.0
    team_sizeGibt die Anzahl der CUDA-Threads an, die für die Berechnung des metrischen Abstands auf dem Grafikprozessor verwendet werden. Übliche Werte sind eine Potenz von 2 bis zu 32 (z. B. 2, 4, 8, 16, 32). Er hat einen geringen Einfluss auf die Suchleistung. Der Standardwert ist 0, wobei Milvus automatisch die team_size basierend auf der Vektordimension auswählt.0
    efLegt den Kompromiss zwischen Abfragezeit und -genauigkeit fest. Ein höherer ef Wert führt zu einer genaueren, aber langsameren Suche.
    Dieser Parameter ist obligatorisch, wenn Sie beim Erstellen des Index adapt_for_cpu auf true gesetzt haben.
    [top_k, int_max]
  • Grenzwerte für die Suche

    ParameterBereich
    limit (Top-K)<= 1024
    limit (Top-K)<=max((itopk_size + 31)// 32, search_width) * 32

GPU_IVF_FLAT

Ähnlich wie IVF_FLAT unterteilt auch GPU_IVF_FLAT die Vektordaten in nlist Cluster-Einheiten und vergleicht dann die Abstände zwischen dem Zieleingabevektor und dem Zentrum jedes Clusters. Abhängig von der Anzahl der Cluster, die das System abfragt (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 des 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.

GPU_IVF_FLAT ist der einfachste IVF-Index, und die in jeder Einheit gespeicherten kodierten Daten stimmen mit den Originaldaten überein.

Bei der Durchführung von Suchvorgängen ist zu beachten, dass Sie bei jeder Suche in einer mit GPU_IVF_FLAT indizierten Sammlung den Top-K-Wert auf bis zu 256 setzen können.

  • Parameter für die Indexerstellung

    ParameterBeschreibungBereichStandardwert
    nlistAnzahl der Cluster-Einheiten[1, 65536]128
    cache_dataset_on_deviceLegt fest, ob der Originaldatensatz im GPU-Speicher zwischengespeichert werden soll. Mögliche Werte:
    “true”: Zwischenspeichern des Originaldatensatzes zur Verbesserung der Wiedererkennung durch Verfeinerung der Suchergebnisse.
    “false” Cache: Der Originaldatensatz wird nicht zwischengespeichert, um GPU-Speicher zu sparen.
    "true" "flase""false"
  • Suchparameter

    • Allgemeine Suche

      ParameterBeschreibungBereichStandardwert
      nprobeAnzahl der abzufragenden Einheiten[1, nlist]8
  • Grenzen für die Suche

    ParameterBereich
    limit (Top-K)<= 2048

GPU_IVF_PQ

PQ (Produktquantisierung) zerlegt den ursprünglichen hochdimensionalen Vektorraum gleichmäßig in kartesische Produkte von m niedrigdimensionalen Vektorräumen und quantisiert dann die zerlegten niedrigdimensionalen Vektorräume. Anstatt die Abstände zwischen dem Zielvektor und dem Zentrum aller Einheiten zu berechnen, ermöglicht die Produktquantisierung die Berechnung der Abstände zwischen dem Zielvektor und dem Clustering-Zentrum jedes niedrigdimensionalen Raums und reduziert die Zeit- und Raumkomplexität des Algorithmus erheblich.

IVF_PQ führt das IVF-Index-Clustering durch, bevor das Produkt der Vektoren quantisiert wird. Seine Indexdatei ist sogar noch kleiner als IVF_SQ8, aber auch hier kommt es zu einem Verlust an Genauigkeit bei der Suche nach Vektoren.

Die Parameter für die Indexerstellung und die Suchparameter variieren je nach Milvus-Verteilung. Wählen Sie zunächst Ihre Milvus-Distribution aus.

Beachten Sie bei der Durchführung von Suchvorgängen, dass Sie den Top-K-Wert für jede Suche gegen eine GPU_IVF_FLAT-indizierte Sammlung auf bis zu 8192 einstellen können.

  • Parameter für den Indexaufbau

    ParameterBeschreibungBereichStandardwert
    nlistAnzahl der Cluster-Einheiten[1, 65536]128
    mAnzahl der Faktoren der Produktquantisierung,dim mod m or = 00
    nbits[Optional] Anzahl der Bits, in denen jeder niedrigdimensionale Vektor gespeichert wird.[1, 16]8
    cache_dataset_on_deviceLegt fest, ob der Originaldatensatz im GPU-Speicher zwischengespeichert werden soll. Mögliche Werte:
    “true”: Zwischenspeichern des Originaldatensatzes zur Verbesserung der Wiedererkennung durch Verfeinerung der Suchergebnisse.
    “false” Cache: Der Originaldatensatz wird nicht zwischengespeichert, um GPU-Speicher zu sparen.
    "true" "false""false"
  • Suchparameter

    • Allgemeine Suche

      ParameterBeschreibungBereichStandardwert
      nprobeAnzahl der abzufragenden Einheiten[1, nlist]8
  • Grenzen für die Suche

    ParameterBereich
    limit (Top-K)<= 1024

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.

Für GPU_BRUTE_FORCE sind keine zusätzlichen Indexerstellungs- oder Suchparameter erforderlich.

Schlussfolgerung

Derzeit lädt Milvus alle Indizes in den GPU-Speicher, um effiziente Suchvorgänge zu ermöglichen. Die Menge der Daten, die geladen werden können, hängt von der Größe des GPU-Speichers ab:

  • GPU_CAGRA: Der Speicherbedarf beträgt etwa das 1,8-fache der ursprünglichen Vektordaten.
  • GPU_IVF_FLAT und GPU_BRUTE_FORCE: Benötigt Speicher, der der Größe der Originaldaten entspricht.
  • GPU_IVF_PQ: Verwendet einen kleineren Speicherbedarf, der von den Einstellungen der Komprimierungsparameter abhängt.

Übersetzt vonDeepL

Try Managed Milvus for Free

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

Get Started
Feedback

War diese Seite hilfreich?