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
Come funziona
È possibile creare una pipeline di inferenza batch offline su OpenSearch Ingestion aggiungendo un processore di inferenza di machine learning a una
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
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.
Argomenti
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
Per creare connettori e registrare modelli in OpenSearch
-
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" } } -
actionCrea unbatch_predictconnettore con come nuovo tipo nel campo:actionsPOST /_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}"}""" } ] } -
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" } -
Invoca il modello con il tipo di
batch_predictazione: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" } -
Controlla lo stato del processo batch chiamando l'API Get Task utilizzando l'ID dell'attività:
GET /_plugins/_ml/tasks/exampleIDabdcefd_1234567La 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
-
Apri la console Amazon OpenSearch Service.
-
Nel riquadro di navigazione, scegli Integrazioni.
-
Nel campo Cerca, inserisci
SageMaker, quindi scegli Integrazione con modelli di incorporamento di testo tramite Amazon SageMaker. -
Scegli Configura dominio, quindi scegli Configura dominio VPC o Configura dominio pubblico.
-
Inserisci le informazioni nei campi del modello. Per Enable Offline Batch Inference, scegli true per fornire risorse per l'elaborazione batch offline.
-
Scegliete Crea per creare lo CloudFormation stack.
-
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
-
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
-
Dal menu principale scegli Sicurezza, Ruoli e seleziona il ruolo ml_full_access.
-
Scegliere Utenti mappati, Gestisci mappatura.
-
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/
111122223333lambda-role -
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:namedata_selection: metadata_only filter: include_prefix: - sagemaker/sagemaker_djl_batch_input exclude_suffix: - .manifest - bucket: name:namedata_selection: data_only filter: include_prefix: - sagemaker/output/ scheduling: interval: PT6M aws: region:namedefault_bucket_owner:account_IDcodec: 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-2bucket:batch-inference-dlqkey_path_prefix:bedrock-dlqsts_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
L'esempio seguente utilizza il set di dati MS MARCO
{"_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
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 } } ] } }
Passaggio 5: Esegui la ricerca
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 } } } }