

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
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker"></a>

*Mohan Gowda Purushothama, Gabriel Rodriguez Garcia e Mateusz Zaremba, Amazon Web Services*

## Riepilogo
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-summary"></a>

Questo modello spiega come distribuire più oggetti del modello di pipeline in un singolo endpoint utilizzando una [pipeline di inferenza](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-pipelines.html) 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](https://docs.aws.amazon.com/sagemaker/latest/dg/sklearn.html) di preelaborazione e un modello di regressione basato sull'algoritmo di apprendimento lineare integrato.](https://docs.aws.amazon.com/sagemaker/latest/dg/linear-learner.html) 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](https://aws.amazon.com/sagemaker/pricing/). Questo modello utilizza [immagini Docker predefinite per Scikit-learn](https://docs.aws.amazon.com/sagemaker/latest/dg/pre-built-docker-containers-scikit-learn-spark.html), ma puoi usare i tuoi contenitori Docker e integrarli nel tuo flusso di lavoro.

## Prerequisiti e limitazioni
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ [Python 3.9](https://www.python.org/downloads/release/python-390/)
+ [SDK Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable/) [e libreria Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)
+ [Ruolo](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) [AWS Identity and Access Management (AWS IAM) con SageMaker [autorizzazioni di base e autorizzazioni](https://docs.aws.amazon.com/sagemaker/latest/dg/api-permissions-reference.html) Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-policy-language-overview.html)

**Versioni del prodotto**
+ [SDK Amazon SageMaker Python 2.49.2](https://sagemaker.readthedocs.io/en/v2.49.2/)

## Architecture
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-architecture"></a>

**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](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints.html) 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\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/1105d51b-752f-46d7-962c-acef1fb3399f/images/12f06715-b1c2-4de0-b277-99ce87308152.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Un SageMaker notebook implementa un modello di pipeline.

1. Un bucket S3 memorizza gli artefatti del modello.

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

## Tools (Strumenti)
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-tools"></a>

**Strumenti AWS**
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) è un servizio di registro di immagini di container gestito sicuro, scalabile e affidabile.
+ [Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) è 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](https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html) è 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)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) è 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](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-python-sdk/scikit_learn_inference_pipeline/Inference%20Pipeline%20with%20Scikit-learn%20and%20Linear%20Learner.ipynb).

## Epiche
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-epics"></a>

### Prepara il set di dati
<a name="prepare-the-dataset"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Prepara il set di dati per l'attività di regressione. | [Apri un notebook](https://docs.aws.amazon.com/sagemaker/latest/dg/notebooks-create-open.html#notebooks-open) 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:<pre>import sagemaker<br />from sagemaker import get_execution_role<br /><br />sagemaker_session = sagemaker.Session()<br /><br /># Get a SageMaker-compatible role used by this Notebook Instance.<br />role = get_execution_role()<br /><br /># S3 prefix<br />bucket = sagemaker_session.default_bucket()<br />prefix = "Scikit-LinearLearner-pipeline-abalone-example"</pre>Per scaricare un set di dati di esempio, aggiungi il seguente codice al tuo taccuino:<pre>! mkdir abalone_data<br />! aws s3 cp s3://sagemaker-sample-files/datasets/tabular/uci_abalone/abalone.csv ./abalone_data</pre>****L'esempio in questo modello utilizza l'[Abalone Data Set](https://archive.ics.uci.edu/ml/datasets/abalone) 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:<pre>WORK_DIRECTORY = "abalone_data"<br /><br />train_input = sagemaker_session.upload_data(<br />    path="{}/{}".format(WORK_DIRECTORY, "abalone.csv"),<br />    bucket=bucket,<br />    key_prefix="{}/{}".format(prefix, "train"),<br />)</pre> | Data Scientist | 

