View a markdown version of this page

Automatisch optimieren - OpenSearch Amazon-Dienst

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Automatisch optimieren

Auto-Optimize ist ein Service, der Vektorindex-Optimierungen automatisiert und es Benutzern ermöglicht, ein ausgewogenes Verhältnis zwischen Suchqualität, Geschwindigkeit und Kosten zu finden, ohne dass wochenlanges manuelles Tuning durch Experten erforderlich ist. Er bewertet Indexkonfigurationen auf der Grundlage benutzerdefinierter Latenz- und Abrufanforderungen und generiert Optimierungsempfehlungen, sodass nur minimales Fachwissen erforderlich ist. Empfehlungen werden in der Regel innerhalb von 30 bis 60 Minuten übermittelt.

Die herkömmliche Konfiguration von Vektorindexen erfordert umfangreiche Fachkenntnisse und Experimente, um eine optimale Leistung zu erzielen. Parameter wie ef_construction (steuert die Qualität der Indexerstellung), m (bestimmt die Anzahl der Graphverbindungen), ef_search (steuert die HNSW-Suche) und Quantisierungsmethoden (Binäre Quantisierung (32x, 16x, 8x), Skalare Quantisierung (4x)) wirken sich sowohl auf die Suchgenauigkeit als auch auf die Ressourcennutzung erheblich aus. Die automatische Optimierung verwendet Algorithmen zur Hyperparameter-Optimierung, um Indexkonfigurationen zu ermitteln, die für Ihren Datensatz innerhalb Ihrer definierten Latenz- und Abrufanforderungen einzigartig optimal sind.

Vorteile

Die automatische Optimierung für OpenSearch bietet die folgenden Vorteile:

  • Automatisierte Parameterabstimmung — Macht das manuelle Experimentieren mit Algorithmus- (HNSW), Quantisierung, Rescoring und Engine-Parametern überflüssig, spart Zeit und reduziert die Lernkurve für die Optimierung der Vektorsuche.

  • Suchgeschwindigkeit optimieren — OpenSearch Ist standardmäßig für In-Memory-Leistung konfiguriert. Durch die automatische Optimierung werden günstige Kompromisse erkannt, die die Suchqualität verbessern und Kosten sparen, während gleichzeitig eine akzeptable Suchgeschwindigkeit beibehalten wird.

  • Kostenoptimierung — Senkt die Kosten, indem Optionen gefunden werden, um den Speicherbedarf Ihres Indexes zu reduzieren und gleichzeitig Kompromisse bei Suchqualität und Geschwindigkeit zu minimieren.

  • Optimieren Sie die Suchqualität — Erzielen Sie potenziell einen höheren Erinnerungswert als mit den Standardeinstellungen oder finden Sie günstige Kompromisse, die zu erheblichen Kosteneinsparungen bei minimalem Abrufverlust führen.

Die automatische Optimierung funktioniert zusammen mit anderen OpenSearch Funktionen, z. B. GPU-Beschleunigung für die Vektorindizierung zur umfassenden Leistungsoptimierung für Workloads bei der Vektorsuche.

Funktionsweise

Die automatische Optimierung basiert auf einer auftragsbasierten Architektur, die Ihre Vektordaten analysiert und Optimierungsempfehlungen gibt. Die wichtigsten Punkte:

  • Benutzer teilen ihre Datensätze im Parquet- oder JSONL-Format in einem Amazon S3 S3-Bucket.

  • Sie konfigurieren serverlose Jobs zur automatischen Optimierung, indem sie ihre akzeptablen Rückruf- und Latenzschwellenwerte konfigurieren. Lockere Schwellenwerte ermöglichen es dem Service, signifikantere Kostenoptimierungen zu entdecken.

  • Automatische Optimierung von Jobs, die auf einer Infrastruktur ausgeführt werden, die vollständig von Amazon OpenSearch Service verwaltet wird. Jobs verbrauchen keine Ressourcen auf Ihrer Domain oder Ihren Sammlungen. Die Mitarbeiter arbeiten parallel, um Indexkonfigurationen auszuwerten, und verwenden Stichproben für große Datensätze, um Ergebnisse in der Regel innerhalb von 30 bis 60 Minuten zu liefern.

  • Jeder Auftrag wird nach einem vorhersehbaren Pauschalpreis abgerechnet. Preisinformationen finden Sie unter Amazon OpenSearch Service Pricing.

