Utilizzo di una pipeline OpenSearch di ingestione con inferenza batch offline di machine learning - OpenSearch Servizio Amazon

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo di una pipeline OpenSearch di ingestione con inferenza batch offline di machine learning

Le pipeline Amazon OpenSearch Ingestion (OSI) supportano l'elaborazione di inferenze in batch offline di machine learning (ML) per arricchire in modo efficiente grandi volumi di dati a basso costo. Usa l'inferenza in batch offline ogni volta che hai set di dati di grandi dimensioni che possono essere elaborati in modo asincrono. L'inferenza batch offline funziona con Amazon Bedrock e SageMaker i modelli. Questa funzionalità è disponibile in tutti i domini Regioni AWS che supportano OpenSearch Ingestion with OpenSearch Service 2.17+.

Nota

Per l'elaborazione dell'inferenza in tempo reale, usa. Connettori Amazon OpenSearch Service ML per piattaforme di terze parti

L'elaborazione offline dell'inferenza in batch sfrutta una funzionalità OpenSearch chiamata ML Commons. ML Commons fornisce algoritmi ML tramite chiamate API di trasporto e REST. Queste chiamate scelgono i nodi e le risorse giusti per ogni richiesta ML e monitorano le attività di machine learning per garantire l'operatività. In questo modo, ML Commons consente di sfruttare gli algoritmi ML open source esistenti e di ridurre lo sforzo richiesto per sviluppare nuove funzionalità di machine learning. Per ulteriori informazioni su ML Commons, consulta Machine learning nella documentazione.org. OpenSearch

Come funziona

È possibile creare una pipeline di inferenza batch offline su OpenSearch Ingestion aggiungendo un processore di inferenza di machine learning a una pipeline. Questo processore consente alla pipeline di connettersi a servizi di intelligenza artificiale, ad esempio eseguire lavori di inferenza in batch. SageMaker Puoi configurare il processore per connettersi al servizio di intelligenza artificiale desiderato tramite i connettori AI (con supporto batch_predict) in esecuzione sul dominio di destinazione.

OpenSearch Ingestion utilizza il ml_inference processore con ML Commons per creare lavori di inferenza batch offline. ML Commons utilizza quindi l'API batch_predict, che esegue l'inferenza su set di dati di grandi dimensioni in modalità asincrona offline utilizzando un modello distribuito su server di modelli esterni in Amazon Bedrock, Amazon, Cohere e OpenAI. SageMaker Il diagramma seguente mostra una pipeline di ingestione che orchestra più componenti per eseguire questo processo dall'inizio alla fine OpenSearch :

Architettura a tre pipeline di elaborazione inferenziale AI in batch.

I componenti della pipeline funzionano come segue:

Pipeline 1 (preparazione e trasformazione dei dati) *:

  • Fonte: i dati vengono scansionati dalla fonte esterna supportata da OpenSearch Ingestion.

  • Processori di dati: i dati grezzi vengono elaborati e trasformati nel formato corretto per l'inferenza in batch sul servizio di intelligenza artificiale integrato.

  • S3 (Sink): i dati elaborati vengono archiviati in un bucket Amazon S3 pronto a fungere da input per l'esecuzione di processi di inferenza in batch sul servizio di intelligenza artificiale integrato.

Pipeline 2 (Trigger ML batch_inference):

  • Fonte: rilevamento automatico degli eventi S3 di nuovi file creati dall'output di Pipeline 1.

  • Processore ML_Inference: processore che genera inferenze ML tramite un processo batch asincrono. Si connette ai servizi di intelligenza artificiale tramite il connettore AI configurato in esecuzione sul dominio di destinazione.

  • ID attività: ogni processo batch è associato a un ID attività in ml-commons per il monitoraggio e la gestione.

  • OpenSearch ML Commons: ML Commons, che ospita il modello per la ricerca neurale in tempo reale, gestisce i connettori ai server AI remoti e serve per l'inferenza in batch e la APIs gestione dei lavori.

  • Servizi di intelligenza artificiale: OpenSearch ML Commons interagisce con servizi di intelligenza artificiale come Amazon Bedrock e Amazon SageMaker per eseguire inferenze in batch sui dati, producendo previsioni o approfondimenti. I risultati vengono salvati in modo asincrono in un file S3 separato.

Pipeline 3 (ingestione in blocco):

  • S3 (fonte): i risultati dei processi batch vengono archiviati in S3, che è l'origine di questa pipeline.

  • Processori di trasformazione dei dati: ulteriori elaborazioni e trasformazioni vengono applicate all'output di inferenza in batch prima dell'ingestione. Ciò garantisce che i dati siano mappati correttamente nell'indice. OpenSearch

  • OpenSearch index (Sink): i risultati elaborati vengono indicizzati OpenSearch per l'archiviazione, la ricerca e ulteriori analisi.

Nota

*Il processo descritto da Pipeline 1 è facoltativo. Se preferisci, puoi saltare questo processo e caricare semplicemente i dati preparati nel sink S3 per creare lavori in batch.

