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

GPU_IVF_PQ

Der GPU_IVF_PQ-Index baut auf dem IVF_PQ-Konzept auf, indem er Inverted File Clustering mit Product Quantization (PQ) kombiniert, das hochdimensionale Vektoren in kleinere Unterräume aufteilt und diese für eine effiziente Ähnlichkeitssuche quantisiert. GPU_IVF_PQ wurde ausschließlich für GPU-Umgebungen entwickelt und nutzt die Parallelverarbeitung, um Berechnungen zu beschleunigen und große Vektordaten effektiv zu verarbeiten. Weitere Informationen zu den grundlegenden Konzepten finden Sie unter IVF_PQ.

Index erstellen

Um einen GPU_IVF_PQ -Index für ein Vektorfeld in Milvus zu erstellen, verwenden Sie die Methode add_index() und geben Sie die Parameter 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_IVF_PQ", # 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={
        "m": 4, # Number of sub-vectors to split eahc vector into
    } # Index building params
)

In dieser Konfiguration:

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

  • metric_type: Die Methode zur Berechnung des Abstands zwischen Vektoren. Unterstützte Werte sind COSINE, L2 und IP. Einzelheiten finden Sie unter Metrische Typen.

  • params: Zusätzliche Konfigurationsoptionen für den Aufbau des Index.

    • m: Anzahl der Untervektoren, in die der Vektor aufgeteilt werden soll.

    Weitere Informationen zu den für den Index GPU_IVF_PQ verfügbaren Parametern finden Sie unter Parameter für den Indexaufbau.

Sobald die Index-Parameter konfiguriert sind, können Sie den Index erstellen, indem Sie die Methode create_index() direkt verwenden oder die Index-Parameter 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": {
        "nprobe": 10, # Number of clusters to 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.

    • nprobe: Anzahl der Cluster, nach denen gesucht werden soll.

    Weitere Suchparameter, die für den Index GPU_IVF_PQ verfügbar sind, finden Sie unter Indexspezifische Suchparameter.

Index-Parameter

Dieser Abschnitt gibt einen Überblick über die Parameter, die für den Aufbau eines Index und die Durchführung von Suchen 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

Wertebereich

Tuning-Vorschlag

IVF

nlist

Die Anzahl der Cluster, die mit dem k-means-Algorithmus während der Indexerstellung erstellt werden.

Typ: Integer Bereich: [1, 65536]

Standardwert: 128

Größere nlist Werte verbessern die Wiederauffindbarkeit durch die Erstellung von feineren Clustern, erhöhen aber die Indexerstellungszeit. Optimieren Sie den Wert je nach Größe des Datensatzes und der verfügbaren Ressourcen. In den meisten Fällen wird empfohlen, einen Wert innerhalb dieses Bereichs festzulegen: [32, 4096].

PQ

m

Die Anzahl der Untervektoren (für die Quantisierung), in die jeder hochdimensionale Vektor während des Quantisierungsprozesses unterteilt wird.

Typ: Integer Bereich: [1, 65536]

Standardwert: Keine

Ein höherer Wert von m kann die Genauigkeit verbessern, erhöht aber auch die Rechenkomplexität und den Speicherverbrauch. m muss ein Divisor der Vektordimension(D) sein, um eine korrekte Zerlegung zu gewährleisten. Ein allgemein empfohlener Wert ist m = D/2.

In den meisten Fällen wird empfohlen, einen Wert in diesem Bereich zu wählen: [D/8, D].

nbits

Die Anzahl der Bits, die verwendet werden, um den Index des Schwerpunkts jedes Untervektors in komprimierter Form darzustellen. Sie bestimmt direkt die Größe jedes Codebuchs. Jedes Codebuch enthält 2nbits Zentroide. Wenn zum Beispiel nbits auf 8 eingestellt ist, wird jeder Untervektor durch einen 8-Bit-Schwerpunktindex dargestellt. Dies ermöglicht28 (256) mögliche Schwerpunkte im Codebuch für diesen Teilvektor.

Typ: Integer Bereich: [1, 24]

Standardwert: 8

Ein höherer Wert von nbits ermöglicht größere Codebücher, was zu genaueren Darstellungen der ursprünglichen Vektoren führen kann. Allerdings bedeutet dies auch, dass mehr Bits zum Speichern jedes Index verwendet werden, was zu einer geringeren Komprimierung führt. In den meisten Fällen wird empfohlen, einen Wert innerhalb dieses Bereichs zu wählen: [1, 16].

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 zwischengespeichert, um GPU-Speicher zu sparen.

Typ: String Bereich: ["true", "false"]

Standardwert: "false"

Die Einstellung "true" verbessert die Wiederauffindbarkeit durch Verfeinerung der Suchergebnisse, verbraucht aber mehr GPU-Speicher. Die Einstellung "false" spart GPU-Speicher.

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

Wertebereich

Tuning-Vorschlag

IVF

nprobe

Die Anzahl der Cluster, in denen nach Kandidaten gesucht wird.

Typ: Integer Bereich: [1, nlist]

Standardwert: 8

Höhere Werte ermöglichen die Suche nach mehr Clustern, was die Wiederauffindbarkeit durch die Erweiterung des Suchbereichs verbessert, jedoch auf Kosten einer erhöhten Abfragelatenz. Setzen Sie nprobe proportional zu nlist, um ein Gleichgewicht zwischen Geschwindigkeit und Genauigkeit herzustellen.

In den meisten Fällen wird empfohlen, einen Wert innerhalb dieses Bereichs festzulegen: [1, nlist].

Try Managed Milvus for Free

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

Get Started
Feedback

War diese Seite hilfreich?