Definisci Amazon SageMaker Pipelines - Amazon SageMaker

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

Definisci Amazon SageMaker Pipelines

Per orchestrare i flussi di lavoro con Amazon SageMaker Pipelines, genera un grafico aciclico diretto (DAG) sotto forma di definizione di pipeline. JSON L'immagine seguente è una rappresentazione della pipeline DAG creata in questo tutorial:

Schermata dell' drag-and-drop interfaccia visiva di Pipelines in Studio.

Puoi generare la definizione della JSON pipeline usando SageMaker PythonSDK. Il seguente tutorial mostra come generare una definizione di pipeline. La pipeline definita risolve un problema di regressione per determinare l'età di un abalone in base alle sue misurazioni fisiche. Per un notebook Jupyter eseguibile che include il contenuto di questo tutorial, consulta Orchestrating Jobs with Amazon Model Building Pipelines. SageMaker

Argomenti

    La seguente procedura dettagliata illustra i passaggi per creare una pipeline barebone utilizzando Pipeline Designer. drag-and-drop Se devi mettere in pausa o terminare la sessione di modifica di Pipeline nel visual designer in qualsiasi momento, fai clic sull'opzione Esporta. Ciò consente di scaricare la definizione corrente della Pipeline nell'ambiente locale. Successivamente, quando desideri riprendere il processo di modifica di Pipeline, puoi importare lo stesso file di JSON definizione nel visual designer.

    Crea una fase di elaborazione

    Per creare una fase del processo di elaborazione dati, procedi come segue:

    1. Apri la console Studio seguendo le istruzioni riportate inAvvia Amazon SageMaker Studio.

    2. Nel riquadro di navigazione a sinistra, seleziona Pipelines.

    3. Scegli Create (Crea) .

    4. Scegli Vuoto.

    5. Nella barra laterale sinistra, scegli Elabora dati e trascinali nell'area di disegno.

    6. Nell'area di disegno, scegli la fase Elabora dati che hai aggiunto.

    7. Per aggiungere un set di dati di input, scegli Aggiungi sotto Dati (input) nella barra laterale destra e seleziona un set di dati.

    8. Per aggiungere una posizione in cui salvare i set di dati di output, scegli Aggiungi sotto Dati (output) nella barra laterale destra e vai alla destinazione.

    9. Completa i campi rimanenti nella barra laterale destra. Per informazioni sui campi di queste schede, consulta sagemaker.workflow.steps. ProcessingStep.

    Crea una fase di allenamento

    Per impostare una fase di addestramento del modello, procedi come segue:

    1. Nella barra laterale sinistra, scegli Train model e trascinalo sull'area di disegno.

    2. Nell'area di disegno, scegli la fase del modello Train che hai aggiunto.

    3. Per aggiungere un set di dati di input, scegli Aggiungi sotto Dati (input) nella barra laterale destra e seleziona un set di dati.

    4. Per scegliere una posizione in cui salvare gli artefatti del modello, inserisci un Amazon URI S3 nel campo Posizione (URIS3) o scegli Browse S3 per accedere alla posizione di destinazione.

    5. Completa i campi rimanenti nella barra laterale destra. Per informazioni sui campi di queste schede, consulta sagemaker.workflow.steps. TrainingStep.

    6. Fate clic e trascinate il cursore dalla fase Process data che avete aggiunto nella sezione precedente alla fase Train model per creare uno spigolo che colleghi i due passaggi.

    Crea un pacchetto modello con una fase di registrazione del modello

    Per creare un pacchetto modello con una fase di registrazione del modello, effettuate le seguenti operazioni:

    1. Nella barra laterale sinistra, scegli Registra modello e trascinalo nell'area di disegno.

    2. Nell'area di disegno, scegli il passaggio Registra modello che hai aggiunto.

    3. Per selezionare un modello da registrare, scegliete Aggiungi sotto Modello (input).

    4. Scegliete Crea un gruppo di modelli per aggiungere il modello a un nuovo gruppo di modelli.

    5. Completa i campi rimanenti nella barra laterale destra. Per informazioni sui campi di queste schede, consulta sagemaker.workflow.step_collections. RegisterModel.

    6. Fate clic e trascinate il cursore dalla fase del modello Train che avete aggiunto nella sezione precedente alla fase Registra modello per creare uno spigolo che colleghi i due gradini.

    Distribuisci il modello su un endpoint con una fase Deploy model (endpoint)

    Per distribuire il modello utilizzando una fase di distribuzione del modello, procedi come segue:

    1. Nella barra laterale sinistra, scegli Deploy model (endpoint) e trascinalo nell'area di disegno.

    2. Nell'area di disegno, scegli il passaggio Deploy model (endpoint) che hai aggiunto.

    3. Per scegliere un modello da implementare, scegli Aggiungi sotto Modello (input).

    4. Scegli il pulsante di opzione Crea endpoint per creare un nuovo endpoint.

    5. Inserisci un nome e una descrizione per il tuo endpoint.

    6. Fate clic e trascinate il cursore dal passaggio Registra modello aggiunto nella sezione precedente al passo Deploy model (endpoint) per creare uno spigolo che colleghi i due passaggi.

    7. Completa i campi rimanenti nella barra laterale destra.

    Definite i parametri della pipeline

    È possibile configurare un set di parametri Pipeline i cui valori possono essere aggiornati per ogni esecuzione. Per definire i parametri della pipeline e impostare i valori predefiniti, fai clic sull'icona a forma di ingranaggio nella parte inferiore del visual designer.

    Salva pipeline

    Dopo aver inserito tutte le informazioni richieste per creare la pipeline, fai clic su Salva nella parte inferiore del visual designer. In questo modo la pipeline viene convalidata per eventuali errori in fase di esecuzione e viene inviata una notifica all'utente. L'operazione di salvataggio non avrà esito positivo finché non correggerai tutti gli errori segnalati dai controlli di convalida automatici. Se desideri riprendere la modifica in un secondo momento, puoi salvare la pipeline in corso come definizione nel tuo ambiente locale. JSON Puoi esportare la tua Pipeline come file di JSON definizione facendo clic sul pulsante Esporta nella parte inferiore del visual designer. Successivamente, per riprendere l'aggiornamento della Pipeline, carica il file di JSON definizione facendo clic sul pulsante Importa.

    Prerequisiti

    Per eseguire il seguente tutorial, completa quanto segue:

    • Configura l'istanza del notebook come illustrato in Creare un'istanza del notebook. In questo modo, al tuo ruolo vengono concesse le autorizzazioni per leggere e scrivere su Amazon S3 e creare processi di formazione, trasformazione in batch ed elaborazione. SageMaker

    • Concedi al notebook le autorizzazioni per acquisire e svolgere il proprio ruolo, come illustrato in Modifica della policy di autorizzazione di un ruolo. Aggiungi il seguente JSON frammento per allegare questa policy al tuo ruolo. <your-role-arn>Sostituiscilo con quello ARN usato per creare l'istanza del tuo notebook.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "<your-role-arn>" } ] }
    • Affidati al responsabile del SageMaker servizio seguendo i passaggi descritti in Modifica di una politica di attendibilità dei ruoli. Aggiungi il seguente frammento di dichiarazione alla relazione di attendibilità del tuo ruolo:

      { "Sid": "", "Effect": "Allow", "Principal": { "Service": "sagemaker.amazonaws.com" }, "Action": "sts:AssumeRole" }

    Configurazione dell'ambiente

    Crea una nuova SageMaker sessione utilizzando il seguente blocco di codice. Ciò restituisce ARN il ruolo della sessione. Questo ruolo ARN dovrebbe essere il ruolo di ARN esecuzione impostato come prerequisito.

    import boto3 import sagemaker import sagemaker.session from sagemaker.workflow.pipeline_context import PipelineSession region = boto3.Session().region_name sagemaker_session = sagemaker.session.Session() role = sagemaker.get_execution_role() default_bucket = sagemaker_session.default_bucket() pipeline_session = PipelineSession() model_package_group_name = f"AbaloneModelPackageGroupName"

    Crea una pipeline

    Importante

    IAMLe politiche personalizzate che consentono ad Amazon SageMaker Studio o Amazon SageMaker Studio Classic di creare SageMaker risorse Amazon devono inoltre concedere le autorizzazioni per aggiungere tag a tali risorse. L'autorizzazione per aggiungere tag alle risorse è necessaria perché Studio e Studio Classic taggano automaticamente tutte le risorse che creano. Se una IAM politica consente a Studio e Studio Classic di creare risorse ma non consente l'aggiunta di tag, si possono verificare errori AccessDenied "" durante il tentativo di creare risorse. Per ulteriori informazioni, consulta Fornisci le autorizzazioni per etichettare le risorse SageMaker.

    AWS Policy gestite per Amazon SageMakerche concedono le autorizzazioni per creare SageMaker risorse includono già le autorizzazioni per aggiungere tag durante la creazione di tali risorse.

    Esegui i seguenti passaggi dall'istanza del tuo SageMaker notebook per creare una pipeline che includa passaggi per:

    • preelaborazione

    • addestramento

    • valutazione

    • valutazione condizionale

    • registrazione del modello

    Passaggio 1: scarica il set di dati

    Questo notebook utilizza il set di dati UCI Machine Learning Abalone. Il set di dati contiene le seguenti caratteristiche:

    • length - La misurazione del guscio più lungo dell'abalone.

    • diameter - Il diametro dell'abalone perpendicolare alla sua lunghezza.

    • height - L'altezza dell'abalone con la carne nel guscio.

    • whole_weight - Il peso dell'abalone intero.

    • shucked_weight - Il peso della carne estratta dall'abalone.

    • viscera_weight - Il peso delle viscere dell'abalone dopo la perdita di sangue.

    • shell_weight - Il peso del guscio dell’abalone dopo la rimozione della carne e l'essiccazione.

    • sex - Il sesso dell'abalone. Uno tra “M”, “F” o “I”, dove “I” è un abalone neonato.

    • rings - Il numero di anelli nel guscio dell’abalone.

    Il numero di anelli nel guscio dell’abalone è una buona approssimazione della sua età secondo la formula age=rings + 1.5. Tuttavia, ottenere questo numero è un'operazione che richiede molto tempo. È necessario tagliare il guscio attraverso il cono, colorare la sezione e contare il numero di anelli al microscopio. Tuttavia, le altre misurazioni fisiche sono più facili da ottenere. Questo notebook utilizza il set di dati per creare un modello predittivo degli anelli variabili utilizzando le altre misurazioni fisiche.

    Per scaricare i set di dati
    1. Scarica il set di dati nel bucket Amazon S3 predefinito del tuo account.

      !mkdir -p data local_path = "data/abalone-dataset.csv" s3 = boto3.resource("s3") s3.Bucket(f"sagemaker-servicecatalog-seedcode-{region}").download_file( "dataset/abalone-dataset.csv", local_path ) base_uri = f"s3://{default_bucket}/abalone" input_data_uri = sagemaker.s3.S3Uploader.upload( local_path=local_path, desired_s3_uri=base_uri, ) print(input_data_uri)
    2. Scarica un secondo set di dati per la trasformazione in batch dopo la creazione del modello.

      local_path = "data/abalone-dataset-batch.csv" s3 = boto3.resource("s3") s3.Bucket(f"sagemaker-servicecatalog-seedcode-{region}").download_file( "dataset/abalone-dataset-batch", local_path ) base_uri = f"s3://{default_bucket}/abalone" batch_data_uri = sagemaker.s3.S3Uploader.upload( local_path=local_path, desired_s3_uri=base_uri, ) print(batch_data_uri)

    Fase 2: Definizione dei parametri della pipeline

    Questo blocco di codice definisce i seguenti parametri per la pipeline:

    • processing_instance_count - Il numero di istanze del processo di elaborazione.

    • input_data - La posizione su Amazon S3 dei dati di input.

    • batch_data - La posizione su Amazon S3 dei dati di input per la trasformazione in batch.

    • model_approval_status - Lo stato di approvazione con cui registrare il modello addestrato per CI/CD. Per ulteriori informazioni, consulta Automatizza MLOps con i progetti SageMaker .

    from sagemaker.workflow.parameters import ( ParameterInteger, ParameterString, ) processing_instance_count = ParameterInteger( name="ProcessingInstanceCount", default_value=1 ) model_approval_status = ParameterString( name="ModelApprovalStatus", default_value="PendingManualApproval" ) input_data = ParameterString( name="InputData", default_value=input_data_uri, ) batch_data = ParameterString( name="BatchData", default_value=batch_data_uri, )

    Fase 3: Definizione di una fase di elaborazione per l'ingegnerizzazione delle feature

    Questa sezione mostra come creare una fase di elaborazione per preparare i dati del set di dati per l'addestramento.

    Per creare una fase di elaborazione
    1. Crea una directory per lo script di elaborazione.

      !mkdir -p abalone
    2. Nella directory /abalone, crea un file denominato preprocessing.py con il contenuto seguente. Questo script di preelaborazione viene passato alla fase di elaborazione per essere eseguito sui dati di input. La fase di addestramento utilizza quindi le funzionalità e le etichette di addestramento preelaborate per addestrare un modello. La fase di valutazione utilizza il modello addestrato e le funzionalità e le etichette dei test preelaborati per valutare il modello. Lo script utilizza scikit-learn per effettuare quanto segue:

      • Inserire i dati categorici sex mancanti e codificarli in modo che siano adatti all’addestramento.

      • Ridimensionare e normalizzare tutti i campi numerici ad eccezione di rings e sex.

      • Suddividere i dati in set di dati di addestramento, test e convalida.

      %%writefile abalone/preprocessing.py import argparse import os import requests import tempfile import numpy as np import pandas as pd from sklearn.compose import ColumnTransformer from sklearn.impute import SimpleImputer from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler, OneHotEncoder # Because this is a headerless CSV file, specify the column names here. feature_columns_names = [ "sex", "length", "diameter", "height", "whole_weight", "shucked_weight", "viscera_weight", "shell_weight", ] label_column = "rings" feature_columns_dtype = { "sex": str, "length": np.float64, "diameter": np.float64, "height": np.float64, "whole_weight": np.float64, "shucked_weight": np.float64, "viscera_weight": np.float64, "shell_weight": np.float64 } label_column_dtype = {"rings": np.float64} def merge_two_dicts(x, y): z = x.copy() z.update(y) return z if __name__ == "__main__": base_dir = "/opt/ml/processing" df = pd.read_csv( f"{base_dir}/input/abalone-dataset.csv", header=None, names=feature_columns_names + [label_column], dtype=merge_two_dicts(feature_columns_dtype, label_column_dtype) ) numeric_features = list(feature_columns_names) numeric_features.remove("sex") numeric_transformer = Pipeline( steps=[ ("imputer", SimpleImputer(strategy="median")), ("scaler", StandardScaler()) ] ) categorical_features = ["sex"] categorical_transformer = Pipeline( steps=[ ("imputer", SimpleImputer(strategy="constant", fill_value="missing")), ("onehot", OneHotEncoder(handle_unknown="ignore")) ] ) preprocess = ColumnTransformer( transformers=[ ("num", numeric_transformer, numeric_features), ("cat", categorical_transformer, categorical_features) ] ) y = df.pop("rings") X_pre = preprocess.fit_transform(df) y_pre = y.to_numpy().reshape(len(y), 1) X = np.concatenate((y_pre, X_pre), axis=1) np.random.shuffle(X) train, validation, test = np.split(X, [int(.7*len(X)), int(.85*len(X))]) pd.DataFrame(train).to_csv(f"{base_dir}/train/train.csv", header=False, index=False) pd.DataFrame(validation).to_csv(f"{base_dir}/validation/validation.csv", header=False, index=False) pd.DataFrame(test).to_csv(f"{base_dir}/test/test.csv", header=False, index=False)
    3. Creare un'istanza di un SKLearnProcessor da passare alla fase di elaborazione.

      from sagemaker.sklearn.processing import SKLearnProcessor framework_version = "0.23-1" sklearn_processor = SKLearnProcessor( framework_version=framework_version, instance_type="ml.m5.xlarge", instance_count=processing_instance_count, base_job_name="sklearn-abalone-process", sagemaker_session=pipeline_session, role=role, )
    4. Creare una fase di elaborazione. Questa fase comprende  SKLearnProcessor, i canali di input e output e lo script preprocessing.py che hai creato. Questo è molto simile al run metodo di un'istanza del processore in SageMaker PythonSDK. Il parametro input_data passato a ProcessingStep è costituito dai dati di input della fase stessa. Questi dati di input vengono utilizzati dall'istanza del processore durante l'esecuzione.

      Notate "train i "validation canali con "test" nome e specificati nella configurazione di output per il processo di elaborazione. Fasi Properties come queste possono essere utilizzate nelle fasi successive e risolte nei rispettivi valori di runtime in fase di esecuzione.

      from sagemaker.processing import ProcessingInput, ProcessingOutput from sagemaker.workflow.steps import ProcessingStep processor_args = sklearn_processor.run( inputs=[ ProcessingInput(source=input_data, destination="/opt/ml/processing/input"), ], outputs=[ ProcessingOutput(output_name="train", source="/opt/ml/processing/train"), ProcessingOutput(output_name="validation", source="/opt/ml/processing/validation"), ProcessingOutput(output_name="test", source="/opt/ml/processing/test") ], code="abalone/preprocessing.py", ) step_process = ProcessingStep( name="AbaloneProcess", step_args=processor_args )

    Fase 4: Definire una fase di allenamento

    Questa sezione mostra come utilizzare l' SageMaker XGBoostalgoritmo per addestrare un modello sui dati di addestramento in uscita dalle fasi di elaborazione.

    Per definire una fase di addestramento
    1. Specifica il percorso del modello in cui desideri salvare i modelli dall'addestramento.

      model_path = f"s3://{default_bucket}/AbaloneTrain"
    2. Configura uno stimatore per l'XGBoostalgoritmo e il set di dati di input. Il tipo di istanza di addestramento viene passato allo strumento di valutazione. Un tipico script di allenamento:

      • carica i dati dai canali di input

      • configura l'allenamento con iperparametri

      • addestra un modello

      • salva un modello in model_dir modo che possa essere ospitato in un secondo momento

      SageMaker carica il modello su Amazon S3 sotto forma di model.tar.gz un processo di formazione alla fine del processo di formazione.

      from sagemaker.estimator import Estimator image_uri = sagemaker.image_uris.retrieve( framework="xgboost", region=region, version="1.0-1", py_version="py3", instance_type="ml.m5.xlarge" ) xgb_train = Estimator( image_uri=image_uri, instance_type="ml.m5.xlarge", instance_count=1, output_path=model_path, sagemaker_session=pipeline_session, role=role, ) xgb_train.set_hyperparameters( objective="reg:linear", num_round=50, max_depth=5, eta=0.2, gamma=4, min_child_weight=6, subsample=0.7, silent=0 )
    3. Crea un TrainingStep utilizzando l'istanza estimator e le proprietà di. ProcessingStep Passa il S3Uri canale "train" e "validation" di uscita alTrainingStep

      from sagemaker.inputs import TrainingInput from sagemaker.workflow.steps import TrainingStep train_args = xgb_train.fit( inputs={ "train": TrainingInput( s3_data=step_process.properties.ProcessingOutputConfig.Outputs[ "train" ].S3Output.S3Uri, content_type="text/csv" ), "validation": TrainingInput( s3_data=step_process.properties.ProcessingOutputConfig.Outputs[ "validation" ].S3Output.S3Uri, content_type="text/csv" ) }, ) step_train = TrainingStep( name="AbaloneTrain", step_args = train_args )

    Fase 5: Definizione di una fase di elaborazione per la valutazione del modello

    Questa sezione mostra come creare una fase di elaborazione per valutare l'accuratezza del modello. Il risultato di questa valutazione del modello viene utilizzato nella fase della condizione per determinare il percorso di esecuzione da intraprendere.

    Per definire una fase di elaborazione per la valutazione del modello
    1. Nella directory /abalone, crea un file denominato evaluation.py. Questo script viene usato in una fase di elaborazione per eseguire la valutazione del modello. Prende come input un modello addestrato e il set di dati di test, quindi produce un JSON file contenente le metriche di valutazione della classificazione.

      %%writefile abalone/evaluation.py import json import pathlib import pickle import tarfile import joblib import numpy as np import pandas as pd import xgboost from sklearn.metrics import mean_squared_error if __name__ == "__main__": model_path = f"/opt/ml/processing/model/model.tar.gz" with tarfile.open(model_path) as tar: tar.extractall(path=".") model = pickle.load(open("xgboost-model", "rb")) test_path = "/opt/ml/processing/test/test.csv" df = pd.read_csv(test_path, header=None) y_test = df.iloc[:, 0].to_numpy() df.drop(df.columns[0], axis=1, inplace=True) X_test = xgboost.DMatrix(df.values) predictions = model.predict(X_test) mse = mean_squared_error(y_test, predictions) std = np.std(y_test - predictions) report_dict = { "regression_metrics": { "mse": { "value": mse, "standard_deviation": std }, }, } output_dir = "/opt/ml/processing/evaluation" pathlib.Path(output_dir).mkdir(parents=True, exist_ok=True) evaluation_path = f"{output_dir}/evaluation.json" with open(evaluation_path, "w") as f: f.write(json.dumps(report_dict))
    2. Crea un'istanza di un ScriptProcessor che viene utilizzata per creare un ProcessingStep.

      from sagemaker.processing import ScriptProcessor script_eval = ScriptProcessor( image_uri=image_uri, command=["python3"], instance_type="ml.m5.xlarge", instance_count=1, base_job_name="script-abalone-eval", sagemaker_session=pipeline_session, role=role, )
    3. Crea un file ProcessingStep utilizzando l'istanza del processore, i canali di input e output e lo evaluation.py script. Passa:

      • la S3ModelArtifacts proprietà fin dalla fase step_train di formazione

      • il canale S3Uri di "test" uscita della fase di step_process lavorazione

      Questo è molto simile al run metodo di un'istanza del processore in SageMaker PythonSDK. 

      from sagemaker.workflow.properties import PropertyFile evaluation_report = PropertyFile( name="EvaluationReport", output_name="evaluation", path="evaluation.json" ) eval_args = script_eval.run( inputs=[ ProcessingInput( source=step_train.properties.ModelArtifacts.S3ModelArtifacts, destination="/opt/ml/processing/model" ), ProcessingInput( source=step_process.properties.ProcessingOutputConfig.Outputs[ "test" ].S3Output.S3Uri, destination="/opt/ml/processing/test" ) ], outputs=[ ProcessingOutput(output_name="evaluation", source="/opt/ml/processing/evaluation"), ], code="abalone/evaluation.py", ) step_eval = ProcessingStep( name="AbaloneEval", step_args=eval_args, property_files=[evaluation_report], )

    Fase 6: Definizione di una CreateModelStep trasformazione in batch

    Importante

    Si consiglia di utilizzare Fase del modello per creare modelli a partire dalla v2.90.0 di Python. SageMaker SDK CreateModelStepcontinuerà a funzionare nelle versioni precedenti di SageMaker PythonSDK, ma non è più supportato attivamente.

    Questa sezione mostra come creare un SageMaker modello a partire dall'output della fase di addestramento. Questo modello viene usato per la trasformazione in batch su un nuovo set di dati. Questo passaggio viene passato al passaggio della condizione e viene eseguito solo se il passaggio della condizione restituisce un risultato positivo. true

    Per definire una trasformazione CreateModelStep in batch
    1. Crea un SageMaker modello. Passa alla proprietà S3ModelArtifacts sin dalla fase di addestramento step_train.

      from sagemaker.model import Model model = Model( image_uri=image_uri, model_data=step_train.properties.ModelArtifacts.S3ModelArtifacts, sagemaker_session=pipeline_session, role=role, )
    2. Definite l'input del modello per il vostro SageMaker modello.

      from sagemaker.inputs import CreateModelInput inputs = CreateModelInput( instance_type="ml.m5.large", accelerator_type="ml.eia1.medium", )
    3. Crea il tuo CreateModelStep utilizzando l'istanza CreateModelInput e il SageMaker modello che hai definito.

      from sagemaker.workflow.steps import CreateModelStep step_create_model = CreateModelStep( name="AbaloneCreateModel", model=model, inputs=inputs, )

    Fase 7: TransformStep Definire una trasformazione in batch

    Questa sezione mostra come creare un TransformStep per eseguire una trasformazione in batch su un set di dati dopo l'addestramento del modello. Questo passaggio viene passato alla fase di condizione e viene eseguita solo se la fase della condizione restituisce un risultato uguale atrue.

    Definire una TransformStep trasformazione in batch
    1. Crea un'istanza di trasformazione con il tipo di istanza di calcolo, il numero di istanze e il bucket Amazon S3 di output desiderati. URI Passa alla proprietà ModelName sin dalla fase step_create_model CreateModel.

      from sagemaker.transformer import Transformer transformer = Transformer( model_name=step_create_model.properties.ModelName, instance_type="ml.m5.xlarge", instance_count=1, output_path=f"s3://{default_bucket}/AbaloneTransform" )
    2. Crea un TransformStep utilizzando l'istanza del transformer che hai definito e il parametro pipeline batch_data.

      from sagemaker.inputs import TransformInput from sagemaker.workflow.steps import TransformStep step_transform = TransformStep( name="AbaloneTransform", transformer=transformer, inputs=TransformInput(data=batch_data) )

    Fase 8: Definire un RegisterModel passaggio per creare un pacchetto modello

    Importante

    Si consiglia di utilizzare Fase del modello per registrare i modelli a partire dalla v2.90.0 di Python. SageMaker SDK RegisterModelcontinuerà a funzionare nelle versioni precedenti di SageMaker PythonSDK, ma non è più supportato attivamente.

    Questa sezione mostra come creare un'istanza diRegisterModel. Il risultato dell'esecuzione RegisterModel in una pipeline è un pacchetto modello. Un pacchetto di modelli è un'astrazione riutilizzabile di artefatti del modello che racchiude tutti gli ingredienti necessari per l'inferenza. Consiste in una specifica di inferenza che definisce l'immagine di inferenza da usare insieme a una posizione opzionale dei pesi del modello. Un gruppo di pacchetti di modelli è una raccolta di pacchetti di modelli. È possibile utilizzare a ModelPackageGroup for Pipelines per aggiungere una nuova versione e un nuovo pacchetto modello al gruppo per ogni esecuzione della pipeline. Per ulteriori informazioni sulla registrazione dei modelli, consulta Registrazione e implementazione di modelli con il Registro dei modelli.

    Questo passaggio viene passato al passaggio di condizione e viene eseguito solo se il passaggio di condizione restituisce un risultato positivo. true

    Per definire una RegisterModel fase per la creazione di un pacchetto modello
    • Costruisci una fase RegisterModel utilizzando l'istanza dello strumento di valutazione che hai usato per la fase di addestramento. Passa alla proprietà S3ModelArtifacts sin dalla fase di addestramento step_train e specifica un ModelPackageGroup. Pipelines lo crea ModelPackageGroup per te.

      from sagemaker.model_metrics import MetricsSource, ModelMetrics from sagemaker.workflow.step_collections import RegisterModel model_metrics = ModelMetrics( model_statistics=MetricsSource( s3_uri="{}/evaluation.json".format( step_eval.arguments["ProcessingOutputConfig"]["Outputs"][0]["S3Output"]["S3Uri"] ), content_type="application/json" ) ) step_register = RegisterModel( name="AbaloneRegisterModel", estimator=xgb_train, model_data=step_train.properties.ModelArtifacts.S3ModelArtifacts, content_types=["text/csv"], response_types=["text/csv"], inference_instances=["ml.t2.medium", "ml.m5.xlarge"], transform_instances=["ml.m5.xlarge"], model_package_group_name=model_package_group_name, approval_status=model_approval_status, model_metrics=model_metrics )

    Fase 9: Definizione di una fase di condizione per verificare l'accuratezza del modello

    A ConditionStep consente a Pipelines di supportare l'esecuzione condizionale nella pipeline in DAG base alla condizione delle proprietà del passaggio. In questo caso, desiderate registrare un pacchetto di modelli solo se la precisione di quel modello supera il valore richiesto. La precisione del modello è determinata dalla fase di valutazione del modello. Se la precisione supera il valore richiesto, la pipeline crea anche un SageMaker modello ed esegue la trasformazione in batch su un set di dati. Questa sezione mostra come definire la fase condizionale.

    Per definire una fase condizionale per verificare l'accuratezza del modello
    1. Definisci una condizione ConditionLessThanOrEqualTo utilizzando il valore di accuratezza trovato nell'output della fase di elaborazione della valutazione del modello, step_eval. Ottieni questo risultato utilizzando il file delle proprietà che hai indicizzato nella fase di elaborazione e il rispettivo valore dell'errore JSONPath quadratico medio,. "mse"

      from sagemaker.workflow.conditions import ConditionLessThanOrEqualTo from sagemaker.workflow.condition_step import ConditionStep from sagemaker.workflow.functions import JsonGet cond_lte = ConditionLessThanOrEqualTo( left=JsonGet( step_name=step_eval.name, property_file=evaluation_report, json_path="regression_metrics.mse.value" ), right=6.0 )
    2. Costruisci un ConditionStep. Passa la condizione ConditionEquals, quindi imposta le fasi di registrazione del pacchetto di modelli e di trasformazione in batch come fasi successive, se la condizione viene soddisfatta.

      step_cond = ConditionStep( name="AbaloneMSECond", conditions=[cond_lte], if_steps=[step_register, step_create_model, step_transform], else_steps=[], )

    Fase 10: creazione di una pipeline

    Ora che hai creato tutte le fasi, combinale in una pipeline.

    Per creare una pipeline
    1. Definisci quanto segue per la tua pipeline: name, parameters e steps. I nomi devono essere univoci all'interno di una coppia (account, region).

      Nota

      Una fase può apparire solo una volta nell'elenco delle fasi della pipeline o negli elenchi delle fasi if/else della fase condizionale. Non può apparire in entrambi.

      from sagemaker.workflow.pipeline import Pipeline pipeline_name = f"AbalonePipeline" pipeline = Pipeline( name=pipeline_name, parameters=[ processing_instance_count, model_approval_status, input_data, batch_data, ], steps=[step_process, step_train, step_eval, step_cond], )
    2. (Facoltativo) Esamina la definizione della JSON pipeline per assicurarti che sia ben formata.

      import json json.loads(pipeline.definition())

    Questa definizione della pipeline è pronta per essere inviata. SageMaker Nel prossimo tutorial, invii questa pipeline a SageMaker e ne inizi una esecuzione.

    Prossima fase: Esecuzione di una pipeline