Voraussetzungen

  • Datensatzformat und Berechtigungen — Ihr Datensatz muss als eine oder mehrere Parquet- oder JSONL-Dateien in einem Amazon S3 S3-Bucket-Ordner verfügbar sein. Beispiel:

    • Parkett: und s3://dataset-bucket-us-east-1/dataset_folder/first_half.parquet s3://dataset-bucket-us-east-1/dataset_folder/second_half.parquet

    • JSONL: s3://dataset-bucket-us-east-1/dataset_folder/data.jsonl

    Geben Sie den umschließenden Ordner-URI an (z. B.). s3://dataset-bucket-us-east-1/dataset_folder/ Der Ordner muss Dateien eines einzigen Formats enthalten. Vermischen Sie keine Parquet- und JSONL-Dateien im selben Ordner. Dieser Datensatz wird zur Generierung der Empfehlungen verwendet. Stellen Sie sicher, dass Ihre Verbundrolle über die folgenden Amazon S3 S3-Berechtigungen für diese Ressource verfügt:"s3:Get*", "s3:List*", "s3:Describe*".

  • Geben Sie die richtigen Datensatz-Metadaten an — Der bereitgestellte Datensatz muss Zeilen mit Fließkommawerten enthalten. Der Name jeder Spalte und die Dimensionalität jedes Vektors müssen mit den in der Konsole bereitgestellten Optionen übereinstimmen. Wenn der Datensatz beispielsweise benannte Vektoren enthält, train_data die jeder 768 Dimension entsprechen, müssen diese Werte mit der Konsole für die automatische Optimierung übereinstimmen.

  • (Wenn Sie die Funktion zur Vektoraufnahme verwenden) — Wenn Sie die Aufnahmefunktion verwenden möchten (anhand von Empfehlungen zur automatischen Optimierung, um automatisch Index zu erstellen und Daten aufzunehmen), müssen Sie Ihren Cluster so konfigurieren, dass er die automatische Optimierungsberechtigung für die Aufnahme Ihres Datensatzes in den OpenSearch Cluster erteilt. OpenSearch Bei OpenSearch Domänen mit einer Domänenzugriffsrichtlinie gewähren Sie der neu erstellten Rolle Zugriff über diese Richtlinie. Fügen Sie für OpenSearch Domänen mit detaillierter Zugriffskontrolle die Pipeline-Rolle als Backend-Rolle hinzu. Fügen Sie für OpenSearch serverlose Sammlungen die Pipeline-Rolle zur Datenzugriffsrichtlinie hinzu.

  • IAM-Berechtigungen — Sie benötigen die folgenden IAM-Berechtigungen, um die automatische Optimierung verwenden zu können:

    • opensearch:SubmitAutoOptimizeJob

    • opensearch:GetAutoOptimizeJob

    • opensearch:DeleteAutoOptimizeJob

    • opensearch:CancelAutoOptimizeJob

    • opensearch:ListAutoOptimizeJobs

    Anmerkung

    Dies sind identitätsbasierte Richtlinien. Auto-Optimize unterstützt keine ressourcenbasierten Richtlinien.

  • Ablauf von Anmeldeinformationen — Konfigurieren Sie Ihre Verbundbenutzersitzung so, dass die Anmeldedaten mindestens 1 Stunde ablaufen. Bei sehr großen Datensätzen oder großen Datenmengen sollten Sie erwägen, die Ablaufdauer auf bis zu 3 Stunden zu erhöhen.

Anwendungsfälle für die automatische Optimierung

Die automatische Optimierung ist in den folgenden Szenarien besonders nützlich:

Optimierung der Erstkonfiguration

Bei der ersten Implementierung von Vektorsuchanwendungen erfordert die Bestimmung der optimalen HNSW-Parameter häufig umfangreiche Tests und Fachwissen. Durch die automatische Optimierung entfällt dieser trial-and-error Prozess, da Ihre Daten und Workload-Merkmale analysiert werden, um produktionsreife Konfigurationen zu empfehlen.

