Sbloccare l’efficienza Sfruttare il potere dell’esecuzione selettiva in Amazon SageMaker Pipelines

Sfrutta l'esecuzione selettiva in Amazon SageMaker Pipelines per sbloccare l'efficienza

MLOps è una disciplina chiave che spesso supervisiona il percorso di produzione dei modelli di machine learning (ML). È naturale concentrarsi su un singolo modello che si desidera addestrare e distribuire. Tuttavia, nella realtà, probabilmente lavorerai con decine o addirittura centinaia di modelli e il processo potrebbe coinvolgere molteplici passaggi complessi. Pertanto, è importante avere l’infrastruttura necessaria per tracciare, addestrare, distribuire e monitorare modelli con complessità variabili su larga scala. Qui entra in gioco lo strumento MLOps. Lo strumento MLOps ti aiuta a costruire e semplificare in modo ripetibile e affidabile questi processi in un flusso di lavoro appositamente progettato per l’ML.

Amazon SageMaker Pipelines, una funzionalità di Amazon SageMaker, è un servizio di orchestrazione dei flussi di lavoro appositamente progettato per l’ML che ti aiuta ad automatizzare flussi di lavoro di ML end-to-end su larga scala. Semplifica lo sviluppo e la manutenzione dei modelli di ML fornendo una piattaforma centralizzata per orchestrare attività come la preparazione dei dati, l’addestramento del modello, l’ottimizzazione e la convalida. SageMaker Pipelines può aiutarti a ottimizzare la gestione dei flussi di lavoro, accelerare sperimentazioni e riaddestrare i modelli in modo più facile.

In questo post, mettiamo in evidenza una nuova e entusiasmante funzionalità di SageMaker Pipelines chiamata Esecuzione Selettiva. Questa nuova funzionalità ti consente di eseguire selettivamente porzioni specifiche del tuo flusso di lavoro di ML, ottenendo significativi risparmi di tempo e risorse di calcolo limitando l’esecuzione ai passaggi del flusso di lavoro inclusi nel perimetro e eliminando la necessità di eseguire passaggi al di fuori del perimetro. Inoltre, esploriamo vari casi d’uso in cui diventa evidente il vantaggio nell’utilizzare l’Esecuzione Selettiva, ulteriormente consolidando la sua proposta di valore.

Panoramica della soluzione

SageMaker Pipelines continua a innovare l’esperienza degli sviluppatori con il rilascio dell’Esecuzione Selettiva. Ora i costruttori di ML hanno la possibilità di scegliere passi specifici da eseguire all’interno di un flusso di lavoro, eliminando la necessità di eseguire nuovamente l’intero flusso di lavoro. Questa funzionalità ti consente di eseguire nuovamente sezioni specifiche del flusso di lavoro modificando i parametri di runtime associati ai passi selezionati.

È importante notare che i passi selezionati possono dipendere dai risultati dei passi non selezionati. In tali casi, gli output di questi passi non selezionati vengono riutilizzati da un’esecuzione di riferimento della versione corrente del flusso di lavoro. Ciò significa che l’esecuzione di riferimento deve essere già completata. L’esecuzione di riferimento predefinita è l’ultima esecuzione della versione corrente del flusso di lavoro, ma è anche possibile scegliere di utilizzare un’altra esecuzione della versione corrente del flusso di lavoro come riferimento.

Lo stato complessivo dell’esecuzione di riferimento deve essere Riuscito, Non riuscito o Interrotto. Non può essere In esecuzione quando l’Esecuzione Selettiva tenta di utilizzarne gli output. Quando si utilizza l’Esecuzione Selettiva, è possibile scegliere qualsiasi numero di passi da eseguire, purché formino una porzione continua del flusso di lavoro.

Il diagramma seguente illustra il comportamento del flusso di lavoro con una esecuzione completa.

Il diagramma seguente illustra il comportamento del flusso di lavoro utilizzando l’Esecuzione Selettiva.

