Implementa la logica di preelaborazione in un modello ML in un singolo endpoint utilizzando una pipeline di inferenza in Amazon SageMaker - Prontuario AWS

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à.

Implementa la logica di preelaborazione in un modello ML in un singolo endpoint utilizzando una pipeline di inferenza in Amazon SageMaker

Creato da Mohan Gowda Purushothama (AWS), Gabriel Rodriguez Garcia (AWS) e Mateusz Zaremba (AWS)

Ambiente: produzione

Tecnologie: apprendimento automatico e intelligenza artificiale; contenitori e microservizi

Servizi AWS: Amazon SageMaker; Amazon ECR

Riepilogo

Questo modello spiega come distribuire più oggetti del modello di pipeline in un singolo endpoint utilizzando una pipeline di inferenza in Amazon. SageMaker L'oggetto del modello di pipeline rappresenta diverse fasi del flusso di lavoro di machine learning (ML), come la preelaborazione, l'inferenza del modello e la postelaborazione. Per illustrare la distribuzione di oggetti del modello di pipeline connessi in serie, questo modello mostra come implementare un contenitore Scikit-learn di preelaborazione e un modello di regressione basato sull'algoritmo di apprendimento lineare integrato. SageMaker L'implementazione SageMaker è ospitata dietro un singolo endpoint in.

Nota: la distribuzione in questo modello utilizza il tipo di istanza ml.m4.2xlarge. Ti consigliamo di utilizzare un tipo di istanza in linea con i requisiti di dimensione dei dati e la complessità del flusso di lavoro. Per ulteriori informazioni, consulta la pagina SageMaker dei prezzi di Amazon. Questo modello utilizza immagini Docker predefinite per Scikit-learn, ma puoi usare i tuoi contenitori Docker e integrarli nel tuo flusso di lavoro.

Prerequisiti e limitazioni

Prerequisiti

Versioni del prodotto

Architettura

Stack tecnologico Target

  • Amazon Elastic Container Registry (Amazon ECR)

  • Amazon SageMaker

  • Amazon SageMaker Studio

  • Amazon Simple Storage Service (Amazon S3)

  • Endpoint di inferenza in tempo reale per Amazon SageMaker

Architettura Target

Il diagramma seguente mostra l'architettura per la distribuzione di un oggetto del modello Amazon SageMaker Pipeline.

Architettura per la distribuzione di oggetti del modello di SageMaker pipeline

Il diagramma mostra il flusso di lavoro seguente:

  1. Un SageMaker notebook implementa un modello di pipeline.

  2. Un bucket S3 memorizza gli artefatti del modello.

  3. Amazon ECR ottiene le immagini del contenitore di origine dal bucket S3.

Strumenti

Strumenti AWS

  • Amazon Elastic Container Registry (Amazon ECR) è un servizio di registro di immagini di container gestito sicuro, scalabile e affidabile.

  • Amazon SageMaker è un servizio di machine learning gestito che ti aiuta a creare e addestrare modelli di machine learning per poi distribuirli in un ambiente ospitato pronto per la produzione.

  • Amazon SageMaker Studio è un ambiente di sviluppo integrato (IDE) basato sul Web per il machine learning che ti consente di creare, addestrare, eseguire il debug, distribuire e monitorare i tuoi modelli di machine learning.

  • Amazon Simple Storage Service (Amazon S3) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.

Codice

Il codice per questo pattern è disponibile nel repository GitHub Inference Pipeline con Scikit-learn e Linear Learner.

Epiche

AttivitàDescrizioneCompetenze richieste

Prepara il set di dati per l'attività di regressione.

Apri un notebook in Amazon SageMaker Studio.

Per importare tutte le librerie necessarie e inizializzare l'ambiente di lavoro, usa il seguente codice di esempio nel tuo notebook:

import sagemaker from sagemaker import get_execution_role sagemaker_session = sagemaker.Session() # Get a SageMaker-compatible role used by this Notebook Instance. role = get_execution_role() # S3 prefix bucket = sagemaker_session.default_bucket() prefix = "Scikit-LinearLearner-pipeline-abalone-example"

Per scaricare un set di dati di esempio, aggiungi il seguente codice al tuo taccuino:

! mkdir abalone_data ! aws s3 cp s3://sagemaker-sample-files/datasets/tabular/uci_abalone/abalone.csv ./abalone_data

Nota: l'esempio in questo modello utilizza l'Abalone Data Set dell'UCI Machine Learning Repository.

Data scientist

Carica il set di dati in un bucket S3.

Nel taccuino in cui hai preparato il set di dati in precedenza, aggiungi il codice seguente per caricare i dati di esempio in un bucket S3:

WORK_DIRECTORY = "abalone_data" train_input = sagemaker_session.upload_data( path="{}/{}".format(WORK_DIRECTORY, "abalone.csv"), bucket=bucket, key_prefix="{}/{}".format(prefix, "train"), )
Data scientist
AttivitàDescrizioneCompetenze richieste

