

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.

# Uso de una canalización OpenSearch de ingestión con aprendizaje automático e inferencia por lotes fuera de línea
<a name="configure-clients-ml-commons-batch"></a>

Las canalizaciones de OpenSearch Amazon Ingestion (OSI) admiten el procesamiento de inferencias por lotes fuera de línea con aprendizaje automático (ML) para enriquecer de manera eficiente grandes volúmenes de datos a bajo costo. Utilice la inferencia en lotes sin conexión siempre que tenga conjuntos de datos grandes que puedan procesarse de forma asíncrona. La inferencia de lotes sin conexión funciona con Amazon Bedrock y SageMaker sus modelos. Esta función está disponible en todos los dominios Regiones de AWS compatibles con OpenSearch Ingestion with OpenSearch Service 2.17 o más.

**nota**  
Para el procesamiento de inferencias en tiempo real, utilice [Conectores Amazon OpenSearch Service ML para plataformas de terceros](ml-external-connector.md).

El procesamiento de inferencias por lotes fuera de línea aprovecha una función llamada ML Commons. OpenSearch *ML Commons* proporciona algoritmos de ML mediante llamadas a la API de REST y de transporte. Esas llamadas eligen los nodos y los recursos correctos para cada solicitud de ML y supervisan las tareas de ML para garantizar el tiempo de actividad. De esta manera, ML Commons le permite aprovechar los algoritmos de ML de código abierto existentes y reducir el esfuerzo necesario para desarrollar nuevas características de ML. Para obtener más información sobre ML Commons, consulte [Aprendizaje automático](https://docs.opensearch.org/latest/ml-commons-plugin/) en la documentación de OpenSearch .org. 

## Funcionamiento
<a name="configure-clients-ml-commons-batch-how"></a>

Puede crear una canalización de inferencias por lotes sin conexión en OpenSearch Ingestion [añadiendo un procesador de inferencias de aprendizaje automático](https://docs.opensearch.org/latest/ingest-pipelines/processors/ml-inference/) a una canalización. Este procesador permite que tu canalización se conecte a servicios de IA, por ejemplo, SageMaker para ejecutar trabajos de inferencia por lotes. Puede configurar su procesador para que se conecte al servicio de IA que desee a través de los conectores de IA (compatibles con [batch\_predict](https://docs.opensearch.org/latest/ml-commons-plugin/api/model-apis/batch-predict/)) que se ejecutan en su dominio de destino.

OpenSearch Ingestion utiliza el `ml_inference` procesador con ML Commons para crear trabajos de inferencia por lotes sin conexión a Internet. A continuación, ML Commons utiliza la API [batch\_predict](https://docs.opensearch.org/latest/ml-commons-plugin/api/model-apis/batch-predict/), que realiza inferencias sobre conjuntos de datos de gran tamaño en un modo asíncrono sin conexión mediante un modelo implementado en servidores de modelos externos en Amazon Bedrock, Amazon, Cohere y OpenAI. SageMaker El siguiente diagrama muestra una canalización de OpenSearch ingestión que organiza varios componentes para llevar a cabo este proceso de principio a fin:

![Arquitectura de tres canales de procesamiento de inferencias mediante IA por lotes.](http://docs.aws.amazon.com/es_es/opensearch-service/latest/developerguide/images/ml_processor.png)


Los componentes de la canalización funcionan de la siguiente manera:

**Canalización 1 (Preparación y transformación de datos)\*:**
+ Fuente: los datos se escanean desde una fuente externa compatible con Ingestion. OpenSearch 
+ Procesadores de datos: los datos sin procesar se procesan y transforman al formato correcto para su inferencia en lotes en el servicio de IA integrado.
+ S3 (receptor): los datos procesados se almacenan en un bucket de Amazon S3 y están listos para servir como entrada para ejecutar tareas de inferencia en lotes en el servicio de IA integrado. 

**Canalización 2 (Activar batch\_inference de ML):**
+ Origen: detección automática de eventos de S3 de nuevos archivos creados por la salida de la Canalización 1.
+ Procesador ml\_inference: procesador que genera inferencias de ML mediante una tarea en lotes asíncrona. Se conecta a los servicios de IA a través del conector de IA configurado que se ejecuta en el dominio de destino.
+ ID de tarea: cada tarea en lotes está asociada a un ID de tarea en ml-commons para su seguimiento y administración.
+ OpenSearch ML Commons: ML Commons, que aloja el modelo de búsqueda neuronal en tiempo real, gestiona los conectores a los servidores remotos de IA y sirve APIs para la inferencia de lotes y la gestión de trabajos.
+ Servicios de IA: OpenSearch ML Commons interactúa con servicios de IA como Amazon Bedrock y Amazon SageMaker para realizar inferencias por lotes de los datos, produciendo predicciones o información. Los resultados se guardan de forma asíncrona en un archivo S3 independiente.

**Canalización 3 (Ingesta masiva):**
+ S3 (origen): los resultados de las tareas en lotes se almacenan en S3, que es el origen de esta canalización.
+ Procesadores de transformación de datos: el procesamiento y la transformación adicionales se aplican al resultado de la inferencia en lotes antes de la ingesta. Esto garantiza que los datos estén mapeados correctamente en el índice. OpenSearch 
+ OpenSearch índice (sumidero): los resultados procesados se indexan OpenSearch para almacenarlos, buscarlos y analizarlos más a fondo.

**nota**  
\* El proceso descrito en Canalización 1 es opcional. Si lo prefiere, puede omitir ese proceso y solo cargar los datos preparados en el receptor de S3 para crear tareas en lotes.

## Acerca del procesador ml\_inference
<a name="configure-clients-ml-commons-batch-inference-processor"></a>

OpenSearch Ingestion utiliza una integración especializada entre la fuente de S3 Scan y el procesador de inferencias ML para el procesamiento por lotes. El S3 Scan funciona solo en modo de metadatos para recopilar de manera eficiente la información de los archivos S3 sin leer el contenido real del archivo. El `ml_inference` procesador utiliza el archivo S3 URLs para coordinarse con ML Commons para el procesamiento por lotes. Este diseño optimiza el flujo de trabajo de inferencia en lotes al minimizar la transferencia de datos innecesaria durante la fase de digitalización. El procesador `ml_inference` se define mediante parámetros. A continuación se muestra un ejemplo: 

```
processor:
    - ml_inference:
        # The endpoint URL of your OpenSearch domain
        host: "{{https://AWS test-offlinebatch-123456789abcdefg.us-west-2.es.amazonaws.com}}"
        
        # Type of inference operation:
        # - batch_predict: for batch processing
        # - predict: for real-time inference
        action_type: "batch_predict"
        
        # Remote ML model service provider (Amazon Bedrock or SageMaker)
        service_name: "bedrock"
        
        # Unique identifier for the ML model
        model_id: "{{AWS TestModelID123456789abcde}}"
        
        # S3 path where batch inference results will be stored
        output_path: "s3://{{amzn-s3-demo-bucket}}/"
      
        # Supports ISO_8601 notation strings like PT20.345S or PT15M
        # These settings control how long to keep your inputs in the processor for retry on throttling errors
        retry_time_window: "PT9M"
        
        # AWS configuration settings
        aws:
            # Región de AWS where the Lambda function is deployed
            region: "{{us-west-2}}"
            # IAM role ARN for Lambda function execution
            sts_role_arn: "arn:aws::iam::{{account_id}}:role/Admin"
        
        # Dead-letter queue settings for storing errors
        dlq:
          s3:
            region: us-west-2
            bucket: batch-inference-dlq
            key_path_prefix: bedrock-dlq
            sts_role_arn: arn:aws:iam::{{account_id}}:role/{{OSI-invoke-ml}}
            
        # Conditional expression that determines when to trigger the processor
        # In this case, only process when bucket matches "amzn-s3-demo-bucket"
        ml_when: /bucket == "{{amzn-s3-demo-bucket}}"
```

### Mejoras en el rendimiento de la ingesta mediante el procesador ml\_inference
<a name="configure-clients-ml-commons-batch-ingestion-performance"></a>

El `ml_inference` procesador OpenSearch de ingestión mejora considerablemente el rendimiento de la ingesta de datos para las búsquedas habilitadas para ML. El procesador es ideal para casos de uso que requieren datos generados por modelos de machine learning, como la búsqueda semántica, la búsqueda multimodal, el enriquecimiento de documentos y la comprensión de consultas. En la búsqueda semántica, el procesador puede acelerar la creación e ingesta de vectores de gran volumen y alta dimensión en un orden de magnitud.

La capacidad de inferencia en lotes sin conexión del procesador ofrece claras ventajas en comparación con la invocación de modelos en tiempo real. Si bien el procesamiento en tiempo real requiere un servidor modelo en vivo con limitaciones de capacidad, la inferencia en lotes escala de forma dinámica los recursos de cómputo bajo demanda y procesa los datos en paralelo. Por ejemplo, cuando la canalización de OpenSearch ingestión recibe mil millones de solicitudes de datos de origen, crea 100 archivos S3 para la entrada de inferencias por lotes de aprendizaje automático. A continuación, el `ml_inference` procesador inicia un trabajo SageMaker por lotes con 100 instancias de `ml.m4.xlarge` Amazon Elastic Compute Cloud (Amazon EC2) y completa la vectorización de mil millones de solicitudes en 14 horas, una tarea que sería prácticamente imposible de realizar en tiempo real.

## Configurar el procesador ml\_inference de modo que ingiera las solicitudes de datos para una búsqueda semántica
<a name="configure-clients-ml-commons-configuring"></a>

Los siguientes procedimientos explican el proceso de instalación y configuración del `ml_inference` procesador de OpenSearch ingestión para procesar mil millones de solicitudes de datos con fines de búsqueda semántica mediante un modelo de incrustación de texto.

**Topics**
+ [Paso 1: Cree conectores y registre modelos en OpenSearch](#configure-clients-ml-commons-configuring-create-connectors)
+ [Paso 2: Cree una canalización de OpenSearch ingestión para la inferencia de lotes fuera de línea de ML](#configure-clients-ml-commons-configuring-pipeline)
+ [Paso 3: preparar los datos para la ingesta](#configure-clients-ml-commons-configuring-data)
+ [Paso 4: Supervisar la tarea de inferencia en lotes](#configure-clients-ml-commons-configuring-monitor)
+ [Paso 5: ejecute la búsqueda](#configure-clients-ml-commons-configuring-semantic-search)

### Paso 1: Cree conectores y registre modelos en OpenSearch
<a name="configure-clients-ml-commons-configuring-create-connectors"></a>

Para el siguiente procedimiento, utilice el [batch\_inference\_sagemaker\_connector\_blueprint de ML Commons para crear](https://github.com/opensearch-project/ml-commons/blob/main/docs/remote_inference_blueprints/batch_inference_sagemaker_connector_blueprint.md) un conector y un modelo en Amazon. SageMaker Si prefiere usar plantillas de integración, consulte más adelante en esta sección. OpenSearch CloudFormation [(Procedimiento alternativo) Paso 1: Cree conectores y modelos mediante una plantilla de CloudFormation integración](#configure-clients-ml-commons-configuring-create-connectors-alternative) 

**Para crear conectores y registrar modelos en OpenSearch**

1. Cree un modelo ML de Deep Java Library (DJL) SageMaker para la transformación por lotes. Para ver otros modelos de DJL, consulte [Semantic\_Search\_With\_CFN\_Template\_for\_SageMaker](https://github.com/opensearch-project/ml-commons/blob/main/docs/tutorials/aws/semantic_search_with_CFN_template_for_Sagemaker.md) en: GitHub

   ```
   POST https://api.sagemaker.us-east-1.amazonaws.com/CreateModel
   {
      "ExecutionRoleArn": "arn:aws:iam::123456789012:role/aos_ml_invoke_sagemaker",
      "ModelName": "DJL-Text-Embedding-Model-imageforjsonlines",
      "PrimaryContainer": { 
         "Environment": { 
            "SERVING_LOAD_MODELS" : "djl://ai.djl.huggingface.pytorch/sentence-transformers/all-MiniLM-L6-v2" 
         },
         "Image": "763104351884.dkr.ecr.us-east-1.amazonaws.com/djl-inference:0.29.0-cpu-full"
      }
   }
   ```

1. Cree un conector con `batch_predict` como el nuevo tipo `action` en el campo `actions`:

   ```
   POST /_plugins/_ml/connectors/_create
   {
     "name": "DJL Sagemaker Connector: all-MiniLM-L6-v2",
     "version": "1",
     "description": "The connector to sagemaker embedding model all-MiniLM-L6-v2",
     "protocol": "aws_sigv4",
     "credential": {
     "roleArn": "arn:aws:iam::111122223333:role/SageMakerRole"
   },
     "parameters": {
       "region": "us-east-1",
       "service_name": "sagemaker",
       "DataProcessing": {
         "InputFilter": "$.text",
         "JoinSource": "Input",
         "OutputFilter": "$"
       },
       "MaxConcurrentTransforms": 100,
       "ModelName": "DJL-Text-Embedding-Model-imageforjsonlines",
       "TransformInput": {
         "ContentType": "application/json",
         "DataSource": {
           "S3DataSource": {
             "S3DataType": "S3Prefix",
             "S3Uri": "s3://offlinebatch/msmarcotests/"
           }
         },
         "SplitType": "Line"
       },
       "TransformJobName": "djl-batch-transform-1-billion",
       "TransformOutput": {
         "AssembleWith": "Line",
         "Accept": "application/json",
         "S3OutputPath": "s3://offlinebatch/msmarcotestsoutputs/"
       },
       "TransformResources": {
         "InstanceCount": 100,
         "InstanceType": "ml.m4.xlarge"
       },
       "BatchStrategy": "SingleRecord"
     },
     "actions": [
       {
         "action_type": "predict",
         "method": "POST",
         "headers": {
           "content-type": "application/json"
         },
         "url": "https://runtime.sagemaker.us-east-1.amazonaws.com/endpoints/OpenSearch-sagemaker-060124023703/invocations",
         "request_body": "${parameters.input}",
         "pre_process_function": "connector.pre_process.default.embedding",
         "post_process_function": "connector.post_process.default.embedding"
       },
       {
         "action_type": "batch_predict",
         "method": "POST",
         "headers": {
           "content-type": "application/json"
         },
         "url": "https://api.sagemaker.us-east-1.amazonaws.com/CreateTransformJob",
         "request_body": """{ "BatchStrategy": "${parameters.BatchStrategy}", "ModelName": "${parameters.ModelName}", "DataProcessing" : ${parameters.DataProcessing}, "MaxConcurrentTransforms": ${parameters.MaxConcurrentTransforms}, "TransformInput": ${parameters.TransformInput}, "TransformJobName" : "${parameters.TransformJobName}", "TransformOutput" : ${parameters.TransformOutput}, "TransformResources" : ${parameters.TransformResources}}"""
       },
       {
         "action_type": "batch_predict_status",
         "method": "GET",
         "headers": {
           "content-type": "application/json"
         },
         "url": "https://api.sagemaker.us-east-1.amazonaws.com/DescribeTransformJob",
         "request_body": """{ "TransformJobName" : "${parameters.TransformJobName}"}"""
       },
       {
         "action_type": "cancel_batch_predict",
         "method": "POST",
         "headers": {
           "content-type": "application/json"
         },
         "url": "https://api.sagemaker.us-east-1.amazonaws.com/StopTransformJob",
         "request_body": """{ "TransformJobName" : "${parameters.TransformJobName}"}"""
       }
     ]
   }
   ```

1. Utilice el ID de conector devuelto para registrar el modelo: SageMaker 

   ```
   POST /_plugins/_ml/models/_register
   {
       "name": "SageMaker model for batch",
       "function_name": "remote",
       "description": "test model",
       "connector_id": "example123456789-abcde"
   }
   ```

1. Invoque el modelo con el tipo de acción `batch_predict`:

   ```
   POST /_plugins/_ml/models/teHr3JABBiEvs-eod7sn/_batch_predict
   {
     "parameters": {
       "TransformJobName": "SM-offline-batch-transform"
     }
   }
   ```

   La respuesta contiene un identificador de tarea para la tarea en lotes:

   ```
   {
    "task_id": "exampleIDabdcefd_1234567",
    "status": "CREATED"
   }
   ```

1. Compruebe el estado de la tarea en lotes llamando a la API Get Task con el ID de tarea:

   ```
   GET /_plugins/_ml/tasks/exampleIDabdcefd_1234567
   ```

   La respuesta contiene el estado de la tarea:

   ```
   {
     "model_id": "nyWbv5EB_tT1A82ZCu-e",
     "task_type": "BATCH_PREDICTION",
     "function_name": "REMOTE",
     "state": "RUNNING",
     "input_type": "REMOTE",
     "worker_node": [
       "WDZnIMcbTrGtnR4Lq9jPDw"
     ],
     "create_time": 1725496527958,
     "last_update_time": 1725496527958,
     "is_async": false,
     "remote_job": {
       "TransformResources": {
         "InstanceCount": 1,
         "InstanceType": "ml.c5.xlarge"
       },
       "ModelName": "DJL-Text-Embedding-Model-imageforjsonlines",
       "TransformOutput": {
         "Accept": "application/json",
         "AssembleWith": "Line",
         "KmsKeyId": "",
         "S3OutputPath": "s3://offlinebatch/output"
       },
       "CreationTime": 1725496531.935,
       "TransformInput": {
         "CompressionType": "None",
         "ContentType": "application/json",
         "DataSource": {
           "S3DataSource": {
             "S3DataType": "S3Prefix",
             "S3Uri": "s3://offlinebatch/sagemaker_djl_batch_input.json"
           }
         },
         "SplitType": "Line"
       },
       "TransformJobArn": "arn:aws:sagemaker:us-east-1:111122223333:transform-job/SM-offline-batch-transform15",
       "TransformJobStatus": "InProgress",
       "BatchStrategy": "SingleRecord",
       "TransformJobName": "SM-offline-batch-transform15",
       "DataProcessing": {
         "InputFilter": "$.content",
         "JoinSource": "Input",
         "OutputFilter": "$"
       }
     }
   }
   ```

#### (Procedimiento alternativo) Paso 1: Cree conectores y modelos mediante una plantilla de CloudFormation integración
<a name="configure-clients-ml-commons-configuring-create-connectors-alternative"></a>

Si lo prefiere, puede utilizarlos AWS CloudFormation para crear automáticamente todos los SageMaker conectores y modelos de Amazon necesarios para la inferencia de aprendizaje automático. Este enfoque simplifica la configuración mediante el uso de una plantilla preconfigurada disponible en la consola de Amazon OpenSearch Service. Para obtener más información, consulte [Se utiliza CloudFormation para configurar la inferencia remota para la búsqueda semántica](cfn-template.md).

**Para implementar una CloudFormation pila que cree todos los SageMaker conectores y modelos necesarios**

1. Abre la consola OpenSearch de Amazon Service.

1. En el panel de navegación, elija **Integraciones**.

1. En el campo de búsqueda, introduce y**SageMaker**, a continuación, selecciona **Integración con modelos de incrustación de texto a través de Amazon SageMaker**.

1. Seleccione **Configurar dominio** y, a continuación, seleccione **Configurar dominio de VPC** o **Configurar dominio público**.

1. Ingrese la información en los campos de la plantilla. En **Habilitar la inferencia en lotes sin conexión**, elija **true** para aprovisionar recursos para el procesamiento en lotes sin conexión.

1. Selecciona **Crear** para crear la CloudFormation pila.

1. **Una vez creada la pila, abra la pestaña **Salidas** en la CloudFormation consola y busque el **connector\_id** y el model\_id.** Necesitará estos valores más adelante cuando configure la canalización.

### Paso 2: Cree una canalización de OpenSearch ingestión para la inferencia de lotes fuera de línea de ML
<a name="configure-clients-ml-commons-configuring-pipeline"></a>

Utilice el siguiente ejemplo para crear una canalización de OpenSearch ingestión para la inferencia de lotes de ML sin conexión. Para obtener más información sobre la creación de una canalización para OpenSearch Ingestion, consulte. [Creación de canalizaciones OpenSearch de Amazon Ingestion](creating-pipeline.md)

**Antes de empezar**

En el siguiente ejemplo, se especifica un ARN de rol de IAM para el parámetro `sts_role_arn`. Utilice el siguiente procedimiento para comprobar que este rol está asignado al rol de backend que tiene acceso a ml-commons en. OpenSearch

1. Navegue hasta el complemento OpenSearch Dashboards de su dominio de servicio. OpenSearch Puedes encontrar el punto de conexión del panel de control en el panel de control de tu dominio, en la consola de OpenSearch servicio.

1. En el menú principal, seleccione **Seguridad**, **Roles** y seleccione el rol **ml\_full\_access**.

1. Seleccione **Usuarios asignados**, **Administrar mapeo**. 

1. En **Roles de backend**, escriba el ARN del rol de Lambda que necesita permiso para llamar a su dominio. Este es un ejemplo: arn:aws:iam: ::role/ {{111122223333}} {{lambda-role}}

1. Seleccione **Asignar** y confirme que el usuario o el rol aparecen en **Usuarios asignados**.

**Ejemplo de creación de una canalización de ingestión para la inferencia de lotes offline de ML OpenSearch **

```
version: '2'
extension:
  osis_configuration_metadata:
    builder_type: visual
sagemaker-batch-job-pipeline:
  source:
    s3:
      acknowledgments: true
      delete_s3_objects_on_read: false
      scan:
        buckets:
          - bucket:
              name: {{name}}
              data_selection: metadata_only
              filter:
                include_prefix:
                  - sagemaker/sagemaker_djl_batch_input
                exclude_suffix:
                  - .manifest
          - bucket:
              name: {{name}}
              data_selection: data_only
              filter:
                include_prefix:
                  - sagemaker/output/
        scheduling:
          interval: PT6M
      aws:
        region: {{name}}
      default_bucket_owner: {{account_ID}}
      codec:
        ndjson:
          include_empty_objects: false
      compression: none
      workers: '1'
  processor:
    - ml_inference:
        host: "{{https://search-AWStest-offlinebatch-123456789abcdef.us-west-2.es.amazonaws.com}}"
        aws_sigv4: true
        action_type: "batch_predict"
        service_name: "sagemaker"
        model_id: "{{model_ID}}"
        output_path: "s3://{{AWStest-offlinebatch/sagemaker/output}}"
        aws:
          region: "{{us-west-2}}"
          sts_role_arn: "arn:aws:iam::{{account_ID}}:role/Admin"
        ml_when: /bucket == "{{AWStest-offlinebatch}}"
        dlq:
          s3:
            region: {{us-west-2}}
            bucket: {{batch-inference-dlq}}
            key_path_prefix: {{bedrock-dlq}}
            sts_role_arn: arn:aws:iam::{{account_ID}}:role/{{OSI-invoke-ml}}
    - copy_values:
        entries:
          - from_key: /text
            to_key: chapter
          - from_key: /SageMakerOutput
            to_key: chapter_embedding
          - delete_entries:
            with_keys:
          - text
          - SageMakerOutput
  sink:
    - opensearch:
        hosts: ["{{https://search-AWStest-offlinebatch-123456789abcdef.us-west-2.es.amazonaws.com}}"]
        aws:
          serverless: false
          region: us-west-2
        routes:
          - ml-ingest-route
        index_type: custom
        index: test-nlp-index
  routes:
    - ml-ingest-route: /chapter != null and /title != null
```

### Paso 3: preparar los datos para la ingesta
<a name="configure-clients-ml-commons-configuring-data"></a>

[Para preparar los datos para el procesamiento de inferencias por lotes de aprendizaje automático fuera de línea, prepare los datos usted mismo con sus propias herramientas o procesos o utilice el OpenSearch Data Prepper.](https://docs.opensearch.org/latest/data-prepper/getting-started/) Compruebe que los datos estén organizados en el formato correcto, ya sea mediante una canalización para consumir los datos del origen de datos o con la creación de un conjunto de datos de machine learning.

El siguiente ejemplo usa el conjunto de datos [MS MARCO](https://microsoft.github.io/msmarco/Datasets.html), que incluye una colección de consultas de usuarios reales para tareas de procesamiento del lenguaje natural. El conjunto de datos está estructurado en formato JSONL, donde cada línea representa una solicitud enviada al modelo de incrustación de ML:

```
{"_id": "1185869", "text": ")what was the immediate impact of the Paris Peace Treaties of 1947?", "metadata": {"world war 2"}}
{"_id": "1185868", "text": "_________ justice is designed to repair the harm to victim, the community and the offender caused by the offender criminal act. question 19 options:", "metadata": {"law"}}
{"_id": "597651", "text": "what is amber", "metadata": {"nothing"}}
{"_id": "403613", "text": "is autoimmune hepatitis a bile acid synthesis disorder", "metadata": {"self immune"}}
...
```

Para realizar una prueba con el conjunto de datos MS MARCO, imagine un escenario en el que cree mil millones de solicitudes de entrada distribuidas en 100 archivos, cada uno con 10 millones de solicitudes. Los archivos se almacenarían en Amazon S3 con el prefijo s3://offlinebatch/sagemaker/sagemaker\_djl\_batch\_input/. El proceso OpenSearch de ingestión escanearía estos 100 archivos simultáneamente e iniciaría un trabajo SageMaker por lotes con 100 trabajadores para su procesamiento en paralelo, lo que permitiría la vectorización y la ingestión eficientes de los mil millones de documentos en los que se encuentran. OpenSearch

En los entornos de producción, puede utilizar una canalización de OpenSearch ingestión para generar archivos S3 para la entrada de datos por lotes. La canalización admite varios [orígenes de datos](https://docs.opensearch.org/latest/data-prepper/pipelines/configuration/sources/sources/) y funciona según un cronograma para transformar de manera continua los datos de origen en archivos de S3. Luego, los servidores de IA procesan automáticamente estos archivos mediante tareas en lotes programadas sin conexión, lo que garantiza el procesamiento y la ingesta continuos de datos.

### Paso 4: Supervisar la tarea de inferencia en lotes
<a name="configure-clients-ml-commons-configuring-monitor"></a>

Puede supervisar los trabajos de inferencia por lotes mediante la SageMaker consola o el. AWS CLI También puede utilizar la API Get Task para supervisar tareas en lotes:

```
GET /_plugins/_ml/tasks/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "state": "RUNNING"
          }
        }
      ]
    }
  },
  "_source": ["model_id", "state", "task_type", "create_time", "last_update_time"]
}
```

La API devuelve una lista de tareas en lotes activas:

```
{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 3,
      "relation": "eq"
    },
    "max_score": 0.0,
    "hits": [
      {
        "_index": ".plugins-ml-task",
        "_id": "nyWbv5EB_tT1A82ZCu-e",
        "_score": 0.0,
        "_source": {
          "model_id": "nyWbv5EB_tT1A82ZCu-e",
          "state": "RUNNING",
          "task_type": "BATCH_PREDICTION",
          "create_time": 1725496527958,
          "last_update_time": 1725496527958
        }
      },
      {
        "_index": ".plugins-ml-task",
        "_id": "miKbv5EB_tT1A82ZCu-f",
        "_score": 0.0,
        "_source": {
          "model_id": "miKbv5EB_tT1A82ZCu-f",
          "state": "RUNNING",
          "task_type": "BATCH_PREDICTION",
          "create_time": 1725496528123,
          "last_update_time": 1725496528123
        }
      },
      {
        "_index": ".plugins-ml-task",
        "_id": "kiLbv5EB_tT1A82ZCu-g",
        "_score": 0.0,
        "_source": {
          "model_id": "kiLbv5EB_tT1A82ZCu-g",
          "state": "RUNNING",
          "task_type": "BATCH_PREDICTION",
          "create_time": 1725496529456,
          "last_update_time": 1725496529456
        }
      }
    ]
  }
}
```

### Paso 5: ejecute la búsqueda
<a name="configure-clients-ml-commons-configuring-semantic-search"></a>

Tras supervisar la tarea de inferencia en lotes y confirmar que se ha completado, puede ejecutar varios tipos de búsquedas de IA, incluidas las semánticas, las híbridas, las conversacionales (con RAG), las dispersas neuronales y las multimodales. Para obtener más información sobre las búsquedas de IA compatibles con el OpenSearch Servicio, consulte [Búsqueda de IA](https://docs.opensearch.org/latest/vector-search/ai-search/index/). 

Para buscar vectores sin procesar, utilice el tipo de consulta `knn`, proporcione la matriz `vector` como entrada y especifique el `k` número de resultados devueltos:

```
GET /my-raw-vector-index/_search
{
  "query": {
    "knn": {
      "my_vector": {
        "vector": [0.1, 0.2, 0.3],
        "k": 2
      }
    }
  }
}
```

Para ejecutar una búsqueda basada en la IA, utilice el tipo de consulta `neural`. Especifique la `query_text` entrada, el modelo `model_id` de incrustación que configuró en el proceso de OpenSearch ingestión y el `k` número de resultados devueltos. Para excluir las incrustaciones de los resultados de búsqueda, especifique el nombre del campo de incrustación en el parámetro: `_source.excludes`

```
GET /my-ai-search-index/_search
{
  "_source": {
    "excludes": [
      "output_embedding"
    ]
  },
  "query": {
    "neural": {
      "output_embedding": {
        "query_text": "What is AI search?",
        "model_id": "mBGzipQB2gmRjlv_dOoB",
        "k": 2
      }
    }
  }
}
```