Nelle sezioni seguenti, mostriamo come utilizzare l’Esecuzione Selettiva per vari scenari, inclusi flussi di lavoro complessi in Grafi Diretti Aciclici (DAG) del flusso di lavoro.

Prerequisiti

Per iniziare a sperimentare con l’Esecuzione Selettiva, è necessario configurare prima i seguenti componenti del tuo ambiente SageMaker:

  • SageMaker Python SDK – Assicurati di avere installata nell’ambiente Python il SageMaker Python SDK aggiornato. Puoi eseguire il seguente comando dal tuo notebook o terminale per installare o aggiornare la versione del SageMaker Python SDK a 2.162.0 o successiva: python3 -m pip install sagemaker>=2.162.0 o pip3 install sagemaker>=2.162.0.
  • Accesso a SageMaker Studio (opzionale) – Amazon SageMaker Studio può essere utile per visualizzare le esecuzioni del flusso di lavoro e interagire con gli ARN del flusso di lavoro preesistenti in modo visuale. Se non hai accesso a SageMaker Studio o stai utilizzando notebook on-demand o altre IDE, puoi comunque seguire questo post e interagire con gli ARN del flusso di lavoro utilizzando il Python SDK.

Il codice di esempio per una panoramica completa è disponibile nel repository GitHub.

Configurazione

Con il SDK Python sagemaker>=1.162.0, abbiamo introdotto la classe SelectiveExecutionConfig come parte del modulo sagemaker.workflow.selective_execution_config. La funzionalità di Esecuzione Selettiva si basa su un ARN di pipeline che è stato precedentemente contrassegnato come Riuscito, Fallito o Interrotto. Il seguente frammento di codice mostra come importare la classe SelectiveExecutionConfig, recuperare l’ARN della pipeline di riferimento e ottenere i passaggi della pipeline associati e i parametri di esecuzione:

import boto3
from sagemaker.workflow.pipeline import Pipeline
from sagemaker.workflow.selective_execution_config import SelectiveExecutionConfig


sm_client = boto3.client('sagemaker')
# specificare il nome della tua pipeline di esempio
pipeline_name = "AbalonePipeline"
# filtrare gli ARN delle esecuzioni precedenti di pipeline riuscite
pipeline_executions = [_exec
    for _exec in Pipeline(name=pipeline_name).list_executions()['PipelineExecutionSummaries'] 
    if _exec['PipelineExecutionStatus'] == "Succeeded"
]
# ottenere l'ultimo ARN di esecuzione riuscito
latest_pipeline_arn = pipeline_executions[0]['PipelineExecutionArn']
print(latest_pipeline_arn)
>>> arn:aws:sagemaker:us-east-1:123123123123:pipeline/AbalonePipeline/execution/x62pbar3gs6h