Preparare lo script preprocessor.py.

  1. Copia la logica di preelaborazione dal file Python nel GitHub repository sklearn_abalone_featurizer.py, quindi incolla il codice in un file Python separato chiamato. sklearn_abalone_featurizer.py È possibile modificare il codice per adattarlo al set di dati e al flusso di lavoro personalizzati.

  2. Salvate il sklearn_abalone_featurizer.py file nella directory principale del progetto (ovvero nella stessa posizione in cui eseguite il SageMaker notebook).

Data scientist

Crea l'oggetto del preprocessore SKLearn.

Per creare un oggetto preprocessore SKLearn (chiamato SKLearn Estimator) da incorporare nella pipeline di inferenza finale, esegui il seguente codice nel tuo notebook: SageMaker

from sagemaker.sklearn.estimator import SKLearn FRAMEWORK_VERSION = "0.23-1" script_path = "sklearn_abalone_featurizer.py" sklearn_preprocessor = SKLearn( entry_point=script_path, role=role, framework_version=FRAMEWORK_VERSION, instance_type="ml.c4.xlarge", sagemaker_session=sagemaker_session, ) sklearn_preprocessor.fit({"train": train_input})
Data scientist

Verifica l'inferenza del preprocessore.

Per confermare che il preprocessore sia definito correttamente, avviate un processo di trasformazione in batch inserendo il seguente codice nel notebook: SageMaker

# Define a SKLearn Transformer from the trained SKLearn Estimator transformer = sklearn_preprocessor.transformer( instance_count=1, instance_type="ml.m5.xlarge", assemble_with="Line", accept="text/csv" ) # Preprocess training input transformer.transform(train_input, content_type="text/csv") print("Waiting for transform job: " + transformer.latest_transform_job.job_name) transformer.wait() preprocessed_train = transformer.output_path
AttivitàDescrizioneCompetenze richieste

Crea un oggetto modello.

Per creare un oggetto modello basato sull'algoritmo Linear Learner, inserisci il seguente codice nel tuo SageMaker taccuino:

import boto3 from sagemaker.image_uris import retrieve ll_image = retrieve("linear-learner", boto3.Session().region_name) s3_ll_output_key_prefix = "ll_training_output" s3_ll_output_location = "s3://{}/{}/{}/{}".format( bucket, prefix, s3_ll_output_key_prefix, "ll_model" ) ll_estimator = sagemaker.estimator.Estimator( ll_image, role, instance_count=1, instance_type="ml.m4.2xlarge", volume_size=20, max_run=3600, input_mode="File", output_path=s3_ll_output_location, sagemaker_session=sagemaker_session, ) ll_estimator.set_hyperparameters(feature_dim=10, predictor_type="regressor", mini_batch_size=32) ll_train_data = sagemaker.inputs.TrainingInput( preprocessed_train, distribution="FullyReplicated", content_type="text/csv", s3_data_type="S3Prefix", ) data_channels = {"train": ll_train_data} ll_estimator.fit(inputs=data_channels, logs=True)

Il codice precedente recupera l'immagine Docker Amazon ECR pertinente dal registro Amazon ECR pubblico per il modello, crea un oggetto estimatore e quindi utilizza quell'oggetto per addestrare il modello di regressione.

Data scientist
AttivitàDescrizioneCompetenze richieste

Implementa il modello di pipeline.

Per creare un oggetto del modello di pipeline (ovvero un oggetto preprocessore) e distribuire l'oggetto, inserite il codice seguente nel vostro taccuino: SageMaker

from sagemaker.model import Model from sagemaker.pipeline import PipelineModel import boto3 from time import gmtime, strftime timestamp_prefix = strftime("%Y-%m-%d-%H-%M-%S", gmtime()) scikit_learn_inferencee_model = sklearn_preprocessor.create_model() linear_learner_model = ll_estimator.create_model() model_name = "inference-pipeline-" + timestamp_prefix endpoint_name = "inference-pipeline-ep-" + timestamp_prefix sm_model = PipelineModel( name=model_name, role=role, models= [scikit_learn_inferencee_model, linear_learner_model] ) sm_model.deploy(initial_instance_count=1, instance_type="ml.c4.xlarge", endpoint_name=endpoint_name)

Nota: è possibile modificare il tipo di istanza utilizzato nell'oggetto del modello in base alle proprie esigenze.

Data scientist

Verificate l'inferenza.

Per confermare che l'endpoint funzioni correttamente, esegui il seguente codice di inferenza di esempio sul tuo notebook: SageMaker

from sagemaker.predictor import Predictor from sagemaker.serializers import CSVSerializer payload = "M, 0.44, 0.365, 0.125, 0.516, 0.2155, 0.114, 0.155" actual_rings = 10 predictor = Predictor( endpoint_name=endpoint_name, sagemaker_session=sagemaker_session, serializer=CSVSerializer() ) print(predictor.predict(payload))
Data scientist

Risorse correlate