1. index_file_size
In Best Practices for Milvus Configuration wurden einige Best Practices für die Konfiguration von Milvus 0.6.0 vorgestellt. In diesem Artikel werden wir auch einige Best Practices für die Einstellung von Schlüsselparametern in Milvus-Clients für Operationen wie das Erstellen einer Tabelle, das Erstellen von Indizes und die Suche vorstellen. Diese Parameter können die Suchleistung beeinflussen.
1. index_file_size
Beim Erstellen einer Tabelle wird der Parameter index_file_size verwendet, um die Größe einer einzelnen Datei für die Datenspeicherung in MB anzugeben. Der Standardwert ist 1024. Wenn Vektordaten importiert werden, kombiniert Milvus die Daten schrittweise in Dateien. Wenn die Dateigröße index_file_size erreicht, nimmt diese Datei keine neuen Daten mehr auf und Milvus speichert neue Daten in einer anderen Datei. Dies sind alles Rohdaten-Dateien. Wenn ein Index erstellt wird, erzeugt Milvus eine Indexdatei für jede Rohdatendatei. Für den IVFLAT-Indextyp entspricht die Größe der Indexdatei ungefähr der Größe der entsprechenden Rohdatendatei. Für den SQ8-Index beträgt die Größe einer Indexdatei etwa 30 Prozent der entsprechenden Rohdatendatei.
Bei einer Suche durchsucht Milvus jede Indexdatei einzeln. Nach unseren Erfahrungen verbessert sich die Suchleistung um 30 bis 50 Prozent, wenn index_file_size von 1024 auf 2048 geändert wird. Wenn der Wert jedoch zu groß ist, können große Dateien möglicherweise nicht in den GPU-Speicher (oder sogar in den CPU-Speicher) geladen werden. Wenn beispielsweise der GPU-Speicher 2 GB und index_file_size 3 GB beträgt, kann die Indexdatei nicht in den GPU-Speicher geladen werden. Normalerweise wird index_file_size auf 1024 MB oder 2048 MB festgelegt.
Die folgende Tabelle zeigt einen Test mit sift50m für index_file_size. Der Indextyp ist SQ8.
1-sift50m-test-ergebnisse-milvus.png
Es ist zu erkennen, dass sich die Suchleistung im CPU- und GPU-Modus deutlich verbessert, wenn index_file_size 2048 MB statt 1024 MB beträgt.
2. nlist
und nprobe
Der Parameter nlist
wird für die Indexerstellung und der Parameter nprobe
für die Suche verwendet. IVFLAT und SQ8 verwenden beide Clustering-Algorithmen, um eine große Anzahl von Vektoren in Cluster oder Buckets aufzuteilen. nlist
ist die Anzahl der Buckets beim Clustering.
Bei der Suche mit Indizes wird in einem ersten Schritt eine bestimmte Anzahl von Buckets gefunden, die dem Zielvektor am nächsten liegen, und in einem zweiten Schritt werden die ähnlichsten k Vektoren aus den Buckets anhand der Vektordistanz ermittelt. nprobe
ist die Anzahl der Buckets im ersten Schritt.
Im Allgemeinen führt eine Erhöhung von nlist
zu mehr Buckets und weniger Vektoren in einem Bucket während des Clusterns. Infolgedessen sinkt die Rechenlast und die Suchleistung verbessert sich. Da jedoch weniger Vektoren für den Ähnlichkeitsvergleich zur Verfügung stehen, kann das richtige Ergebnis verfehlt werden.
Die Erhöhung von nprobe
führt zu mehr zu durchsuchenden Buckets. Infolgedessen steigt die Rechenlast und die Suchleistung verschlechtert sich, aber die Suchgenauigkeit verbessert sich. Die Situation kann bei Datensätzen mit unterschiedlichen Verteilungen unterschiedlich sein. Bei der Einstellung von nlist
und nprobe
sollten Sie auch die Größe des Datensatzes berücksichtigen. Im Allgemeinen wird empfohlen, dass nlist
4 * sqrt(n)
sein kann, wobei n die Gesamtzahl der Vektoren ist. Wie bei nprobe
müssen Sie einen Kompromiss zwischen Präzision und Effizienz eingehen, und am besten ermitteln Sie den Wert durch Ausprobieren.
Die folgende Tabelle zeigt einen Test mit sift50m für nlist
und nprobe
. Der Index-Typ ist SQ8.
sq8-index-test-sift50m.png
Die Tabelle vergleicht die Suchleistung und die Genauigkeit mit verschiedenen Werten von nlist
/nprobe
. Es werden nur GPU-Ergebnisse angezeigt, da CPU- und GPU-Tests ähnliche Ergebnisse liefern. In diesem Test erhöht sich die Suchgenauigkeit, wenn die Werte von nlist
/nprobe
um denselben Prozentsatz steigen. Wenn nlist
= 4096 und nprobe
128 ist, hat Milvus die beste Suchleistung. Zusammenfassend lässt sich sagen, dass Sie bei der Bestimmung der Werte für nlist
und nprobe
einen Kompromiss zwischen Leistung und Genauigkeit unter Berücksichtigung der verschiedenen Datensätze und Anforderungen eingehen müssen.
Zusammenfassung
index_file_size
: Wenn die Datengröße größer ist als index_file_size
, ist die Suchleistung umso besser, je größer der Wert von index_file_size
ist.nlist
und nprobe
:Sie müssen einen Kompromiss zwischen Leistung und Genauigkeit eingehen.
- 2. nlist und nprobe
- Zusammenfassung
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word