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 aufGPU_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 IndexGPU_CAGRAverfü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 denGPU_CAGRAIndex 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_cpuauftruegesetzt 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 |
|---|---|---|
|
Beeinflusst den Abruf und die Aufbauzeit, indem der Grad des Graphen vor dem Pruning bestimmt wird. Empfohlene Werte sind |
|
|
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 |
|
|
Wählt den Graphenerzeugungsalgorithmus vor dem Pruning. Mögliche Werte:
|
|
|
Legt fest, ob der Originaldatensatz im GPU-Speicher zwischengespeichert werden soll. Mögliche Werte:
|
|
|
Entscheidet, ob die GPU für die Indexerstellung und die CPU für die Suche verwendet werden soll. Die Einstellung dieses Parameters auf |
|
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 |
|---|---|---|
|
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 |
|
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 |
|
Steuert den Iterationsprozess der Suche. Standardmäßig sind sie auf |
|
|
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 |
|
|
Legt den Kompromiss zwischen Abfragezeit und -genauigkeit fest. Ein höherer Dieser Parameter ist obligatorisch, wenn Sie beim Erstellen des Index |
|