# elencare tutti i passaggi della tua pipeline di esempio
execution_steps = sm_client.list_pipeline_execution_steps(
    PipelineExecutionArn=latest_pipeline_arn
)['PipelineExecutionSteps']
print(execution_steps)
>>> 
[{'StepName': 'Abalone-Preprocess',
  'StartTime': datetime.datetime(2023, 6, 27, 4, 41, 30, 519000, tzinfo=tzlocal()),
  'EndTime': datetime.datetime(2023, 6, 27, 4, 41, 30, 986000, tzinfo=tzlocal()),
  'StepStatus': 'Succeeded',
  'AttemptCount': 0,
  'Metadata': {'ProcessingJob': {'Arn': 'arn:aws:sagemaker:us-east-1:123123123123:processing-job/pipelines-fvsmu7m7ki3q-Abalone-Preprocess-d68CecvHLU'}},
  'SelectiveExecutionResult': {'SourcePipelineExecutionArn': 'arn:aws:sagemaker:us-east-1:123123123123:pipeline/AbalonePipeline/execution/ksm2mjwut6oz'}},
 {'StepName': 'Abalone-Train',
  'StartTime': datetime.datetime(2023, 6, 27, 4, 41, 31, 320000, tzinfo=tzlocal()),
  'EndTime': datetime.datetime(2023, 6, 27, 4, 43, 58, 224000, tzinfo=tzlocal()),
  'StepStatus': 'Succeeded',
  'AttemptCount': 0,
  'Metadata': {'TrainingJob': {'Arn': 'arn:aws:sagemaker:us-east-1:123123123123:training-job/pipelines-x62pbar3gs6h-Abalone-Train-PKhAc1Q6lx'}}},
 {'StepName': 'Abalone-Evaluate',
  'StartTime': datetime.datetime(2023, 6, 27, 4, 43, 59, 40000, tzinfo=tzlocal()),
  'EndTime': datetime.datetime(2023, 6, 27, 4, 57, 43, 76000, tzinfo=tzlocal()),
  'StepStatus': 'Succeeded',
  'AttemptCount': 0,
  'Metadata': {'ProcessingJob': {'Arn': 'arn:aws:sagemaker:us-east-1:123123123123:processing-job/pipelines-x62pbar3gs6h-Abalone-Evaluate-vmkZDKDwhk'}}},
 {'StepName': 'Abalone-MSECheck',
  'StartTime': datetime.datetime(2023, 6, 27, 4, 57, 43, 821000, tzinfo=tzlocal()),
  'EndTime': datetime.datetime(2023, 6, 27, 4, 57, 44, 124000, tzinfo=tzlocal()),
  'StepStatus': 'Succeeded',
  'AttemptCount': 0,
  'Metadata': {'Condition': {'Outcome': 'True'}}}]

# elencare tutti i parametri configurabili della pipeline
# i parametri possono essere modificati durante l'esecuzione selettiva
parameters = sm_client.list_pipeline_parameters_for_execution(
    PipelineExecutionArn=latest_pipeline_arn
)['PipelineParameters']
print(parameters)
>>> 
[{'Name': 'XGBNumRounds', 'Value': '120'},
 {'Name': 'XGBSubSample', 'Value': '0.9'},
 {'Name': 'XGBGamma', 'Value': '2'},
 {'Name': 'TrainingInstanceCount', 'Value': '1'},
 {'Name': 'XGBMinChildWeight', 'Value': '4'},
 {'Name': 'XGBETA', 'Value': '0.25'},
 {'Name': 'ApprovalStatus', 'Value': 'PendingManualApproval'},
 {'Name': 'ProcessingInstanceCount', 'Value': '1'},
 {'Name': 'ProcessingInstanceType', 'Value': 'ml.t3.medium'},
 {'Name': 'MseThreshold', 'Value': '6'},
 {'Name': 'ModelPath',
  'Value': 's3://sagemaker-us-east-1-123123123123/Abalone/models/'},
 {'Name': 'XGBMaxDepth', 'Value': '12'},
 {'Name': 'TrainingInstanceType', 'Value': 'ml.c5.xlarge'},
 {'Name': 'InputData',
  'Value': 's3://sagemaker-us-east-1-123123123123/sample-dataset/abalone/abalone.csv'}]

Casi d’uso

In questa sezione, presentiamo alcuni scenari in cui l’Esecuzione Selettiva può potenzialmente risparmiare tempo e risorse. Utilizziamo un flusso di pipeline tipico, che include passaggi come l’estrazione dei dati, l’addestramento, la valutazione, la registrazione del modello e il deployment, come riferimento per dimostrare i vantaggi dell’Esecuzione Selettiva.