Informazioni sul processore ml_inference

OpenSearch Ingestion utilizza un'integrazione specializzata tra la sorgente S3 Scan e il processore di inferenza ML per l'elaborazione in batch. S3 Scan funziona in modalità solo metadati per raccogliere in modo efficiente le informazioni sui file S3 senza leggere il contenuto effettivo del file. Il ml_inference processore utilizza il file S3 per coordinarsi con ML Commons URLs per l'elaborazione in batch. Questo design ottimizza il flusso di lavoro di inferenza in batch riducendo al minimo il trasferimento di dati non necessario durante la fase di scansione. Il ml_inference processore viene definito utilizzando i parametri. Ecco un esempio:

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: # Regione 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"

Miglioramenti delle prestazioni di ingestione utilizzando il processore ml_inference

Il ml_inference processore OpenSearch Ingestion migliora in modo significativo le prestazioni di inserimento dei dati per la ricerca basata su ML. Il processore è ideale per i casi d'uso che richiedono dati generati da modelli di machine learning, tra cui la ricerca semantica, la ricerca multimodale, l'arricchimento dei documenti e la comprensione delle interrogazioni. Nella ricerca semantica, il processore può accelerare la creazione e l'ingestione di vettori di grandi volumi e ad alta dimensione di un ordine di grandezza.

La capacità di inferenza in batch offline del processore offre vantaggi distinti rispetto all'invocazione di modelli in tempo reale. Sebbene l'elaborazione in tempo reale richieda un server modello live con limiti di capacità, l'inferenza in batch ridimensiona dinamicamente le risorse di calcolo su richiesta ed elabora i dati in parallelo. Ad esempio, quando la pipeline OpenSearch Ingestion riceve un miliardo di richieste di dati di origine, crea 100 file S3 per l'input di inferenza in batch ML. Il ml_inference processore avvia quindi un processo SageMaker in batch utilizzando 100 istanze ml.m4.xlarge Amazon Elastic Compute Cloud EC2 (Amazon), completando la vettorizzazione di un miliardo di richieste in 14 ore, un'attività che sarebbe praticamente impossibile da eseguire in modalità in tempo reale.

Configura il processore ml_inference per inserire le richieste di dati per una ricerca semantica

Le seguenti procedure illustrano il processo di impostazione e configurazione del ml_inference processore OpenSearch Ingestion per importare un miliardo di richieste di dati per la ricerca semantica utilizzando un modello di incorporamento del testo.

Fase 1: Creare connettori e registrare modelli in OpenSearch

Per la procedura seguente, usa ML Commons batch_inference_sagemaker_connector_blueprint per creare un connettore e un modello in Amazon. SageMaker Se preferisci OpenSearch CloudFormation utilizzare modelli di (Procedura alternativa) Fase 1: Creazione di connettori e modelli utilizzando un modello di CloudFormation integrazione integrazione, consulta più avanti in questa sezione.

Per creare connettori e registrare modelli in OpenSearch
  1. Crea un modello ML Deep Java Library (DJL) SageMaker per la trasformazione in batch. Per visualizzare altri modelli DJL, consulta Semantic_search_with_cfn_template_for_SageMaker su: 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" } }
  2. actionCrea un batch_predict connettore con come nuovo tipo nel 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}"}""" } ] }
  3. Utilizzate l'ID del connettore restituito per registrare il SageMaker modello:

    POST /_plugins/_ml/models/_register { "name": "SageMaker model for batch", "function_name": "remote", "description": "test model", "connector_id": "example123456789-abcde" }
  4. Invoca il modello con il tipo di batch_predict azione:

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

    La risposta contiene un ID attività per il processo batch:

    { "task_id": "exampleIDabdcefd_1234567", "status": "CREATED" }
  5. Controlla lo stato del processo batch chiamando l'API Get Task utilizzando l'ID dell'attività:

    GET /_plugins/_ml/tasks/exampleIDabdcefd_1234567

    La risposta contiene lo stato dell'attività:

    { "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": "$" } } }

(Procedura alternativa) Fase 1: Creazione di connettori e modelli utilizzando un modello di CloudFormation integrazione

Se preferisci, puoi utilizzarlo AWS CloudFormation per creare automaticamente tutti i SageMaker connettori e i modelli Amazon necessari per l'inferenza ML. Questo approccio semplifica la configurazione utilizzando un modello preconfigurato disponibile nella console di Amazon OpenSearch Service. Per ulteriori informazioni, consulta Utilizzo CloudFormation per configurare l'inferenza remota per la ricerca semantica.

