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

GPU_CAGRA

Der GPU_CAGRA-Index 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.

Index erstellen

Um einen GPU_CAGRA -Index auf einem Vektorfeld in Milvus zu erstellen, verwenden Sie die Methode add_index() und geben Sie index_type, metric_type und zusätzliche Parameter für den Index an.

from pymilvus import MilvusClient

# Prepare index building params
index_params = MilvusClient.prepare_index_params()

index_params.add_index(
    field_name="your_vector_field_name", # Name of the vector field to be indexed
    index_type="GPU_CAGRA", # Type of the index to create
    index_name="vector_index", # Name of the index to create
    metric_type="L2", # Metric type used to measure similarity
    params={
        "intermediate_graph_degree": 64, # Affects recall and build time by determining the graph’s degree before pruning
        "graph_degree": 32, # Affets search performance and recall by setting the graph’s degree after pruning
        "build_algo": "IVF_PQ", # Selects the graph generation algorithm before pruning
        "cache_dataset_on_device": "true", # Decides whether to cache the original dataset in GPU memory
        "adapt_for_cpu": "false", # Decides whether to use GPU for index-building and CPU for search
    } # Index building params
)

In dieser Konfiguration:

  • index_type: Der Typ des zu erstellenden Index. In diesem Beispiel setzen Sie den Wert auf GPU_CAGRA.

  • metric_type: Die Methode zur Berechnung des Abstands zwischen Vektoren. Einzelheiten finden Sie unter Metrische Typen.

  • params: Zusätzliche Konfigurationsoptionen für die Erstellung des Indexes. Weitere Informationen zu den für den Index GPU_CAGRA verfügbaren Parametern finden Sie unter Parameter für den Indexaufbau.

Sobald die Indexparameter konfiguriert sind, können Sie den Index erstellen, indem Sie die Methode create_index() direkt verwenden oder die Indexparameter in der Methode create_collection übergeben. Weitere Informationen finden Sie unter Sammlung erstellen.

Suche im Index

Sobald der Index erstellt und die Entitäten eingefügt sind, können Sie Ähnlichkeitssuchen im Index durchführen.

search_params = {
    "params": {
        "itopk_size": 16, # Determines the size of intermediate results kept during the search
        "search_width": 8, # Specifies the number of entry points into the CAGRA graph during the search
    }
}

res = MilvusClient.search(
    collection_name="your_collection_name", # Collection name
    anns_field="vector_field", # Vector field name
    data=[[0.1, 0.2, 0.3, 0.4, 0.5]],  # Query vector
    limit=3,  # TopK results to return
    search_params=search_params
)

In dieser Konfiguration:

  • params: Zusätzliche Konfigurationsoptionen für die Suche im Index. Weitere Suchparameter, die für den GPU_CAGRA Index verfügbar sind, finden Sie unter Indexspezifische Suchparameter.

CPU-Suche zur Ladezeit aktivierenCompatible with Milvus 2.6.4+

Um die CPU-Suche dynamisch zur Ladezeit zu aktivieren, bearbeiten Sie die folgende Konfiguration in milvus.yaml:

# milvus.yaml
knowhere:
  GPU_CAGRA:
    load: 
      adapt_for_cpu: true

Verhalten

  • Wenn load.adapt_for_cpu auf true gesetzt ist, konvertiert Milvus den GPU_CAGRA-Index während des Ladens in ein CPU-ausführbares Format (HNSW-ähnlich).

  • Nachfolgende Suchoperationen werden auf der CPU ausgeführt, auch wenn der Index ursprünglich für die GPU erstellt wurde.

  • Wird die Option weggelassen oder ist sie falsch, bleibt der Index auf der GPU und die Suchvorgänge werden auf der GPU ausgeführt.

Verwenden Sie die CPU-Anpassung während der Ladezeit in hybriden oder kostensensitiven Umgebungen, in denen GPU-Ressourcen für die Indexerstellung reserviert sind, die Suchvorgänge aber auf der CPU ausgeführt werden.

Index-Parameter

Dieser Abschnitt gibt einen Überblick über die Parameter, die für den Aufbau eines Index und die Durchführung von Suchvorgängen im Index verwendet werden.

Indexaufbau-Parameter

In der folgenden Tabelle sind die Parameter aufgeführt, die in params beim Aufbau eines Index konfiguriert werden können.

Parameter

Beschreibung

Standardwert

intermediate_graph_degree

Beeinflusst den Abruf und die Aufbauzeit, indem der Grad des Graphen vor dem Pruning bestimmt wird. Empfohlene Werte sind 32 oder 64.

128

graph_degree

Beeinflusst 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_algo

Wä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_device

Legt 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": Der Originaldatensatz wird nicht im Cache gespeichert, um GPU-Speicher zu sparen.

"false"

adapt_for_cpu

Entscheidet, 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"

Indexspezifische Suchparameter

In der folgenden Tabelle sind die Parameter aufgeführt, die in search_params.params für die Suche im Index konfiguriert werden können.

Parameter

Beschreibung

Standardwert

itopk_size

Bestimmt 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_width

Gibt 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_iterations

Steuert 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_size

Gibt 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

ef

Legt 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 setzen.

[top_k, int_max]

Try Managed Milvus for Free

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

Get Started
Feedback

War diese Seite hilfreich?