Optimice automáticamente - OpenSearch Servicio Amazon

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Optimice automáticamente

La optimización automática es un servicio que automatiza las optimizaciones de los índices vectoriales, lo que permite a los usuarios equilibrar la calidad, la velocidad y el coste de la búsqueda sin necesidad de semanas de ajustes manuales por parte de un experto. Evalúa las configuraciones de los índices en función de los requisitos de latencia y recuperación definidos por el usuario y genera recomendaciones de optimización, por lo que se requiere una experiencia mínima. Por lo general, las recomendaciones se entregan en un plazo de 30 a 60 minutos.

La configuración tradicional de índices vectoriales requiere una gran experiencia y experimentación para lograr un rendimiento óptimo. Parámetros como ef_construction (que controla la calidad de creación del índice), m (que determina el número de conexiones gráficas), ef_search (que controla la búsqueda en HNSW) y los métodos de cuantificación (cuantificación binaria (32x, 16x, 8x) y cuantificación escalar (4x)) tienen un impacto significativo tanto en la precisión de la búsqueda como en la utilización de los recursos. La optimización automática utiliza algoritmos de optimización de hiperparámetros para descubrir las configuraciones de índice que son especialmente óptimas para su conjunto de datos, dentro de los requisitos de latencia y recuperación definidos.

Ventajas

La optimización automática para OpenSearch ofrece las siguientes ventajas:

  • Ajuste automático de parámetros: elimina la experimentación manual con los parámetros del algoritmo (HNSW), la cuantificación, la repuntuación y el motor, lo que ahorra tiempo y reduce la curva de aprendizaje para la optimización de la búsqueda vectorial.

  • Optimice la velocidad de búsqueda: de forma predeterminada, OpenSearch está configurado para funcionar en memoria. La optimización automática detecta ventajas y desventajas que mejoran la calidad de la búsqueda y ahorran costes, a la vez que mantienen una velocidad de búsqueda aceptable.

  • Optimización de costos: reduce los costos al encontrar opciones para reducir los requisitos de memoria de indexación y, al mismo tiempo, minimizar las compensaciones entre calidad y velocidad de búsqueda.

  • Optimice la calidad de las búsquedas: puede ofrecer una mayor capacidad de recuperación que la configuración predeterminada, o bien descubra ventajas que supongan un importante ahorro de costes con una pérdida mínima de recuperaciones.

La optimización automática funciona junto con otras OpenSearch funciones, como la optimización integral del rendimiento de Aceleración por GPU para la indexación vectorial las cargas de trabajo de búsqueda vectorial.

Funcionamiento

La optimización automática funciona mediante una arquitectura basada en tareas que analiza los datos vectoriales y proporciona recomendaciones de optimización. Puntos clave:

  • Los usuarios comparten sus conjuntos de datos como documentos OpenSearch JSON en formato parquet en un bucket de Amazon S3.

  • Configuran los trabajos de optimización automática sin servidor configurando sus umbrales aceptables de recuperación y latencia. Unos umbrales más relajados permiten al servicio descubrir optimizaciones de costes más significativas.

  • Optimice automáticamente los trabajos ejecutados en una infraestructura totalmente gestionada por Amazon OpenSearch Service. Los trabajos no consumen recursos de tu dominio ni de tus colecciones. Los trabajadores trabajan en paralelo para evaluar las configuraciones de los índices y utilizan el muestreo en conjuntos de datos de gran tamaño para obtener resultados, por lo general, en un plazo de 30 a 60 minutos.

  • Cada trabajo se factura con una tarifa fija predecible. Para obtener información sobre precios, consulta Amazon OpenSearch Service Pricing.

Requisitos previos

  • Formato y permisos del conjunto de datos: debe tener el conjunto de datos disponible como un conjunto (uno o varios) archivos de parquet en una carpeta de bucket de Amazon S3. Por ejemplo, si el conjunto de datos está dividido en dos archivos llamados s3://dataset-bucket-us-east-1/dataset_folder/first_half.parquet ys3://dataset-bucket-us-east-1/dataset_folder/second_half.parquet, entonces deberías colocarlos s3://dataset-bucket-us-east-1/dataset_folder/ aquí. Este conjunto de datos se utilizará para generar las recomendaciones. Asegúrese de que su función federada tenga los siguientes permisos de Amazon S3 en ese recurso:"s3:Get*", "s3:List*", "s3:Describe*".

  • Especifique los metadatos correctos del conjunto de datos: el conjunto de datos de parqué proporcionado debe contener filas de valores flotantes. El nombre de cada columna y la dimensionalidad de cada vector deben coincidir con las opciones proporcionadas en la consola. Por ejemplo, si el conjunto de datos contiene vectores train_data cuyo nombre corresponde a cada 768 dimensión, estos valores deben coincidir con la consola de optimización automática.

  • (Si utiliza la función de ingestión de vectores): si planea utilizar la función de ingestión (siguiendo las recomendaciones de optimización automática para crear datos de índice e ingestión automáticamente), debe configurar su OpenSearch clúster para conceder permiso de optimización automática a fin de incorporar su conjunto de datos de parquet en el clúster. OpenSearch En el caso de OpenSearch los dominios con una política de acceso a dominios, conceda acceso al rol recién creado mediante esa política. En el OpenSearch caso de los dominios con un control de acceso detallado, añada la función de canalización como función de back-end. En el caso de las colecciones OpenSearch sin servidor, añada la función de canalización a la política de acceso a los datos.

  • Permisos de IAM: necesita los siguientes permisos de IAM para utilizar la optimización automática:

    • opensearch:SubmitAutoOptimizeJob

    • opensearch:GetAutoOptimizeJob

    • opensearch:DeleteAutoOptimizeJob

    • opensearch:CancelAutoOptimizeJob

    • opensearch:ListAutoOptimizeJobs

    nota

    Se trata de políticas basadas en la identidad. La optimización automática no admite políticas basadas en recursos.

  • Caducidad de las credenciales: configure la sesión de usuario federado para que las credenciales tengan una caducidad mínima de al menos 1 hora. Para conjuntos de datos muy grandes o de grandes dimensiones, considere la posibilidad de aumentar la duración de caducidad hasta 3 horas.

