On-Disk-Index
In diesem Artikel wird ein Algorithmus zur Indexierung auf der Festplatte namens DiskANN vorgestellt. DiskANN basiert auf Vamana-Graphen und ermöglicht eine effiziente Suche in großen Datenbeständen.
Um die Abfrageleistung zu verbessern, können Sie für jedes Vektorfeld einen Indextyp angeben.
Voraussetzungen
Um DiskANN zu verwenden, beachten Sie, dass
- DiskANN standardmäßig deaktiviert ist. Wenn Sie einen In-Memory-Index einem On-Disk-Index vorziehen, sollten Sie diese Funktion deaktivieren, um eine bessere Leistung zu erzielen.
- Um sie zu deaktivieren, können Sie in Ihrer milvus-Konfigurationsdatei
queryNode.enableDisk
infalse
ändern. - Um sie wieder zu aktivieren, können Sie
queryNode.enableDisk
auftrue
setzen.
- Um sie zu deaktivieren, können Sie in Ihrer milvus-Konfigurationsdatei
- 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:
- Bei einer Milvus-Einzelinstanz 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 ausgeführt werden.
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
Parameter Beschreibung Bereich Standardwert search_list
Größe der Kandidatenliste, eine größere Größe bietet eine höhere Auffindungsrate bei verminderter Leistung. [topk, int32_max] 16
DiskANN-bezogene Milvus-Konfigurationen
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
PQCodeBugetGBRatio: 0.125
SearchCacheBudgetGBRatio: 0.125
BeamWidthRatio: 4.0
...
Parameter | Beschreibung | Wertebereich | Standardwert |
---|---|---|---|
MaxDegree | Maximaler Grad des Vamana-Graphen. Ein größerer Wert bietet eine höhere Auffindungsrate, erhöht aber die Größe des Index und die Zeit für den Aufbau des Index. | [1, 512] | 56 |
SearchListSize | Größ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 |
PQCodeBugetGBRatio | Größ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 |
SearchCacheBudgetGBRatio | Verhältnis von zwischengespeicherten Knotennummern zu Rohdaten. Ein größerer Wert verbessert die Indexerstellungsleistung bei erhöhtem Speicherbedarf. | [0.0, 0.3) | 0.10 |
BeamWidthRatio | Verhä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 Parameteraio-max-nr
bestimmt die maximale Anzahl der zulässigen gleichzeitigen Anfragen.Der Standardwert für
aio-max-nr
ist65535
, Sie können ihn auf10485760
erhöhen.