翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
自動最適化
Auto-optimize は、ベクトルインデックスの最適化を自動化するサービスです。ユーザーは、数週間にわたるエキスパートによる手動調整を必要とせずに、検索の品質、速度、コストのバランスをとることができます。ユーザー定義のレイテンシーとリコールの要件に基づいてインデックス設定を評価し、最適化の推奨事項を生成するため、最小限の専門知識が必要です。レコメンデーションは通常 30~60 分以内に配信されます。
従来のベクトルインデックス設定では、最適なパフォーマンスを実現するには、かなりの専門知識と実験が必要です。ef_construction (インデックス構築品質を制御する)、 m (グラフ接続の数を決定する)ef_search、 (HNSW 検索を制御する)、量子化メソッド (バイナリ量子化 (32x、16x、8x)、スカラー量子化 (4x)) などのパラメータは、検索精度とリソース使用率の両方に大きな影響を与えます。自動最適化は、ハイパーパラメータ最適化アルゴリズムを使用して、定義されたレイテンシーおよびリコール要件内でデータセットに一意に最適なインデックス設定を検出します。
利点
OpenSearch の自動最適化には、次の利点があります。
-
自動パラメータ調整 - アルゴリズム (HNSW)、量子化、再スコアリング、エンジンパラメータによる手動実験を排除し、時間を節約し、ベクトル検索の最適化のための学習曲線を減らします。
-
検索速度の最適化 - デフォルトでは、OpenSearch はインメモリパフォーマンス用に設定されています。自動最適化は、許容可能な検索速度を維持しながら、検索品質とコスト削減を改善する有利なトレードオフを検出します。
-
コスト最適化 - 検索の品質と速度のトレードオフを最小限に抑えながら、インデックスメモリ要件を減らすオプションを見つけることでコストを削減します。
-
検索品質の最適化 - デフォルト設定よりも高いリコールを実現したり、リコール損失を最小限に抑えながら大幅なコスト削減を実現する有利なトレードオフを発見したりできます。
自動最適化は、 などの他の OpenSearch 機能と連携してベクトルインデックス作成の GPU アクセラレーション、ベクトル検索ワークロードの包括的なパフォーマンス最適化を提供します。
仕組み
自動最適化は、ベクトルデータを分析し、最適化の推奨事項を提供するジョブベースのアーキテクチャを介して動作します。キーポイント:
-
ユーザーは、データセットを OpenSearch JSON ドキュメントとして Amazon S3 バケット内の parquet 形式で共有します。
-
許容できるリコールとレイテンシーのしきい値を設定することで、サーバーレスの自動最適化ジョブを設定します。しきい値を緩和することで、サービスがより重要なコスト最適化を検出できます。
-
自動最適化ジョブは、Amazon OpenSearch Service によってフルマネージドされたインフラストラクチャで実行されます。ジョブはドメインまたはコレクションのリソースを消費しません。ワーカーは並行して実行してインデックス設定を評価し、大規模なデータセットでサンプリングを使用して、通常 30~60 分以内に結果を提供します。
-
各ジョブは、予測可能な定額料金で請求されます。料金の詳細については、「Amazon OpenSearch Service の料金
」を参照してください。
前提条件
-
データセットの形式とアクセス許可 - Amazon S3 バケットフォルダには、データセットをセット (1 つまたは複数) の parquet ファイルとして使用できる必要があります。たとえば、データセットが
s3://dataset-bucket-us-east-1/dataset_folder/first_half.parquetと という 2 つのファイルに分割されている場合はs3://dataset-bucket-us-east-1/dataset_folder/second_half.parquet、s3://dataset-bucket-us-east-1/dataset_folder/ここに配置する必要があります。このデータセットは、レコメンデーションを生成するために使用されます。フェデレーティッドロールに、そのリソースに対する次の Amazon S3 アクセス許可があることを確認します:"s3:Get*", "s3:List*", "s3:Describe*"。 -
正しいデータセットメタデータを指定する - 提供された Parquet データセットには浮動小数点値の行が含まれている必要があります。各列の名前と各ベクトルの次元は、コンソールで提供されるオプションと一致する必要があります。たとえば、データセットに各
768ディメンションの名前がtrain_data付けられたベクトルが含まれている場合、これらの値は自動最適化コンソールと一致する必要があります。 -
(ベクトル取り込み機能を使用する場合) - 取り込み機能を利用する場合 (インデックスを自動的に作成してデータを取り込むために自動最適化レコメンデーションを実行する場合)、Parquet データセットを OpenSearch クラスターに取り込むための自動最適化アクセス許可を付与するように OpenSearch クラスターを設定する必要があります。ドメインアクセスポリシーを持つ OpenSearch ドメインの場合、そのポリシーを通じて新しく作成されたロールにアクセス権を付与します。きめ細かなアクセスコントロールを持つ OpenSearch ドメインの場合は、パイプラインロールをバックエンドロールとして追加します。OpenSearch Serverless コレクションの場合、パイプラインロールをデータアクセスポリシーに追加します。
-
IAM アクセス許可 - 自動最適化を使用するには、次の IAM アクセス許可が必要です。
opensearch:SubmitAutoOptimizeJobopensearch:GetAutoOptimizeJobopensearch:DeleteAutoOptimizeJobopensearch:CancelAutoOptimizeJobopensearch:ListAutoOptimizeJobs
注記
これらはアイデンティティベースのポリシーです。自動最適化はリソースベースのポリシーをサポートしていません。
-
認証情報の有効期限 - フェデレーティッドユーザーセッションの認証情報の有効期限が少なくとも 1 時間になるように設定します。非常に大きなデータセットや高次元の場合は、有効期限を最大 3 時間延長することを検討してください。
自動最適化のユースケース
自動最適化は、以下のシナリオで特に重要です。
初期設定の最適化
ベクトル検索アプリケーションを最初にデプロイする場合、最適な HNSW パラメータを決定するには、多くの場合、広範なテストとドメインの専門知識が必要です。自動最適化は、データとワークロードの特性を分析して本番環境に対応した設定を推奨することで、このtrial-and-errorプロセスを排除します。
このユースケースは、ベクトル検索を初めて行うチームや、ベースライン設定を迅速に確立する必要がある他のベクトルデータベースプラットフォームから移行するチームに最適です。
スケーリングの最適化
ベクトルデータセットが数千から数百万のベクトルに増加するにつれて、最初にうまく機能したパラメータは最適ではない可能性があります。自動最適化では、パフォーマンスを大規模に維持するための調整が推奨されます。
コスト削減
ベクトルインデックスは、特に高次元埋め込みでは、大量のコンピューティングリソースとストレージリソースを消費する可能性があります。自動最適化は、より少ないリソースを使用しながら必要なパフォーマンスレベルを維持する、より効率的なパラメータ設定を見つけることで、コストを削減する機会を特定します。
たとえば、自動最適化では、現在のm値 (グラフの接続性) が精度要件に必要な値よりも高いことが検出され、検索品質に影響を与えることなくインデックス作成時間とストレージを削減できます。
パフォーマンスのトラブルシューティング
ベクトル検索オペレーションでクエリパフォーマンスが遅い、またはレイテンシーが高い場合、自動最適化はデータセットを分析し、より最適な設定を特定できます。このサービスは、グラフ接続や検索パラメータの調整など、パフォーマンスのボトルネックに対処するための特定の推奨事項を提供します。
制限事項
-
リージョンの可用性 - 自動最適化は、次の 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
-
コレクションタイプ - 自動最適化は、ベクトル検索コレクションと OpenSearch ドメイン (2.19、3.1、3.3) でのみサポートされています。
-
エンジンのサポート
デプロイタイプ別のエンジンサポート エンジン サーバーレス OpenSearch マネージド Lucene 不可 はい 信条 はい はい Nmslib いいえ 不可 -
アルゴリズムのサポート - 自動最適化は、HNSW ベースのベクトルインデックスのみをサポートします。
-
同時ジョブ - リージョンごとにアカウントごとに最大 10 個の同時最適化ジョブを実行できます。制限に達した場合、新しいジョブを受け入れることはできません。
-
ジョブ期間 - 最適化ジョブは、データセットのサイズ、ディメンション、および必要なパフォーマンスメトリクスに応じて、15 分から数時間かかる場合があります。
-
推奨事項 - 自動最適化は、最大 3 つの推奨事項のみを提案します。
-
データセット
サポートされている形式: parquet
データストア: Amazon S3
請求とコスト
自動最適化は、データセットのサイズと最適化設定に関係なく、成功した最適化ジョブごとに料金を支払うジョブごとの料金モデルを使用します。失敗したジョブまたはキャンセルされたジョブに対しては課金されません。さらに、自動最適化はマネージド型またはサーバーレスの OpenSearch クラスターとは異なるインフラストラクチャで実行されるため、既存のクラスターのリソース使用率には影響しません。
料金モデル
自動最適化コストは、標準の OpenSearch Serverless または OpenSearch Managed ドメインのコンピューティングおよびストレージコストとは別に請求されます。
料金の詳細については、「Amazon OpenSearch Service の料金
JSONL を Parquet に変換する
データが JSONL 形式の場合、次の Python スクリプトを使用して 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}") def print_parquet_rows(parquet_path: str, limit: int = 5): """Print first N rows from the parquet file.""" table = pq.read_table(parquet_path) df = table.to_pandas() print(f"\n=== Showing first {min(limit, len(df))} rows from {parquet_path} ===") print(df.head(limit).to_string()) print("===========================================================\n") if __name__ == "__main__": INPUT_JSON = "movies_10k.json" OUTPUT_PARQUET = "movies.parquet" # Convert JSON → Parquet json_to_parquet(INPUT_JSON, OUTPUT_PARQUET) # Print some rows from Parquet print_parquet_rows(OUTPUT_PARQUET, limit=3)
関連機能
自動最適化は、他の Amazon OpenSearch Service 機能と連携して、ベクトル検索アプリケーションの構築と最適化に役立ちます。
-
ベクトルインデックス作成の GPU アクセラレーション - GPU アクセラレーションを使用してベクトルインデックスの構築を加速し、インデックス作成の時間とコストを削減します。
-
ベクトル取り込み - Amazon S3 からドメインまたはコレクションにベクトルデータをすばやく取り込み、インデックスを作成します。