View a markdown version of this page

Definizione di una pipeline - Amazon SageMaker AI

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

Definizione di una pipeline

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 ML, come la pre-elaborazione dei dati, l’addestramento dei modelli, la valutazione del modello e l’implementazione dei modelli, nonché le dipendenze e il flusso di dati tra queste fasi. L’argomento seguente mostra come generare una definizione della pipeline.

Puoi generare la definizione della tua pipeline JSON utilizzando l'SDK SageMaker Python o la funzionalità visiva drag-and-drop Pipeline Designer di Amazon Studio. SageMaker L’immagine seguente è una rappresentazione del DAG della pipeline creato in questo tutorial:

Screenshot dell’interfaccia visiva con trascinamento per le pipeline in Studio.

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 includa il contenuto di questo tutorial, consulta Orchestrating Jobs with Amazon Model Building Pipelines. SageMaker

Nota

Puoi fare riferimento alla posizione del modello come proprietà della fase di addestramento, come mostrato nella pipeline di esempio end-to-end in Github. CustomerChurn

Argomenti

    La procedura dettagliata seguente illustra le fasi per creare una pipeline barebone utilizzando la funzionalità con trascinamento Pipeline Designer. Se devi mettere in pausa o terminare la sessione di modifica della pipeline nel designer visivo, fai clic sull’opzione Esporta. Questa operazione consente di scaricare la definizione corrente della pipeline nell’ambiente locale. Per riprendere il processo di modifica della pipeline in un secondo momento, puoi importare lo stesso file di definizione JSON nel designer visivo.

    Creazione di una fase di elaborazione

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

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

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

    3. Scegli Create (Crea).

    4. Scegli Vuoto.

    5. Nella barra laterale sinistra, scegli Elaborazione di dati e trascinalo sul canvas.

    6. Nel canvas, scegli la fase Elaborazione di dati che hai aggiunto.

    7. Per aggiungere un set di dati di input, scegli Aggiungi in 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 in 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.

    Creazione di una fase di addestramento

    Per configurare una fase di addestramento dei modelli, procedi come descritto di seguito:

    1. Nella barra laterale sinistra, scegli Addestramento di un modello e trascinalo sul canvas.

    2. Nel canvas, scegli la fase Addestramento di un modello che hai aggiunto.

    3. Per aggiungere un set di dati di input, scegli Aggiungi in 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 URI Amazon S3 nel campo Posizione (URI S3) oppure scegli Sfoglia S3 per passare 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. Fai clic e trascina il cursore dalla fase Elaborazione di dati che hai aggiunto nella sezione precedente alla fase Addestramento di un modello per creare un arco che colleghi le due fasi.

    Creazione di un pacchetto di modelli con una fase Registrazione di un modello

    Per creare un pacchetto di modelli con una fase di registrazione del modello, procedi come descritto di seguito:

    1. Nella barra laterale sinistra, scegli Registrazione di un modello e trascinalo sul canvas.

    2. Nel canvas, scegli la fase Registrazione di un modello che hai aggiunto.

    3. Per selezionare un modello da registrare, scegli Aggiungi in Modello (input).

    4. Scegli 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. Fai clic e trascina il cursore dalla fase Addestramento di un modello che hai aggiunto nella sezione precedente alla fase Registrazione di un modello per creare un arco che colleghi le due fasi.

    Implementazione del modello su un endpoint con una fase Implementazione di un modello (endpoint)

    Per implementare il modello utilizzando una fase di implementazione del modello, procedi come descritto di seguito:

    1. Nella barra laterale sinistra, scegli Implementazione di un modello (endpoint) e trascinalo sul canvas.

    2. Nel canvas, scegli la fase Implementazione di un modello (endpoint) che hai aggiunto.

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

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

    5. Immetti un nome e una descrizione per l’endpoint.

    6. Fai clic e trascina il cursore dalla fase Registrazione di un modello che hai aggiunto nella sezione precedente alla fase Implementazione di un modello (endpoint) per creare un arco che colleghi le due fasi.

    7. Completa i campi rimanenti nella barra laterale destra.

    Definizione dei parametri della pipeline

    Puoi configurare un set di parametri della 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 designer visivo.

    Salvataggio della pipeline

    Dopo aver inserito tutte le informazioni richieste per creare la pipeline, fai clic su Salva nella parte inferiore del designer visivo. In questo modo la pipeline viene convalidata per eventuali errori al runtime e ti viene inviata una notifica. L’operazione Salva non riesce finché non correggi tutti gli errori segnalati dai controlli di convalida automatici. Per 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 designer visivo. Successivamente, per riprendere l’aggiornamento della pipeline, carica il file di definizione JSON facendo clic sul pulsante Importa.

    Prerequisiti

    Per eseguire il tutorial seguente, procedi come descritto di seguito:

    • Configura l'istanza del notebook come illustrato in Creare un'istanza del notebook. Questo dà al tuo ruolo le autorizzazioni per leggere e scrivere su Amazon S3 e creare processi di formazione, trasformazione in batch ed elaborazione in AI. 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. Sostituiscilo <your-role-arn> con l'ARN utilizzato per creare l'istanza del notebook.

      JSON
      { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "arn:aws:iam::111122223333:role/role-name" } ] }
    • Affidati al responsabile del servizio SageMaker AI seguendo i passaggi descritti in Modificare 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" }

    Configurare l'ambiente

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

    import boto3 import sagemaker from sagemaker.core.workflow.pipeline_context import PipelineSession from sagemaker.core.helper.session_helper import Session, get_execution_role region = boto3.Session().region_name sagemaker_session = Session() role = 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 applicano automaticamente tag a tutte le risorse che creano. Se una policy IAM consente a Studio e Studio Classic di creare risorse ma non consente il tagging, possono verificarsi errori durante il tentativo di creare risorse. AccessDenied Per ulteriori informazioni, consulta Fornisci le autorizzazioni per etichettare SageMaker le risorse AI.

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

    Esegui i passaggi seguenti dall'istanza del notebook SageMaker AI per creare una pipeline che includa passaggi per la preelaborazione, la formazione, la valutazione, la valutazione condizionale e la registrazione del modello.

    Nota

    Puoi utilizzare ExecutionVariables la funzione Join per specificare la posizione di output.

    Fase 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 determinare. 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. Definisci i parametri delle pipeline

    from sagemaker.core.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. Definisci una fase di elaborazione per l’ingegneria delle caratteristiche

    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. Create un'istanza di un processore da passare alla fase di elaborazione.

      from sagemaker.core.processing import Processor from sagemaker.core import image_uris framework_version = "0.23-1" sklearn_image_uri = image_uris.retrieve( framework="sklearn", region=region, version=framework_version, instance_type="ml.m5.xlarge" ) sklearn_processor = Processor( image_uri=sklearn_image_uri, instance_type="ml.m5.xlarge", instance_count=processing_instance_count, base_job_name="sklearn-abalone-process", sagemaker_session=pipeline_session, role=role, )
    2. Creare una fase di elaborazione.

      from sagemaker.core.processing import ProcessingInput, ProcessingOutput from sagemaker.mlops.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. Definisci una fase di addestramento

    Questa sezione mostra come utilizzare l'algoritmo SageMaker AI XGBoost 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 di addestramento per l'algoritmo XGBoost e il set di dati di input.

      from sagemaker.train import ModelTrainer from sagemaker.train.configs import Compute, OutputDataConfig from sagemaker.core import image_uris image_uri = image_uris.retrieve( framework="xgboost", region=region, version="1.0-1", py_version="py3", instance_type="ml.m5.xlarge" ) xgb_train = ModelTrainer( training_image=image_uri, compute=Compute(instance_type="ml.m5.xlarge", instance_count=1), output_data_config=OutputDataConfig(s3_output_path=model_path), hyperparameters={ "objective": "reg:linear", "num_round": "50", "max_depth": "5", "eta": "0.2", "gamma": "4", "min_child_weight": "6", "subsample": "0.7", "silent": "0" }, sagemaker_session=pipeline_session, role=role, )
    3. Crea un TrainingStep utilizzando l'istanza di addestramento e le proprietà di. ProcessingStep

      from sagemaker.train.configs import InputData from sagemaker.mlops.workflow.steps import TrainingStep train_args = xgb_train.train( input_data_config=[ InputData( channel_name="train", data_source=step_process.properties.ProcessingOutputConfig.Outputs[ "train" ].S3Output.S3Uri, content_type="text/csv" ), InputData( channel_name="validation", data_source=step_process.properties.ProcessingOutputConfig.Outputs[ "validation" ].S3Output.S3Uri, content_type="text/csv" ) ], ) step_train = TrainingStep(name="AbaloneTrain", step_args=train_args)

    Fase 5. Definisci una fase di elaborazione per la valutazione del modello

    Questa sezione mostra come creare una fase di elaborazione per valutare l'accuratezza del modello.

    Per definire una fase di elaborazione per la valutazione del modello
    1. Crea un'istanza di a Processor per la valutazione.

      from sagemaker.core.processing import Processor script_eval = Processor( 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, )
    2. Createne una ProcessingStep utilizzando l'istanza del processore, i canali di input e output e lo evaluation.py script.

      from sagemaker.core.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: Definire una trasformazione CreateModelStep per batch

    Questa sezione mostra come creare un modello di SageMaker intelligenza artificiale dall'output della fase di addestramento.

    Per definire una CreateModelStep trasformazione in batch
    • Crea un modello SageMaker AI e una fase del modello.

      from sagemaker.serve import ModelBuilder from sagemaker.mlops.workflow.model_step import ModelStep model_builder = ModelBuilder( image_uri=image_uri, s3_model_data_url=step_train.properties.ModelArtifacts.S3ModelArtifacts, role_arn=role, sagemaker_session=pipeline_session, ) step_create_model = ModelStep( name="AbaloneCreateModel", step_args=model_builder.build(), )

    Fase 7: Definire una trasformazione in batch TransformStep per eseguire

    Questa sezione mostra come creare un TransformStep per eseguire una trasformazione in batch su un set di dati dopo l'addestramento del modello.

    Definire una trasformazione TransformStep in batch da eseguire
    • Crea un'istanza del trasformatore e unTransformStep.

      from sagemaker.core.transformer import Transformer from sagemaker.mlops.workflow.steps import TransformStep transformer = Transformer( model_name=step_create_model.properties.ModelName, instance_type="ml.m5.xlarge", instance_count=1, output_path=f"s3://{default_bucket}/AbaloneTransform", sagemaker_session=pipeline_session, ) transform_args = transformer.transform(data=batch_data) step_transform = TransformStep( name="AbaloneTransform", step_args=transform_args, )

    Fase 8: Definire una RegisterModel fase per creare un pacchetto di modelli

    Questa sezione mostra come registrare un modello. Il risultato è un pacchetto modello per l'inferenza.

    Per definire una fase di registrazione del modello per creare un pacchetto di modelli
    • Costruisci una fase di registrazione del modello.

      from sagemaker.core.model_metrics import MetricsSource, ModelMetrics from sagemaker.mlops.workflow.model_step import ModelStep from sagemaker.serve import ModelBuilder model_metrics = ModelMetrics( model_statistics=MetricsSource( s3_uri="{}/evaluation.json".format( step_eval.arguments["ProcessingOutputConfig"]["Outputs"][0]["S3Output"]["S3Uri"] ), content_type="application/json" ) ) model_builder = ModelBuilder( image_uri=image_uri, s3_model_data_url=step_train.properties.ModelArtifacts.S3ModelArtifacts, role_arn=role, sagemaker_session=pipeline_session, ) register_args = model_builder.register( 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 ) step_register = ModelStep( name="AbaloneRegisterModel", step_args=register_args, )

    Fase 9. Definisci una fase condizionale per verificare l’accuratezza del modello

    ConditionStep consente a Pipelines di supportare l’esecuzione condizionale nel DAG della pipeline in base alla condizione nelle proprietà delle fasi.

    Per definire una fase condizionale per verificare l'accuratezza del modello
    • Definisci una condizione e costruisci una. ConditionStep

      from sagemaker.core.workflow.conditions import ConditionLessThanOrEqualTo from sagemaker.mlops.workflow.condition_step import ConditionStep from sagemaker.core.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 ) 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 tutti i passaggi, combinali in una pipeline.

    Come creare una pipeline
    1. Definisci quanto segue per la tua pipeline: name, parameters e steps.

      from sagemaker.mlops.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 pipeline JSON per assicurarti che sia ben formata.

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

    Questa definizione di pipeline è pronta per essere inviata all' SageMaker IA. Nel prossimo tutorial, invierai questa pipeline all' SageMaker IA e inizierai una corsa.

    Puoi anche utilizzare boto3 o CloudFormation per creare una pipeline. La creazione di una pipeline richiede la definizione della pipeline, che è un oggetto JSON che definisce ogni fase della pipeline. L' SageMaker SDK offre un modo semplice per creare la definizione della pipeline, che puoi utilizzare con una qualsiasi delle API menzionate in precedenza per creare la pipeline stessa. Senza utilizzare l'SDK, gli utenti devono scrivere la definizione JSON grezza per creare la pipeline senza nessuno dei controlli di errore forniti dall'SDK Python. SageMaker Per vedere lo schema per la definizione JSON della pipeline, vedi AI Pipeline Definition JSON Schema. SageMaker Il seguente esempio di codice mostra un esempio di oggetto JSON per la definizione di una pipeline SageMaker AI:

    {'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