Casos de uso para la optimización automática

La optimización automática es particularmente valiosa en los siguientes escenarios:

Optimización de la configuración inicial

Al implementar por primera vez aplicaciones de búsqueda vectorial, determinar los parámetros óptimos de HNSW a menudo requiere pruebas exhaustivas y experiencia en el campo. La optimización automática elimina este trial-and-error proceso al analizar las características de los datos y la carga de trabajo para recomendar configuraciones listas para la producción.

Este caso de uso es ideal para los equipos que se inician en la búsqueda vectorial o para aquellos que migran desde otras plataformas de bases de datos vectoriales y necesitan establecer rápidamente las configuraciones de referencia.

Optimización del escalado

A medida que el conjunto de datos vectoriales pase de miles a millones de vectores, es posible que los parámetros que funcionaron bien inicialmente no sean óptimos. La optimización automática recomienda ajustes para mantener el rendimiento a escala.

Reducción de costos

Los índices vectoriales pueden consumir importantes recursos de cómputo y almacenamiento, especialmente en el caso de incrustaciones de alta dimensión. La optimización automática identifica las oportunidades de reducir los costos mediante la búsqueda de configuraciones de parámetros más eficientes que mantienen los niveles de rendimiento requeridos y, al mismo tiempo, utilizan menos recursos.

Por ejemplo, la optimización automática podría descubrir que su m valor actual (conectividad de gráficos) es superior al necesario para sus requisitos de precisión, lo que le permitirá reducir el tiempo de indexación y el almacenamiento sin afectar a la calidad de la búsqueda.

Soluciones de problemas de rendimiento

Cuando el rendimiento de las consultas es lento o se produce una latencia alta en las operaciones de búsqueda vectorial, la optimización automática puede analizar el conjunto de datos e identificar una configuración más óptima. El servicio proporciona recomendaciones específicas para abordar los cuellos de botella en el rendimiento, como ajustar la conectividad de los gráficos o los parámetros de búsqueda.

Limitaciones

  • Disponibilidad regional: la optimización automática solo está disponible en las siguientes regiones: 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

  • Tipos de colecciones: la optimización automática solo se admite en las colecciones y OpenSearch dominios de búsqueda vectorial (2.19, 3.1 y 3.3).

  • Soporte de motor

    Soporte de motores por tipo de despliegue
    Motor Sin servidor OpenSearch Gestionado
    Lucene No
    Faiss
    Nmslib No No
  • Compatibilidad con algoritmos: la optimización automática solo admite índices vectoriales basados en HNSW.

  • Trabajos simultáneos: puede ejecutar hasta 10 trabajos de optimización simultáneos por cuenta y región. No se aceptarán nuevos trabajos si se alcanza el límite.

  • Duración del trabajo: los trabajos de optimización pueden tardar entre 15 minutos y varias horas, según el tamaño del conjunto de datos, las dimensiones y las métricas de rendimiento requeridas.

  • Recomendaciones: la optimización automática sugiere solo un máximo de 3 recomendaciones.

  • Conjunto de datos

    • Formatos compatibles: parquet

    • Almacén de datos: Amazon S3

Facturación y costos

La optimización automática utiliza un modelo de precios por trabajo en el que se paga por cada trabajo de optimización exitoso, independientemente del tamaño del conjunto de datos y de las configuraciones de optimización. No se le cobrará por los trabajos fallidos o cancelados. Además, la optimización automática se ejecuta en una infraestructura diferente a la de los OpenSearch clústeres administrados o sin servidor, por lo que no afecta a la utilización de los recursos de los clústeres preexistentes.

Modelo de precios

Los costes de optimización automática se facturan por separado de los costes de almacenamiento e informática estándar de dominios OpenSearch gestionados o OpenSearch sin servidor.

Para obtener información sobre precios, consulta Amazon OpenSearch Service Pricing.

Convierte JSONL a Parquet

Si sus datos están en formato JSONL, puede usar el siguiente script de Python para convertirlos al formato Parquet y usarlos con la optimización automática:

#!/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)

La optimización automática funciona junto con otras funciones de Amazon OpenSearch Service para ayudarte a crear y optimizar aplicaciones de búsqueda vectorial: