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

On-Disk-Index

Dieser Artikel stellt DiskANN vor, einen On-Disk-Indexierungsalgorithmus für festplattenoptimierte Vektorsuchen. DiskANN basiert auf Vamana-Graphen und ermöglicht effiziente On-Disk-Vektorsuchen in großen Datensätzen.

Um die Abfrageleistung zu verbessern, können Sie für jedes Vektorfeld einen Index-Typ angeben.

Derzeit unterstützt ein Vektorfeld nur einen Index-Typ. Milvus löscht automatisch den alten Index, wenn der Indextyp gewechselt wird.

Voraussetzungen

Um DiskANN in Milvus zu verwenden, müssen Sie beachten, dass

  • Die Milvus-Instanz läuft auf Ubuntu 18.04.6 oder einer späteren Version.
  • Der Milvus-Datenpfad sollte auf eine NVMe-SSD gemountet werden, um die volle Leistung zu erreichen:
    • Für eine eigenständige Milvus-Instanz sollte der Datenpfad /var/lib/milvus/data in dem Container sein, in dem die Instanz läuft.
    • Für eine Milvus-Cluster-Instanz sollte der Datenpfad /var/lib/milvus/data in den Containern sein, in denen die QueryNodes und IndexNodes laufen.

Begrenzungen

Um DiskANN zu verwenden, müssen Sie sicherstellen, dass Sie

  • Verwenden Sie nur Float-Vektoren mit mindestens 1 Dimension in Ihren Daten.
  • Verwenden Sie nur Euklidische Distanz (L2), Inneres Produkt (IP) oder COSINE, um den Abstand zwischen Vektoren zu messen.

Index- und Sucheinstellungen

  • Parameter für den Indexaufbau

    Wenn Sie einen DiskANN-Index erstellen, verwenden Sie DISKANN als Indextyp. Es sind keine Indexparameter erforderlich.

  • Suchparameter

    ParameterBeschreibungBereichStandardwert
    search_listGröße der Kandidatenliste, eine größere Größe bietet eine höhere Auffindungsrate bei verminderter Leistung.[topk, int32_max]16

DiskANN ist abstimmbar. Sie können die DiskANN-bezogenen Parameter in ${MILVUS_ROOT_PATH}/configs/milvus.yaml ändern, um die Leistung zu verbessern.

...
DiskIndex:
  MaxDegree: 56
  SearchListSize: 100
  PQCodeBudgetGBRatio: 0.125
  SearchCacheBudgetGBRatio: 0.125
  BeamWidthRatio: 4.0
...
ParameterBeschreibungWertebereichStandardwert
MaxDegreeMaximaler Grad des Vamana-Graphen.
Ein größerer Wert bietet eine höhere Auffindungsrate, erhöht jedoch die Größe des Index und die Zeit für den Aufbau des Index.
[1, 512]56
SearchListSizeGröße der Kandidatenliste.
Ein größerer Wert erhöht den Zeitaufwand für den Aufbau des Indexes, bietet aber eine höhere Wiederfindungsrate.
Setzen Sie ihn auf einen Wert kleiner als MaxDegree, es sei denn, Sie müssen die Zeit für den Indexaufbau reduzieren.
[1, int32_max]100
PQCodeBudgetGBRatioGrößenbeschränkung für den PQ-Code.
Ein größerer Wert bietet eine höhere Abrufrate, erhöht aber den Speicherverbrauch.
(0.0, 0.25]0.125
SearchCacheBudgetGBRatioVerhältnis von zwischengespeicherten Knotennummern zu Rohdaten.
Ein größerer Wert verbessert die Indexerstellungsleistung bei erhöhtem Speicherbedarf.
[0.0, 0.3)0.10
BeamWidthRatioVerhältnis zwischen der maximalen Anzahl von IO-Anfragen pro Suchiteration und der CPU-Anzahl.[1, max(128 / CPU-Anzahl, 16)]4.0

Fehlersuche

  • Wie kann man mit dem io_setup() failed; returned -11, errno=11:Resource temporarily unavailable Fehler umgehen?

    Der Linux-Kernel bietet die Funktion Asynchronous non-blocking I/O (AIO), die es einem Prozess ermöglicht, mehrere E/A-Operationen gleichzeitig zu initiieren, ohne auf die Fertigstellung einer dieser Operationen warten zu müssen. Dies trägt zur Leistungssteigerung von Anwendungen bei, bei denen sich Verarbeitung und E/A überschneiden können.

    Die Leistung kann mithilfe der virtuellen Datei /proc/sys/fs/aio-max-nr im proc-Dateisystem eingestellt werden. Der Parameter aio-max-nr bestimmt die maximale Anzahl der zulässigen gleichzeitigen Anfragen.

    Der Standardwert für aio-max-nr ist 65535, Sie können ihn auf 10485760 erhöhen.

Try Managed Milvus for Free

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

Get Started
Feedback

War diese Seite hilfreich?