자동 최적화 - Amazon OpenSearch Service

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

자동 최적화

자동 최적화는 벡터 인덱스 최적화를 자동화하여 사용자가 몇 주 동안의 수동 전문가 튜닝 없이도 검색 품질, 속도 및 비용의 균형을 맞출 수 있는 서비스입니다. 사용자 정의 지연 시간 및 리콜 요구 사항을 기반으로 인덱스 구성을 평가하고 최적화 권장 사항을 생성하므로 최소한의 전문 지식이 필요합니다. 권장 사항은 일반적으로 30~60분 이내에 전달됩니다.

기존 벡터 인덱스 구성에서는 최적의 성능을 달성하려면 상당한 전문 지식과 실험이 필요합니다. ef_construction (인덱스 빌드 품질을 제어), m (그래프 연결 수를 결정), ef_search (HNSW 검색을 제어) 및 양자화 방법(이진 양자화(32x, 16x, 8x), 스칼라 양자화(4x))과 같은 파라미터는 검색 정확도와 리소스 사용률 모두에 상당한 영향을 미칩니다. 자동 최적화는 하이퍼파라미터 최적화 알고리즘을 사용하여 정의된 지연 시간 및 재현율 요구 사항 내에서 데이터 세트에 고유하게 최적화된 인덱스 구성을 검색합니다.

이점

OpenSearch용 자동 최적화는 다음과 같은 이점을 제공합니다.

  • 자동 파라미터 튜닝 - 알고리즘(HNSW), 양자화, 재채점 및 엔진 파라미터를 사용한 수동 실험을 제거하여 시간을 절약하고 벡터 검색 최적화를 위한 학습 곡선을 줄입니다.

  • 검색 속도 최적화 - 기본적으로 OpenSearch는 인 메모리 성능에 맞게 구성됩니다. 자동 최적화는 허용 가능한 검색 속도를 유지하면서 검색 품질과 비용 절감을 개선하는 유리한 장단점을 발견합니다.

  • 비용 최적화 - 인덱스 메모리 요구 사항을 줄이는 동시에 검색 품질을 최소화하고 장단점을 가속화하는 옵션을 찾아 비용을 절감합니다.

  • 검색 품질 최적화 - 잠재적으로 기본 설정보다 높은 리콜을 제공하거나 리콜 손실을 최소화하면서 상당한 비용 절감을 제공하는 유리한 장단점을 발견합니다.

자동 최적화는와 같은 다른 OpenSearch 기능과 함께 작동벡터 인덱싱을 위한 GPU 가속화하여 벡터 검색 워크로드에 대한 포괄적인 성능 최적화를 제공합니다.

작동 방식

자동 최적화는 벡터 데이터를 분석하고 최적화 권장 사항을 제공하는 작업 기반 아키텍처를 통해 작동합니다. 중요 사항:

  • 사용자는 Amazon S3 버킷에서 데이터 세트를 parquet 형식의 OpenSearch JSON 문서로 공유합니다.

  • 허용 가능한 재현율 및 지연 시간 임계값을 구성하여 서버리스 자동 최적화 작업을 구성합니다. 완화된 임계값을 사용하면 서비스가 더 중요한 비용 최적화를 발견할 수 있습니다.

  • Amazon OpenSearch Service에서 완전히 관리하는 인프라에서 실행되는 작업을 자동 최적화합니다. 작업은 도메인 또는 컬렉션의 리소스를 사용하지 않습니다. 작업자는 병렬로 실행되어 인덱스 구성을 평가하고 대규모 데이터 세트에서 샘플링을 사용하여 일반적으로 30~60분 이내에 결과를 제공합니다.

  • 각 작업은 예측 가능한 고정 요금으로 청구됩니다. 요금 정보는 Amazon OpenSearch Service 요금을 참조하세요.