SageMaker Pipelines ti consente di definire parametri di runtime per l’esecuzione della tua pipeline utilizzando i parametri della pipeline. Quando viene avviata una nuova esecuzione, di solito esegue l’intera pipeline dall’inizio alla fine. Tuttavia, se la memorizzazione nella cache dei passaggi è abilitata, SageMaker Pipelines cercherà di trovare un’esecuzione precedente del passaggio corrente della pipeline con gli stessi valori degli attributi. Se viene trovata una corrispondenza, SageMaker Pipelines utilizzerà gli output dell’esecuzione precedente anziché ricalcolare il passaggio. Nota che anche con la memorizzazione nella cache dei passaggi abilitata, SageMaker Pipelines eseguirà comunque l’intero flusso di lavoro fino alla fine per impostazione predefinita.

Con il rilascio della funzionalità di Esecuzione Selettiva, ora è possibile eseguire nuovamente l’intero flusso di lavoro della pipeline o eseguire selettivamente un sottoinsieme di passaggi utilizzando un ARN della pipeline precedente. Ciò può essere fatto anche senza la memorizzazione nella cache dei passaggi abilitata. I seguenti casi d’uso illustrano i vari modi in cui è possibile utilizzare l’Esecuzione Selettiva.

Caso d’uso 1: Esegui un singolo passaggio

Gli scienziati dei dati spesso si concentrano sulla fase di addestramento di una pipeline MLOps e non vogliono preoccuparsi delle fasi di preprocessing o deployment. L’Esecuzione Selettiva consente agli scienziati dei dati di concentrarsi solo sul passaggio di addestramento e di modificare i parametri di addestramento o gli iperparametri al volo per migliorare il modello. Ciò può risparmiare tempo e ridurre i costi perché le risorse di calcolo vengono utilizzate solo per l’esecuzione dei passaggi della pipeline selezionati dall’utente. Vedi il seguente codice:

# seleziona un arn di pipeline di riferimento e il passaggio di sottoinsieme da eseguire
configurazione_esecuzione_selettiva = SelectiveExecutionConfig(
    arn_esecuzione_pipeline_sorgente="arn:aws:sagemaker:us-east-1:123123123123:pipeline/AbalonePipeline/execution/9e3ljoql7s0n",
    passaggi_selezionati=["Abalone-Train"]
)

# avvia l'esecuzione del sottoinsieme della pipeline
esecuzione_selettiva = pipeline.start(
    configurazione_esecuzione_selettiva=configurazione_esecuzione_selettiva,
    parametri={
        "XGBNumRounds": 120,
        "XGBSubSample": 0.9,
        "XGBGamma": 2,
        "XGBMinChildWeight": 4,
        "XGBETA": 0.25,
        "XGBMaxDepth": 12
    }
)

Le seguenti figure illustrano la pipeline con un passaggio in corso e poi completato.

Caso d’uso 2: Esegui più passaggi continui della pipeline

Continuando con il caso d’uso precedente, uno scienziato dei dati desidera addestrare un nuovo modello e valutarne le prestazioni rispetto a un dataset di test di riferimento. Questa valutazione è fondamentale per garantire che il modello soddisfi rigide linee guida per i test di accettazione dell’utente (UAT) o il deployment in produzione. Tuttavia, lo scienziato dei dati non vuole eseguire l’intero flusso di lavoro della pipeline o effettuare il deployment del modello. Possono utilizzare l’Esecuzione Selettiva per concentrarsi esclusivamente sui passaggi di addestramento e valutazione, risparmiando tempo e risorse pur ottenendo i risultati di validazione necessari:

# seleziona un arn di pipeline di riferimento e i passaggi di sottoinsieme da eseguire
configurazione_esecuzione_selettiva = SelectiveExecutionConfig(
    arn_esecuzione_pipeline_sorgente="arn:aws:sagemaker:us-east-1:123123123123:pipeline/AbalonePipeline/execution/9e3ljoql7s0n",
    passaggi_selezionati=["Abalone-Train", "Abalone-Evaluate"]
)