Dieser Anwendungsfall ist ideal für Teams, die mit der Vektorsuche noch nicht vertraut sind, oder für Teams, die von anderen Vektordatenbankplattformen migrieren und schnell Basiskonfigurationen einrichten müssen.

Skalierung und Optimierung

Wenn Ihr Vektordatensatz von Tausenden auf Millionen von Vektoren anwächst, können Parameter, die anfangs gut funktionierten, suboptimal werden. Die automatische Optimierung empfiehlt Anpassungen, um die Leistung im großen Maßstab aufrechtzuerhalten.

Senkung der Kosten

Vektorindizes können erhebliche Rechen- und Speicherressourcen beanspruchen, insbesondere bei hochdimensionalen Einbettungen. Die automatische Optimierung identifiziert Möglichkeiten zur Kostensenkung, indem effizientere Parameterkonfigurationen gefunden werden, die das erforderliche Leistungsniveau beibehalten und gleichzeitig weniger Ressourcen verbrauchen.

Bei der automatischen Optimierung könnte beispielsweise festgestellt werden, dass Ihr aktueller m Wert (Grafikverbundenheit) höher ist als für Ihre Genauigkeitsanforderungen erforderlich, sodass Sie die Indizierungszeit und den Speicherplatz reduzieren können, ohne die Suchqualität zu beeinträchtigen.

Fehlerbehebung bei der Leistung

Wenn bei Vektorsuchoperationen eine langsame Abfrageleistung oder eine hohe Latenz auftreten, kann die automatische Optimierung Ihren Datensatz analysieren und eine optimalere Konfiguration ermitteln. Der Service bietet spezifische Empfehlungen zur Behebung von Leistungsengpässen, z. B. zur Anpassung der Grafikkonnektivität oder der Suchparameter.

Einschränkungen

  • Regionale Verfügbarkeit — Die automatische Optimierung ist nur in den folgenden Regionen verfügbar: AWS

    • ap-south-1

    • eu-west-1

    • us-west-2

    • us-east-2

    • us-east-1

    • eu-central-1

    • ap-southeast-2

    • ap-northeast-1

    • ap-southeast-1

  • Sammlungstypen — Die automatische Optimierung wird nur für Sammlungen und OpenSearch Domains mit Vektorsuche (2.19, 3.1 und 3.3) unterstützt.

  • Engine-Unterstützung

    Motorunterstützung nach Einsatzart
    Engine Serverless OpenSearch Verwaltet
    Lucene Nein Ja
    Faiß Ja Ja
    Nmslib Nein Nein
  • Unterstützung von Algorithmen — Auto-Optimize unterstützt nur HNSW-basierte Vektorindizes.

  • Gleichzeitige Jobs — Sie können bis zu 10 gleichzeitige Optimierungsjobs pro Konto und Region ausführen. Wenn das Limit erreicht ist, können keine neuen Jobs akzeptiert werden.

  • Auftragsdauer — Optimierungsaufträge können je nach Datensatzgröße, Dimension und erforderlichen Leistungskennzahlen zwischen 15 Minuten und mehreren Stunden dauern.

  • Empfehlungen — Die automatische Optimierung schlägt nur bis zu 3 Empfehlungen vor.

  • Datensatz

    • Unterstützte Formate: Parquet, JSONL

    • Datenspeicher: Amazon S3

Fakturierung und Kosten

Auto-Optimize verwendet ein Preismodell pro Auftrag, bei dem Sie für jeden erfolgreichen Optimierungsjob zahlen, unabhängig von der Datensatzgröße und den Optimierungskonfigurationen. Fehlgeschlagene oder stornierte Jobs werden Ihnen nicht in Rechnung gestellt. Darüber hinaus wird die automatische Optimierung auf einer anderen Infrastruktur als auf verwalteten oder serverlosen OpenSearch Clustern ausgeführt, sodass die Ressourcennutzung bereits vorhandener Cluster nicht beeinträchtigt wird.

Preismodell