Per implementare uno CloudFormation stack che crei tutti i connettori e i modelli richiesti SageMaker
  1. Apri la console Amazon OpenSearch Service.

  2. Nel riquadro di navigazione, scegli Integrazioni.

  3. Nel campo Cerca, inserisciSageMaker, quindi scegli Integrazione con modelli di incorporamento di testo tramite Amazon SageMaker.

  4. Scegli Configura dominio, quindi scegli Configura dominio VPC o Configura dominio pubblico.

  5. Inserisci le informazioni nei campi del modello. Per Enable Offline Batch Inference, scegli true per fornire risorse per l'elaborazione batch offline.

  6. Scegliete Crea per creare lo CloudFormation stack.

  7. Dopo aver creato lo stack, apri la scheda Outputs nella CloudFormation console Individua connector_id e model_id. Avrai bisogno di questi valori in seguito, quando configurerai la pipeline.

Fase 2: Creare una pipeline di OpenSearch ingestione per l'inferenza batch offline di ML

Utilizzate l'esempio seguente per creare una pipeline di OpenSearch ingestione per l'inferenza batch offline di ML. Per ulteriori informazioni sulla creazione di una pipeline per Ingestion, vedere. OpenSearch Creazione di pipeline Amazon OpenSearch Ingestion

Prima di iniziare

Nell'esempio seguente, si specifica un ARN del ruolo IAM per il sts_role_arn parametro. Utilizza la seguente procedura per verificare che questo ruolo sia mappato al ruolo di backend che ha accesso a ml-commons in. OpenSearch

  1. Vai al plug-in OpenSearch Dashboards per il tuo dominio di servizio. OpenSearch Puoi trovare l'endpoint delle dashboard nella dashboard del tuo dominio nella console di servizio. OpenSearch

  2. Dal menu principale scegli Sicurezza, Ruoli e seleziona il ruolo ml_full_access.

  3. Scegliere Utenti mappati, Gestisci mappatura.

  4. In Ruoli di backend, inserisci l'ARN del ruolo Lambda che richiede l'autorizzazione per chiamare il tuo dominio. Ecco un esempio: arn:aws:iam: ::role/ 111122223333 lambda-role

  5. Selezionare Mappa e confermare che l'utente o il ruolo venga visualizzato in Utenti mappati.

Esempio per creare una pipeline di ingestione per l'inferenza batch offline di 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

Fase 3: Preparare i dati per l'ingestione

Per preparare i dati per l'elaborazione dell'inferenza in batch offline di ML, preparate voi stessi i dati utilizzando i vostri strumenti o processi oppure utilizzate Data Prepper. OpenSearch Verifica che i dati siano organizzati nel formato corretto utilizzando una pipeline per utilizzare i dati dalla tua fonte di dati o creando un set di dati di apprendimento automatico.

L'esempio seguente utilizza il set di dati MS MARCO, che include una raccolta di query utente reali per attività di elaborazione del linguaggio naturale. Il set di dati è strutturato in formato JSONL, in cui ogni riga rappresenta una richiesta inviata al modello di incorporamento 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"}} ...

Per testare l'utilizzo del set di dati MS MARCO, immagina uno scenario in cui crei un miliardo di richieste di input distribuite su 100 file, ciascuno contenente 10 milioni di richieste. I file verrebbero archiviati in Amazon S3 con il prefisso s3://_djl_batch_input/. offlinebatch/sagemaker/sagemaker La pipeline OpenSearch Ingestion scansionerebbe questi 100 file contemporaneamente e avvierebbe un processo in SageMaker batch con 100 addetti per l'elaborazione parallela, consentendo la vettorizzazione e l'ingestione efficienti del miliardo di documenti in esso contenuti. OpenSearch

Negli ambienti di produzione, è possibile utilizzare una pipeline di OpenSearch Ingestion per generare file S3 per l'input di inferenza in batch. La pipeline supporta varie fonti di dati e opera secondo una pianificazione per trasformare continuamente i dati di origine in file S3. Questi file vengono quindi elaborati automaticamente dai server AI tramite processi batch offline pianificati, garantendo l'elaborazione e l'ingestione continue dei dati.

Fase 4: Monitoraggio del processo di inferenza in batch

È possibile monitorare i lavori di inferenza in batch utilizzando la SageMaker console o il. AWS CLI Puoi anche utilizzare l'API Get Task per monitorare i processi in batch:

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

L'API restituisce un elenco di attività di lavoro in batch attive:

{ "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 } } ] } }

Dopo aver monitorato il processo di inferenza in batch e averne confermato il completamento, puoi eseguire vari tipi di ricerche AI, tra cui semantiche, ibride, conversazionali (con RAG), neural sparse e multimodali. Per ulteriori informazioni sulle ricerche AI supportate dal Servizio, consulta Ricerca AI. OpenSearch

Per cercare vettori grezzi, usa il tipo di knn query, fornisci l'vectorarray come input e specifica il k numero di risultati restituiti:

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

Per eseguire una ricerca basata sull'intelligenza artificiale, utilizza il neural tipo di query. Specificate l'query_textinput, il modello model_id di incorporamento configurato nella pipeline di OpenSearch ingestione e il numero di risultati restituiti. k Per escludere gli incorporamenti dai risultati della ricerca, specificate il nome del campo di incorporamento nel parametro: _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 } } } }