### Crea il preprocessore di dati utilizzando SKLearn
<a name="create-the-data-preprocessor-using-sklearn"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Preparare lo script preprocessor.py. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker.html) | Data Scientist | 
| Create l'oggetto SKLearn del preprocessore. | Per creare un oggetto SKLearn preprocessore (chiamato SKLearn Estimator) da incorporare nella pipeline di inferenza finale, esegui il codice seguente nel tuo taccuino: SageMaker <pre>from sagemaker.sklearn.estimator import SKLearn<br /><br />FRAMEWORK_VERSION = "0.23-1"<br />script_path = "sklearn_abalone_featurizer.py"<br /><br />sklearn_preprocessor = SKLearn(<br />    entry_point=script_path,<br />    role=role,<br />    framework_version=FRAMEWORK_VERSION,<br />    instance_type="ml.c4.xlarge",<br />    sagemaker_session=sagemaker_session,<br />)<br />sklearn_preprocessor.fit({"train": train_input})</pre> | Data Scientist | 
| Verifica l'inferenza del preprocessore. | Per confermare che il preprocessore sia definito correttamente, avviate un [processo di trasformazione in batch](https://docs.aws.amazon.com/sagemaker/latest/dg/batch-transform.html) inserendo il seguente codice nel notebook: SageMaker <pre># Define a SKLearn Transformer from the trained SKLearn Estimator<br />transformer = sklearn_preprocessor.transformer(<br />    instance_count=1, instance_type="ml.m5.xlarge", assemble_with="Line", accept="text/csv"<br />)<br /><br /><br /># Preprocess training input<br />transformer.transform(train_input, content_type="text/csv")<br />print("Waiting for transform job: " + transformer.latest_transform_job.job_name)<br />transformer.wait()<br />preprocessed_train = transformer.output_path</pre> |  | 

### Crea un modello di apprendimento automatico
<a name="create-a-machine-learning-model"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un oggetto modello. | Per creare un oggetto modello basato sull'algoritmo Linear Learner, inserisci il seguente codice nel tuo SageMaker taccuino:<pre>import boto3<br />from sagemaker.image_uris import retrieve<br /><br />ll_image = retrieve("linear-learner", boto3.Session().region_name)<br />s3_ll_output_key_prefix = "ll_training_output"<br />s3_ll_output_location = "s3://{}/{}/{}/{}".format(<br />    bucket, prefix, s3_ll_output_key_prefix, "ll_model"<br />)<br /><br />ll_estimator = sagemaker.estimator.Estimator(<br />    ll_image,<br />    role,<br />    instance_count=1,<br />    instance_type="ml.m4.2xlarge",<br />    volume_size=20,<br />    max_run=3600,<br />    input_mode="File",<br />    output_path=s3_ll_output_location,<br />    sagemaker_session=sagemaker_session,<br />)<br /><br />ll_estimator.set_hyperparameters(feature_dim=10, predictor_type="regressor", mini_batch_size=32)<br /><br />ll_train_data = sagemaker.inputs.TrainingInput(<br />    preprocessed_train,<br />    distribution="FullyReplicated",<br />    content_type="text/csv",<br />    s3_data_type="S3Prefix",<br />)<br /><br />data_channels = {"train": ll_train_data}<br />ll_estimator.fit(inputs=data_channels, logs=True)</pre>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 | 

### Implementa la pipeline finale
<a name="deploy-the-final-pipeline"></a>


| Operazione | Description | Competenze 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 <pre>from sagemaker.model import Model<br />from sagemaker.pipeline import PipelineModel<br />import boto3<br />from time import gmtime, strftime<br /><br />timestamp_prefix = strftime("%Y-%m-%d-%H-%M-%S", gmtime())<br /><br />scikit_learn_inferencee_model = sklearn_preprocessor.create_model()<br />linear_learner_model = ll_estimator.create_model()<br /><br />model_name = "inference-pipeline-" + timestamp_prefix<br />endpoint_name = "inference-pipeline-ep-" + timestamp_prefix<br />sm_model = PipelineModel(<br />    name=model_name, role=role, models= [scikit_learn_inferencee_model, linear_learner_model]<br />)<br /><br />sm_model.deploy(initial_instance_count=1, instance_type="ml.c4.xlarge", endpoint_name=endpoint_name)</pre>È 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 <pre>from sagemaker.predictor import Predictor<br />from sagemaker.serializers import CSVSerializer<br /><br />payload = "M, 0.44, 0.365, 0.125, 0.516, 0.2155, 0.114, 0.155"<br />actual_rings = 10<br />predictor = Predictor(<br />    endpoint_name=endpoint_name, sagemaker_session=sagemaker_session, serializer=CSVSerializer()<br />)<br /><br />print(predictor.predict(payload))</pre> | Data Scientist | 

## Risorse correlate
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-resources"></a>
+ [Preelabora i dati di input prima di fare previsioni utilizzando le pipeline di SageMaker inferenza di Amazon e Scikit-learn (AWS Machine](https://aws.amazon.com/blogs/machine-learning/preprocess-input-data-before-making-predictions-using-amazon-sagemaker-inference-pipelines-and-scikit-learn/) Learning Blog)
+ [Machine Learning end-to-end con Amazon SageMaker](https://github.com/aws-samples/amazon-sagemaker-build-train-deploy) (GitHub)