사전 조건

  • 데이터 세트 형식 및 권한 - Amazon S3 버킷 폴더에 세트(하나 또는 여러 개) parquet 파일로 사용할 수 있는 데이터 세트가 있어야 합니다. 예를 들어 데이터 세트가 s3://dataset-bucket-us-east-1/dataset_folder/first_half.parquet 및 라는 두 개의 파일로 분할된 경우 s3://dataset-bucket-us-east-1/dataset_folder/ 여기에 배치s3://dataset-bucket-us-east-1/dataset_folder/second_half.parquet해야 합니다. 이 데이터 세트는 권장 사항을 생성하는 데 사용됩니다. 페더레이션 역할에 해당 리소스에 대한 Amazon S3 권한이 있는지 확인합니다"s3:Get*", "s3:List*", "s3:Describe*".

  • 올바른 데이터 세트 메타데이터 지정 - 제공된 Parquet 데이터 세트에는 부동 소수점 값의 행이 포함되어야 합니다. 각 열의 이름과 각 벡터의 차원은 콘솔에 제공된 옵션과 일치해야 합니다. 예를 들어 데이터 세트에 각 768차원으로 이름이 지정된 벡터train_data가 포함된 경우 이러한 값은 자동 최적화 콘솔과 일치해야 합니다.

  • (벡터 수집 기능을 사용하는 경우) - 수집 기능을 활용하려는 경우(인덱스를 자동으로 생성하고 데이터를 수집하기 위해 자동 최적화 권장 사항 적용) Parquet 데이터 세트를 OpenSearch 클러스터로 수집할 수 있는 자동 최적화 권한을 부여하도록 OpenSearch 클러스터를 구성해야 합니다. 도메인 액세스 정책이 있는 OpenSearch 도메인의 경우 해당 정책을 통해 새로 생성된 역할에 액세스 권한을 부여합니다. 세분화된 액세스 제어가 있는 OpenSearch 도메인의 경우 파이프라인 역할을 백엔드 역할로 추가합니다. OpenSearch Serverless 컬렉션의 경우 데이터 액세스 정책에 파이프라인 역할을 추가합니다.

  • IAM 권한 - 자동 최적화를 사용하려면 다음 IAM 권한이 필요합니다.

    • opensearch:SubmitAutoOptimizeJob

    • opensearch:GetAutoOptimizeJob

    • opensearch:DeleteAutoOptimizeJob

    • opensearch:CancelAutoOptimizeJob

    • opensearch:ListAutoOptimizeJobs

    참고

    이는 자격 증명 기반 정책입니다. 자동 최적화는 리소스 기반 정책을 지원하지 않습니다.

  • 자격 증명 만료 - 최소 1시간의 자격 증명 만료를 갖도록 페더레이션 사용자 세션을 구성합니다. 매우 큰 데이터 세트 또는 높은 차원의 경우 만료 기간을 최대 3시간으로 늘리는 것이 좋습니다.

자동 최적화 사용 사례

자동 최적화는 다음 시나리오에서 특히 중요합니다.

초기 구성 최적화

벡터 검색 애플리케이션을 처음 배포할 때 최적의 HNSW 파라미터를 결정하려면 광범위한 테스트와 도메인 전문 지식이 필요한 경우가 많습니다. 자동 최적화를 사용하면 데이터 및 워크로드 특성을 분석하여 프로덕션 지원 구성을 권장하여이 trial-and-error 프로세스를 제거할 수 있습니다.

이 사용 사례는 벡터 검색을 처음 사용하는 팀이나 기준 구성을 빠르게 설정해야 하는 다른 벡터 데이터베이스 플랫폼에서 마이그레이션하는 팀에 적합합니다.

조정 최적화

벡터 데이터 세트가 수천 개에서 수백만 개의 벡터로 증가함에 따라 처음에 잘 작동하는 파라미터는 최적화되지 않을 수 있습니다. Auto-optimize는 대규모 성능 유지를 위한 조정을 권장합니다.

비용 절감

벡터 인덱스는 특히 고차원 임베딩을 통해 상당한 컴퓨팅 및 스토리지 리소스를 소비할 수 있습니다. 자동 최적화는 더 적은 리소스를 사용하면서 필요한 성능 수준을 유지하는 보다 효율적인 파라미터 구성을 찾아 비용을 절감할 수 있는 기회를 식별합니다.

예를 들어 자동 최적화는 현재 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)에서만 지원됩니다.

  • 엔진 지원

    배포 유형별 엔진 지원
    Engine 서버리스 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에서 도메인 또는 컬렉션으로 벡터 데이터를 빠르게 수집하고 인덱싱합니다.