# avvia l'esecuzione del sottoinsieme della pipeline
esecuzione_selettiva = pipeline.start(
    configurazione_esecuzione_selettiva=configurazione_esecuzione_selettiva,
    parametri={
        "ProcessingInstanceType": "ml.t3.medium",
        "XGBNumRounds": 120,
        "XGBSubSample": 0.9,
        "XGBGamma": 2,
        "XGBMinChildWeight": 4,
        "XGBETA": 0.25,
        "XGBMaxDepth": 12
    }
)

Caso d’uso 3: Aggiornare e ripetere i passaggi del pipeline falliti

È possibile utilizzare l’Esecuzione Selettiva per ripetere i passaggi falliti all’interno di un pipeline o riprendere l’esecuzione di un pipeline a partire da un passaggio fallito in poi. Questo può essere utile per risolvere i problemi e il debug dei passaggi falliti perché consente agli sviluppatori di concentrarsi sugli specifici problemi da affrontare. Ciò può portare a una risoluzione dei problemi più efficiente e a tempi di iterazione più veloci. L’esempio seguente illustra come è possibile scegliere di ripetere solo il passaggio fallito di un pipeline.

# seleziona un precedente arn del pipeline fallita
selective_execution_config = SelectiveExecutionConfig(
    source_pipeline_execution_arn="arn:aws:sagemaker:us-east-1:123123123123:pipeline/AbalonePipeline/execution/fvsmu7m7ki3q",
    selected_steps=["Abalone-Evaluate"]
)

# avvia l'esecuzione del sottoinsieme del pipeline fallito
select_execution = pipeline.start(
    selective_execution_config=selective_execution_config
)

In alternativa, un data scientist può riprendere l’esecuzione di un pipeline dal passaggio fallito fino alla fine del workflow specificando il passaggio fallito e tutti i passaggi successivi nel SelectiveExecutionConfig.

Caso d’uso 4: Copertura del pipeline

In alcuni pipeline, alcuni rami vengono eseguiti meno frequentemente degli altri. Ad esempio, potrebbe esserci un ramo che viene eseguito solo quando si verifica una specifica condizione. È importante testare accuratamente questi rami eseguiti meno frequentemente per garantire che funzionino come previsto quando si verifica un errore. Testando questi rami eseguiti meno frequentemente, gli sviluppatori possono verificare che il loro pipeline sia robusto e che i meccanismi di gestione degli errori mantengano efficacemente il flusso di lavoro desiderato e producano risultati affidabili.

selective_execution_config = SelectiveExecutionConfig(
    source_pipeline_execution_arn="arn:aws:sagemaker:us-east-1:123123123123:pipeline/AbalonePipeline/execution/9e3ljoql7s0n",
    selected_steps=["Abalone-Train", "Abalone-Evaluate", "Abalone-MSECheck", "Abalone-FailNotify"]
)

Conclusione

In questo post, abbiamo discusso della funzionalità di Esecuzione Selettiva di SageMaker Pipelines, che consente di eseguire selettivamente specifici passaggi dei flussi di lavoro di Machine Learning. Questa capacità porta a significativi risparmi di tempo e risorse computazionali. Abbiamo fornito del codice di esempio nel repository GitHub che illustra come utilizzare l’Esecuzione Selettiva e abbiamo presentato vari scenari in cui può essere vantaggiosa per gli utenti. Se desideri saperne di più sull’Esecuzione Selettiva, consulta la nostra Guida per lo Sviluppatore e la Guida di Riferimento dell’API.

Per esplorare più in dettaglio i passaggi disponibili all’interno del flusso di lavoro di SageMaker Pipelines, consulta Amazon SageMaker Model Building Pipeline e SageMaker Workflows. Inoltre, puoi trovare ulteriori esempi che mostrano diversi casi d’uso e approcci di implementazione utilizzando SageMaker Pipelines nel repository di esempi AWS SageMaker Examples. Queste risorse possono migliorare ulteriormente la tua comprensione e aiutarti a sfruttare appieno il potenziale di SageMaker Pipelines ed Esecuzione Selettiva nei tuoi progetti di Machine Learning attuali e futuri.