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à.
Per orchestrare i flussi di lavoro con Amazon SageMaker Pipelines, devi generare un grafo aciclico diretto (DAG) sotto forma di definizione di pipeline JSON. Il DAG specifica le diverse fasi coinvolte nel processo di machine learning, come la preelaborazione dei dati, la formazione dei modelli, la valutazione e la distribuzione dei modelli, nonché le dipendenze e il flusso di dati tra queste fasi. L'argomento seguente mostra come generare una definizione di pipeline.
Puoi generare la definizione della tua pipeline JSON utilizzando l'SDK SageMaker Python o la funzionalità visiva drag-and-drop Pipeline Designer in Amazon Studio. SageMaker L'immagine seguente è una rappresentazione del DAG della pipeline che crei in questo tutorial:

La pipeline definita nelle sezioni seguenti 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
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 definizione JSON nel visual designer.
Crea una fase di elaborazione
Per creare una fase del processo di elaborazione dati, procedi come segue:
-
Apri la console Studio seguendo le istruzioni riportate inAvvia Amazon SageMaker Studio.
-
Nel riquadro di navigazione a sinistra, seleziona Pipelines.
-
Scegli Create (Crea) .
-
Scegli Vuoto.
-
Nella barra laterale sinistra, scegli Elabora dati e trascinali nell'area di disegno.
-
Nell'area di disegno, scegli la fase Elabora dati che hai aggiunto.
-
Per aggiungere un set di dati di input, scegli Aggiungi sotto Dati (input) nella barra laterale destra e seleziona un set di dati.
-
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.
-
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:
-
Nella barra laterale sinistra, scegli Train model e trascinalo sull'area di disegno.
-
Nell'area di disegno, scegli la fase del modello Train che hai aggiunto.
-
Per aggiungere un set di dati di input, scegli Aggiungi sotto Dati (input) nella barra laterale destra e seleziona un set di dati.
-
Per scegliere una posizione in cui salvare gli artefatti del modello, inserisci un URI Amazon S3 nel campo Posizione (URI S3) oppure scegli Browse S3 per accedere alla posizione di destinazione.
-
Completa i campi rimanenti nella barra laterale destra. Per informazioni sui campi di queste schede, consulta sagemaker.workflow.steps. TrainingStep
. -
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:
-
Nella barra laterale sinistra, scegli Registra modello e trascinalo nell'area di disegno.
-
Nell'area di disegno, scegli il passaggio Registra modello che hai aggiunto.
-
Per selezionare un modello da registrare, scegliete Aggiungi sotto Modello (input).
-
Scegliete Crea un gruppo di modelli per aggiungere il modello a un nuovo gruppo di modelli.
-
Completa i campi rimanenti nella barra laterale destra. Per informazioni sui campi di queste schede, consulta sagemaker.workflow.step_collections. RegisterModel
. -
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:
-
Nella barra laterale sinistra, scegli Deploy model (endpoint) e trascinalo nell'area di disegno.
-
Nell'area di disegno, scegli il passaggio Deploy model (endpoint) che hai aggiunto.
-
Per scegliere un modello da implementare, scegli Aggiungi sotto Modello (input).
-
Scegli il pulsante di opzione Crea endpoint per creare un nuovo endpoint.
-
Inserisci un nome e una descrizione per il tuo endpoint.
-
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.
-
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 JSON nell'ambiente locale. Puoi esportare la tua Pipeline come file di definizione JSON facendo clic sul pulsante Esporta nella parte inferiore del visual designer. Successivamente, per riprendere l'aggiornamento della Pipeline, carica il file di definizione JSON 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. Ciò conferisce al tuo ruolo le autorizzazioni per leggere e scrivere su Amazon S3 e creare processi di formazione, trasformazione in batch ed elaborazione nell'intelligenza artificiale. 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 frammento JSON per collegare questa policy al tuo ruolo. Sostituisci
<your-role-arn>
con l'ARN usato per creare l'istanza del notebook.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "
<your-role-arn>
" } ] } -
Affidati al responsabile del servizio di SageMaker intelligenza artificiale seguendo i passaggi descritti in Modifica di una politica di fiducia 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 sessione di SageMaker intelligenza artificiale utilizzando il seguente blocco di codice. Ciò restituisce l'ARN del ruolo per la sessione. Questo ARN del ruolo dovrebbe essere l'ARN del ruolo di 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
Le politiche IAM 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 policy IAM 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 SageMaker etichettare le risorse AI.
AWS politiche gestite per Amazon SageMaker AIche danno i permessi 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 notebook SageMaker AI per creare una pipeline che includa passaggi per:
-
preelaborazione
-
addestramento
-
valutazione
-
valutazione condizionale
-
registrazione del modello
Nota
È possibile utilizzare ExecutionVariablesExecutionVariables
viene risolto in fase di esecuzione. Ad esempio, ExecutionVariables.PIPELINE_EXECUTION_ID
viene risolto nell'ID dell'esecuzione corrente, che può essere utilizzato come identificatore univoco in diverse esecuzioni.
Passaggio 1: scarica il set di dati
Questo notebook utilizza il set di dati Abalone per UCI Machine Learning. 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
-
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)
-
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 MLOps Automazione con SageMaker progetti.
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
-
Crea una directory per lo script di elaborazione.
!mkdir -p abalone
-
Nella directory
/abalone
, crea un file denominatopreprocessing.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 utilizzascikit-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
esex
. -
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)
-
-
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, )
-
Creare una fase di elaborazione. Questa fase comprende
SKLearnProcessor
, i canali di input e output e lo scriptpreprocessing.py
che hai creato. È molto simile alrun
metodo di un'istanza del processore nell'SDK SageMaker AI Python. Il parametroinput_data
passato aProcessingStep
è 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. FasiProperties
come queste possono essere utilizzate nei passaggi successivi e risolvere i 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'XGBoostalgoritmo SageMaker AI per addestrare un modello sui dati di addestramento in uscita dalle fasi di elaborazione.
Per definire una fase di addestramento
-
Specifica il percorso del modello in cui desideri salvare i modelli dall'addestramento.
model_path = f"s3://{default_bucket}/AbaloneTrain"
-
Configura uno stimatore per l' XGBoost algoritmo 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 L'intelligenza artificiale 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 )
-
-
Crea un
TrainingStep
utilizzando l'istanza estimator e le proprietà di.ProcessingStep
Passa ilS3Uri
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
-
Nella directory
/abalone
, crea un file denominatoevaluation.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 file JSON 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))
-
Crea un'istanza di un
ScriptProcessor
che viene utilizzata per creare unProcessingStep
.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, )
-
Createne uno
ProcessingStep
utilizzando l'istanza del processore, i canali di input e output e loevaluation.py
script. Passa:-
la
S3ModelArtifacts
proprietà fin dalla fasestep_train
di formazione -
il canale
S3Uri
di"test"
uscita della fase distep_process
lavorazione
È molto simile al
run
metodo di un'istanza del processore nell'SDK SageMaker AI Python.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 trasformazione in CreateModelStep batch
Importante
Si consiglia di Fase del modello utilizzarlo per creare modelli a partire dalla v2.90.0 di Python SageMaker SDK. CreateModelStep
continuerà a funzionare nelle versioni precedenti di SageMaker Python SDK, ma non è più supportato attivamente.
Questa sezione mostra come creare un modello di SageMaker intelligenza artificiale a partire dall'output della fase di formazione. Questo modello viene usato per la trasformazione in batch su un nuovo set di dati. Questo passaggio viene passato alla fase di condizione e viene eseguita solo se la fase della condizione restituisce un risultato positivo. true
Per definire una trasformazione CreateModelStep in batch
-
Crea un modello di SageMaker intelligenza artificiale. Passa alla proprietà
S3ModelArtifacts
sin dalla fase di addestramentostep_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, )
-
Definisci l'input del modello per il tuo modello di SageMaker intelligenza artificiale.
from sagemaker.inputs import CreateModelInput inputs = CreateModelInput( instance_type="ml.m5.large", accelerator_type="ml.eia1.medium", )
-
Crea il tuo
CreateModelStep
utilizzando l'CreateModelInput
istanza del modello SageMaker AI 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 al passaggio della condizione e viene eseguito solo se il passaggio della condizione restituisce un risultato pari atrue
.
Definire una TransformStep trasformazione in batch
-
Crea un'istanza Transformer con il tipo di istanza di calcolo appropriato, il numero di istanze e l'URI del bucket Amazon S3 di output desiderati. Passa alla proprietà
ModelName
sin dalla fasestep_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" )
-
Crea un
TransformStep
utilizzando l'istanza del transformer che hai definito e il parametro pipelinebatch_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 una RegisterModel fase 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. RegisterModel
continuerà a funzionare nelle versioni precedenti di SageMaker Python SDK, ma non è più supportato attivamente.
Questa sezione mostra come creare un'istanza di. RegisterModel
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 del modello e distribuzione con Model Registry.
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 addestramentostep_train
e specifica unModelPackageGroup
. Pipelines lo creaModelPackageGroup
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 nel DAG della pipeline in 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 modello SageMaker AI 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
-
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 )
-
Costruisci un
ConditionStep
. Passa la condizioneConditionEquals
, 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
-
Definisci quanto segue per la tua pipeline:
name
,parameters
esteps
. 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], )
-
(Facoltativo) Esamina la definizione della pipeline JSON per assicurarti che sia ben formata.
import json json.loads(pipeline.definition())
Questa definizione della pipeline è pronta per essere inviata all'IA. SageMaker Nel prossimo tutorial, invii questa pipeline all' SageMaker IA e inizi una corsa.
Puoi anche usare boto3
{'Version': '2020-12-01', 'Metadata': {}, 'Parameters': [{'Name': 'ProcessingInstanceType', 'Type': 'String', 'DefaultValue': 'ml.m5.xlarge'}, {'Name': 'ProcessingInstanceCount', 'Type': 'Integer', 'DefaultValue': 1}, {'Name': 'TrainingInstanceType', 'Type': 'String', 'DefaultValue': 'ml.m5.xlarge'}, {'Name': 'ModelApprovalStatus', 'Type': 'String', 'DefaultValue': 'PendingManualApproval'}, {'Name': 'ProcessedData', 'Type': 'String', 'DefaultValue': '
S3_URL
', {'Name': 'InputDataUrl', 'Type': 'String', 'DefaultValue': 'S3_URL
', 'PipelineExperimentConfig': {'ExperimentName': {'Get': 'Execution.PipelineName'}, 'TrialName': {'Get': 'Execution.PipelineExecutionId'}}, 'Steps': [{'Name': 'ReadTrainDataFromFS', 'Type': 'Processing', 'Arguments': {'ProcessingResources': {'ClusterConfig': {'InstanceType': 'ml.m5.4xlarge', 'InstanceCount': 2, 'VolumeSizeInGB': 30}}, 'AppSpecification': {'ImageUri': 'IMAGE_URI
', 'ContainerArguments': [....]}, 'RoleArn': 'ROLE
', 'ProcessingInputs': [...], 'ProcessingOutputConfig': {'Outputs': [.....]}, 'StoppingCondition': {'MaxRuntimeInSeconds': 86400}}, 'CacheConfig': {'Enabled': True, 'ExpireAfter': '30d'}}, ... ... ... }
Prossima fase: Esecuzione di una pipeline