Die Kosten für die automatische Optimierung werden getrennt von den standardmäßigen Rechen- und Speicherkosten für OpenSearch serverlose oder OpenSearch verwaltete Domänen in Rechnung gestellt.

Preisinformationen finden Sie unter Amazon OpenSearch Service Pricing.

Unterstützte Datumsformate

Auto-Optimize unterstützt die folgenden Datenformate für in Amazon S3 gespeicherte Vektordatensätze:

Parkett-Format

Parquet ist ein spaltenförmiges Speicherformat, das für analytische Workloads optimiert ist. Jede Parquet-Datei sollte eine Spalte mit Float-Arrays enthalten, die Ihre Vektordaten darstellen.

Beispiel für eine Parquet-Dateistruktur (als Tabelle betrachtet):

| id | train_data | |-----|--------------------------------| | 1 | [0.12, 0.45, 0.78, ..., 0.33] | | 2 | [0.56, 0.89, 0.12, ..., 0.67] | | 3 | [0.34, 0.67, 0.90, ..., 0.11] |

JSONL-Format

JSONL (JSON Lines) ist ein Textformat, bei dem jede Zeile ein gültiges JSON-Objekt ist. Jede Zeile sollte ein Feld mit einem Float-Array enthalten, das Ihre Vektordaten darstellt.

Beispiel für eine JSONL-Datei:

{"id": 1, "train_data": [0.12, 0.45, 0.78, 0.33]} {"id": 2, "train_data": [0.56, 0.89, 0.12, 0.67]} {"id": 3, "train_data": [0.34, 0.67, 0.90, 0.11]}

Konvertierung zwischen Formaten

Wenn Ihre Daten in einem anderen Format vorliegen, können Sie sie mit den folgenden Python-Skripten konvertieren.

Konvertieren Sie JSON oder JSONL nach Parquet

#!/usr/bin/env python3 import json import pyarrow as pa import pyarrow.parquet as pq from pathlib import Path from typing import Any, Dict, List def load_json_any(path: Path) -> List[Dict[str, Any]]: """ Load JSON that can be: - a list of objects - a single object - JSON Lines (one object per line) Returns list[dict]. """ text = path.read_text().strip() # Try full JSON file try: obj = json.loads(text) if isinstance(obj, list): return obj if isinstance(obj, dict): return [obj] except json.JSONDecodeError: pass # Fallback → JSON Lines records = [] for i, line in enumerate(text.splitlines(), start=1): line = line.strip() if not line: continue try: rec = json.loads(line) except json.JSONDecodeError as e: raise ValueError(f"Invalid JSON on line {i}: {e}") if not isinstance(rec, dict): raise ValueError(f"Line {i} must contain a JSON object") records.append(rec) return records def json_to_parquet(json_path: str, parquet_path: str, compression: str = "snappy"): """Convert ANY JSON to Parquet (schema inferred).""" records = load_json_any(Path(json_path)) table = pa.Table.from_pylist(records) pq.write_table(table, parquet_path, compression=compression) print(f"Wrote {len(records)} rows to {parquet_path}") if __name__ == "__main__": INPUT_JSON = "vectors.jsonl" OUTPUT_PARQUET = "vectors.parquet" json_to_parquet(INPUT_JSON, OUTPUT_PARQUET)
Konvertiere Parquet in JSONL

#!/usr/bin/env python3 import json import pyarrow.parquet as pq def parquet_to_jsonl(parquet_path: str, jsonl_path: str): """Convert a Parquet file to JSONL format.""" table = pq.read_table(parquet_path) rows = table.to_pylist() with open(jsonl_path, "w") as f: for row in rows: f.write(json.dumps(row) + "\n") print(f"Wrote {len(rows)} rows to {jsonl_path}") if __name__ == "__main__": INPUT_PARQUET = "vectors.parquet" OUTPUT_JSONL = "vectors.jsonl" parquet_to_jsonl(INPUT_PARQUET, OUTPUT_JSONL)

Die automatische Optimierung arbeitet mit anderen Funktionen von Amazon OpenSearch Service zusammen, um Sie bei der Erstellung und Optimierung von Vektorsuchanwendungen zu unterstützen: