Pianifica i processi dei notebook Amazon SageMaker e gestisci i flussi di lavoro dei notebook in più fasi utilizzando le API | Servizi Web di Amazon

Pianifica i processi dei notebook Amazon SageMaker e gestisci i flussi di lavoro dei notebook in più fasi utilizzando le API | Servizi Web di Amazon

Amazon Sage Maker Studio fornisce una soluzione completamente gestita che consente ai data scientist di creare, addestrare e distribuire in modo interattivo modelli di machine learning (ML). Lavori notebook Amazon SageMaker consentire ai data scientist di eseguire i propri notebook su richiesta o in base a una pianificazione con pochi clic in SageMaker Studio. Con questo lancio, puoi eseguire i notebook a livello di codice come processi utilizzando le API fornite da Pipeline di Amazon SageMaker, la funzionalità di orchestrazione del flusso di lavoro ML di Amazon Sage Maker. Inoltre, puoi creare un flusso di lavoro ML in più fasi con più notebook dipendenti utilizzando queste API.

SageMaker Pipelines è uno strumento nativo di orchestrazione del flusso di lavoro per la creazione di pipeline ML che sfruttano l'integrazione diretta di SageMaker. Ogni pipeline SageMaker è composta da passi, che corrispondono a compiti individuali come l'elaborazione, la formazione o l'utilizzo dell'elaborazione dei dati Amazon EMR. I processi notebook SageMaker sono ora disponibili come tipo di passaggio integrato nelle pipeline SageMaker. È possibile utilizzare questo passaggio del processo notebook per eseguire facilmente i notebook come processi con solo poche righe di codice utilizzando il file SDK Python di Amazon SageMaker. Inoltre, è possibile unire più taccuini dipendenti insieme per creare un flusso di lavoro sotto forma di grafici aciclici diretti (DAG). È quindi possibile eseguire questi processi di notebook o DAG e gestirli e visualizzarli utilizzando SageMaker Studio.

I data scientist attualmente utilizzano SageMaker Studio per sviluppare in modo interattivo i propri notebook Jupyter e quindi utilizzano i processi notebook SageMaker per eseguire questi notebook come processi pianificati. Questi lavori possono essere eseguiti immediatamente o secondo una pianificazione temporale ricorrente senza la necessità che i dataworker eseguano il refactoring del codice come moduli Python. Alcuni casi d'uso comuni per eseguire questa operazione includono:

  • Esecuzione di notebook di lunga durata in background
  • Eseguire regolarmente l'inferenza del modello per generare report
  • Passare dalla preparazione di piccoli set di dati campione all'utilizzo di big data su scala petabyte
  • Riqualificazione e distribuzione dei modelli con una certa cadenza
  • Pianificazione dei lavori per la qualità del modello o il monitoraggio della deriva dei dati
  • Esplorare lo spazio dei parametri per modelli migliori

Sebbene questa funzionalità renda semplice per gli operatori dei dati automatizzare i notebook autonomi, i flussi di lavoro ML sono spesso costituiti da diversi notebook, ciascuno dei quali esegue un'attività specifica con dipendenze complesse. Ad esempio, un notebook che monitora la deriva dei dati del modello dovrebbe avere una fase preliminare che consenta l'estrazione, la trasformazione e il caricamento (ETL) e l'elaborazione di nuovi dati e una fase successiva di aggiornamento e addestramento del modello nel caso in cui si noti una deriva significativa . Inoltre, i data scientist potrebbero voler attivare l’intero flusso di lavoro secondo una pianificazione ricorrente per aggiornare il modello in base a nuovi dati. Per consentirti di automatizzare facilmente i tuoi notebook e creare flussi di lavoro così complessi, i processi notebook SageMaker sono ora disponibili come passaggio in SageMaker Pipelines. In questo post mostriamo come risolvere i seguenti casi d'uso con poche righe di codice:

  • Esegui a livello di programmazione un notebook autonomo immediatamente o secondo una pianificazione ricorrente
  • Crea flussi di lavoro in più fasi di notebook come DAG per scopi di integrazione continua e distribuzione continua (CI/CD) che possono essere gestiti tramite l'interfaccia utente di SageMaker Studio

Panoramica della soluzione

Il diagramma seguente illustra l'architettura della nostra soluzione. Puoi utilizzare SageMaker Python SDK per eseguire un singolo processo notebook o un flusso di lavoro. Questa funzionalità crea un processo di formazione SageMaker per eseguire il notebook.

Pianifica i processi dei notebook Amazon SageMaker e gestisci i flussi di lavoro dei notebook in più fasi utilizzando le API | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Nelle sezioni seguenti, esaminiamo un caso d'uso di ML di esempio e mostriamo i passaggi per creare un flusso di lavoro di processi notebook, passando parametri tra diversi passaggi notebook, pianificando il flusso di lavoro e monitorandolo tramite SageMaker Studio.

Per il nostro problema ML in questo esempio, stiamo costruendo un modello di analisi del sentiment, che è un tipo di attività di classificazione del testo. Le applicazioni più comuni dell'analisi del sentiment includono il monitoraggio dei social media, la gestione dell'assistenza clienti e l'analisi del feedback dei clienti. Il set di dati utilizzato in questo esempio è il set di dati Stanford Sentiment Treebank (SST2), che consiste di recensioni di film insieme a un numero intero (0 o 1) che indica il sentimento positivo o negativo della recensione.

Quello che segue è un esempio di a data.csv file corrispondente al set di dati SST2 e mostra i valori nelle prime due colonne. Tieni presente che il file non dovrebbe avere alcuna intestazione.

Colonna 1 Colonna 2
0 nascondere nuove secrezioni alle unità genitoriali
0 non contiene spirito, solo gag elaborate
1 che ama i suoi personaggi e comunica qualcosa di piuttosto bello sulla natura umana
0 rimane assolutamente soddisfatto di rimanere lo stesso per tutto il tempo
0 sui peggiori cliché sulla vendetta dei nerd che i cineasti potrebbero tirar fuori
0 è troppo tragico per meritare un trattamento così superficiale
1 dimostra che il regista di blockbuster hollywoodiani come Patriot Games può ancora realizzare un piccolo film personale con un forte impatto emotivo.

In questo esempio di ML, dobbiamo eseguire diverse attività:

  1. Esegui l'ingegneria delle funzionalità per preparare questo set di dati in un formato che il nostro modello possa comprendere.
  2. Dopo la progettazione delle funzionalità, esegui un passaggio di formazione che utilizza Transformers.
  3. Configura l'inferenza batch con il modello ottimizzato per aiutare a prevedere il sentiment per le nuove recensioni in arrivo.
  4. Configurare una fase di monitoraggio dei dati in modo da poter monitorare regolarmente i nostri nuovi dati per eventuali variazioni di qualità che potrebbero richiedere una riqualificazione dei pesi del modello.

Con questo lancio di un lavoro notebook come passaggio nelle pipeline SageMaker, possiamo orchestrare questo flusso di lavoro, che consiste in tre passaggi distinti. Ogni fase del flusso di lavoro viene sviluppata in un notebook diverso, che viene poi convertito in fasi di lavoro del notebook indipendenti e collegate come una pipeline:

  • Pre-elaborazione – Scarica il set di dati SST2 pubblico da Servizio di archiviazione semplice Amazon (Amazon S3) e creare un file CSV per il notebook nel passaggio 2 da eseguire. Il set di dati SST2 è un set di dati di classificazione del testo con due etichette (0 e 1) e una colonna di testo da classificare.
  • Training – Prendi il file CSV sagomato ed esegui la messa a punto con BERT per la classificazione del testo utilizzando le librerie Transformers. Come parte di questo passaggio utilizziamo un notebook per la preparazione dei dati di test, che costituisce una dipendenza per il passaggio di perfezionamento e inferenza batch. Una volta completata l'ottimizzazione, questo notebook viene eseguito utilizzando Run Magic e prepara un set di dati di test per l'inferenza di esempio con il modello ottimizzato.
  • Trasformare e monitorare – Eseguire l'inferenza batch e impostare la qualità dei dati con il monitoraggio del modello per ottenere un suggerimento sul set di dati di base.

Pianifica i processi dei notebook Amazon SageMaker e gestisci i flussi di lavoro dei notebook in più fasi utilizzando le API | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Esegui i quaderni

Il codice di esempio per questa soluzione è disponibile su GitHub.

La creazione di una fase di lavoro del notebook SageMaker è simile alla creazione di altre fasi della pipeline SageMaker. In questo esempio di notebook utilizziamo SageMaker Python SDK per orchestrare il flusso di lavoro. Per creare un passaggio del notebook in SageMaker Pipelines, è possibile definire i seguenti parametri:

  • Taccuino di input – Il nome del notebook che verrà orchestrato da questo passaggio del notebook. Qui puoi passare il percorso locale al notebook di input. Facoltativamente, se questo notebook ha altri notebook in esecuzione, puoi passarli nel file AdditionalDependencies parametro per la fase di lavoro del notebook.
  • URI dell'immagine – L'immagine Docker dietro la fase di lavoro del notebook. Possono trattarsi delle immagini predefinite fornite già da SageMaker o di un'immagine personalizzata che hai definito e a cui hai inviato il push Registro dei contenitori Amazon Elastic (Amazon ECR). Fare riferimento alla sezione Considerazioni alla fine di questo post per le immagini supportate.
  • Nome del kernel – Il nome del kernel che stai utilizzando su SageMaker Studio. Questa specifica del kernel è registrata nell'immagine che hai fornito.
  • Tipo di istanza (facoltativo) - L' Cloud di calcolo elastico di Amazon (Amazon EC2) dietro il processo notebook che hai definito e che verrà eseguito.
  • Parametri (facoltativo) – I parametri che puoi passare saranno accessibili per il tuo notebook. Questi possono essere definiti in coppie chiave-valore. Inoltre, questi parametri possono essere modificati tra varie esecuzioni di processi notebook o esecuzioni di pipeline.

Il nostro esempio ha un totale di cinque taccuini:

  • nb-job-pipeline.ipynb – Questo è il nostro taccuino principale in cui definiamo la nostra pipeline e il flusso di lavoro.
  • preprocess.ipynb – Questo notebook è il primo passaggio nel nostro flusso di lavoro e contiene il codice che estrarrà il set di dati AWS pubblico e ne creerà un file CSV.
  • training.ipynb – Questo notebook è il secondo passaggio del nostro flusso di lavoro e contiene il codice per prendere il CSV dal passaggio precedente e condurre formazione e perfezionamento locali. Questo passaggio ha anche una dipendenza da prepare-test-set.ipynb notebook per estrarre un set di dati di test per l'inferenza del campione con il modello ottimizzato.
  • preparare-test-set.ipynb – Questo notebook crea un set di dati di test che il nostro notebook di formazione utilizzerà nella seconda fase della pipeline e utilizzerà per l'inferenza del campione con il modello ottimizzato.
  • trasforma-monitor.ipynb – Questo notebook è il terzo passaggio del nostro flusso di lavoro e prende il modello BERT di base ed esegue un processo di trasformazione batch SageMaker, configurando anche la qualità dei dati con il monitoraggio del modello.

Successivamente, esaminiamo il taccuino principale nb-job-pipeline.ipynb, che combina tutti i sub-notebook in una pipeline ed esegue il flusso di lavoro end-to-end. Tieni presente che sebbene l'esempio seguente esegua il notebook solo una volta, puoi anche pianificare la pipeline per eseguire il notebook ripetutamente. Fare riferimento a Documentazione di SageMaker per le istruzioni dettagliate.

Per la prima fase del processo notebook, passiamo un parametro con un bucket S3 predefinito. Possiamo utilizzare questo bucket per scaricare tutti gli artefatti che vogliamo disponibili per gli altri passaggi della pipeline. Per il primo taccuino (preprocess.ipynb), eliminiamo il set di dati del treno SST2 pubblico AWS e ne creiamo un file CSV di addestramento che inviamo a questo bucket S3. Vedere il seguente codice:

# Parameters
print(default_s3_bucket) !aws s3 cp s3://sagemaker-sample-files/datasets/text/SST2/sst2.train sst2.train # will read just the first 500 lines for quicker execution
with open('sst2.train', 'r') as f: lines = f.readlines()[:500] data = []
for line in lines: label, text = line.strip().split(' ', 1) data.append((int(label), text)) df = pd.DataFrame(data, columns=['label', 'text'])
df.to_csv("train.csv", index=False) #create csv file with smaller dataset
!aws s3 cp "train.csv" {default_s3_bucket}

Possiamo quindi convertire questo taccuino in un file NotebookJobStep con il seguente codice nel nostro taccuino principale:

# provide S3 Bucket to dump artifacts in
nb_job_params = {"default_s3_bucket": notebook_artifacts} preprocess_nb_step = NotebookJobStep(
name=preprocess_step_name,
description=preprocess_description,
notebook_job_name=preprocess_job_name,
image_uri=image_uri,
kernel_name=kernel_name,
display_name=display_name,
role=role,
input_notebook=preprocess_notebook,
instance_type="ml.m5.4xlarge",
parameters=nb_job_params,
)

Ora che abbiamo un file CSV di esempio, possiamo iniziare ad addestrare il nostro modello nel nostro taccuino di formazione. Il nostro notebook di addestramento accetta lo stesso parametro del bucket S3 ed estrae il set di dati di addestramento da quella posizione. Quindi eseguiamo la messa a punto utilizzando l'oggetto trainer Transformers con il seguente snippet di codice:

from transformers import TrainingArguments, Trainer
training_args = TrainingArguments(output_dir="test_trainer", evaluation_strategy="epoch") trainer = Trainer( model=model, args=training_args, train_dataset=small_train_dataset, eval_dataset=small_eval_dataset, compute_metrics=compute_metrics,
) trainer.train()

Dopo la messa a punto, vogliamo eseguire alcune inferenze batch per vedere come si comporta il modello. Questo viene fatto utilizzando un taccuino separato (prepare-test-set.ipynb) nello stesso percorso locale che crea un set di dati di test per eseguire l'inferenza sull'utilizzo del nostro modello addestrato. Possiamo eseguire il taccuino aggiuntivo nel nostro taccuino di formazione con la seguente cella magica:

%run 'prepare-test-set.ipynb'

Definiamo questa dipendenza extra dal notebook nel file AdditionalDependencies parametro nel nostro secondo passaggio di lavoro del notebook:

train_nb_step = NotebookJobStep(
name=training_step_name,
description=training_description,
notebook_job_name=training_job_name,
input_notebook=training_notebook,
additional_dependencies=[test_data_prep_notebook],
image_uri=image_uri,
kernel_name=kernel_name,
display_name=display_name,
instance_type="ml.m5.12xlarge",
role=role,
parameters=nb_job_params,
)

Dobbiamo inoltre specificare che lo step di lavoro del notebook di training (Step 2) dipende dallo step di lavoro del notebook Preprocess (Step 1) utilizzando il comando add_depends_on Chiamata API come segue:

train_nb_step.add_depends_on([preprocess_nb_step])

Il nostro ultimo passaggio prevede che il modello BERT esegua una trasformazione batch SageMaker, configurando al tempo stesso l'acquisizione e la qualità dei dati tramite SageMaker Model Monitor. Tieni presente che questo è diverso dall'utilizzo del built-in Trasformare or Catturare passaggi tramite pipeline. Il nostro notebook per questo passaggio eseguirà le stesse API, ma verrà monitorato come passaggio di lavoro del notebook. Questo passaggio dipende dal Training Job Step che abbiamo definito in precedenza, quindi catturiamo anche quello con il flag depend_on.

batch_monitor_step = NotebookJobStep(
name=batch_monitor_step_name,
description=batch_monitor_description,
notebook_job_name=batch_monitor_job_name,
input_notebook=batch_monitor_notebook,
image_uri=image_uri,
kernel_name=kernel_name,
display_name=display_name,
instance_type="ml.m5.12xlarge",
role=role,
parameters=nb_job_params,
)
batch_monitor_step.add_depends_on([train_nb_step])

Dopo aver definito i vari passaggi del nostro flusso di lavoro, possiamo creare ed eseguire la pipeline end-to-end:

# create pipeline
pipeline = Pipeline(
name=pipeline_name,
steps=[preprocess_nb_step, train_nb_step, batch_monitor_step],
) # execute pipeline
pipeline.create(session.get_execution_role())
execution = pipeline.start(parameters={})
execution.wait(delay=30, max_attempts=60)
execution_steps = execution.list_steps()
print(execution_steps)

Monitorare le esecuzioni della pipeline

È possibile tenere traccia e monitorare le esecuzioni dei passaggi del notebook tramite il DAG SageMaker Pipelines, come mostrato nello screenshot seguente.

Pianifica i processi dei notebook Amazon SageMaker e gestisci i flussi di lavoro dei notebook in più fasi utilizzando le API | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Facoltativamente, puoi anche monitorare le singole esecuzioni del notebook sul dashboard dei lavori del notebook e attivare/disattivare i file di output che sono stati creati tramite l'interfaccia utente di SageMaker Studio. Quando si utilizza questa funzionalità al di fuori di SageMaker Studio, è possibile definire gli utenti che possono tenere traccia dello stato di esecuzione sul dashboard del lavoro del notebook utilizzando i tag. Per ulteriori dettagli sui tag da includere, vedere Visualizza i processi del tuo notebook e scarica gli output nel dashboard dell'interfaccia utente di Studio.

Pianifica i processi dei notebook Amazon SageMaker e gestisci i flussi di lavoro dei notebook in più fasi utilizzando le API | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Per questo esempio, inviamo i lavori del notebook risultanti in una directory chiamata outputs nel percorso locale con il codice di esecuzione della pipeline. Come mostrato nello screenshot seguente, qui puoi vedere l'output del tuo notebook di input e anche tutti i parametri che hai definito per quel passaggio.

Pianifica i processi dei notebook Amazon SageMaker e gestisci i flussi di lavoro dei notebook in più fasi utilizzando le API | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

ripulire

Se hai seguito il nostro esempio, assicurati di eliminare la pipeline creata, i processi del notebook e i dati s3 scaricati dai notebook di esempio.

Considerazioni

Di seguito sono riportate alcune considerazioni importanti su questa funzionalità:

  • Vincoli dell'SDK – La fase di lavoro del notebook può essere creata solo tramite SageMaker Python SDK.
  • Vincoli di immagine –La fase di lavoro del notebook supporta le seguenti immagini:

Conclusione

Con questo lancio, gli operatori dei dati possono ora eseguire i propri notebook a livello di programmazione con poche righe di codice utilizzando il SDK Python di SageMaker. Inoltre, puoi creare flussi di lavoro complessi in più fasi utilizzando i tuoi notebook, riducendo significativamente il tempo necessario per passare da un notebook a una pipeline CI/CD. Dopo aver creato la pipeline, puoi utilizzare SageMaker Studio per visualizzare ed eseguire DAG per le tue pipeline e gestire e confrontare le esecuzioni. Che tu stia pianificando flussi di lavoro ML end-to-end o parte di essi, ti invitiamo a provare flussi di lavoro basati su notebook.


Circa gli autori

Pianifica i processi dei notebook Amazon SageMaker e gestisci i flussi di lavoro dei notebook in più fasi utilizzando le API | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Anchit Gupta è un Senior Product Manager per Amazon SageMaker Studio. Si concentra sull'abilitazione di flussi di lavoro interattivi di scienza dei dati e ingegneria dei dati dall'IDE di SageMaker Studio. Nel tempo libero le piace cucinare, giocare a giochi da tavolo/di carte e leggere.

Pianifica i processi dei notebook Amazon SageMaker e gestisci i flussi di lavoro dei notebook in più fasi utilizzando le API | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Ram Vegiraju è un ML Architect con il team SageMaker Service. Si concentra sull'aiutare i clienti a creare e ottimizzare le loro soluzioni AI/ML su Amazon SageMaker. Nel tempo libero ama viaggiare e scrivere.

Pianifica i processi dei notebook Amazon SageMaker e gestisci i flussi di lavoro dei notebook in più fasi utilizzando le API | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Edoardo Sole è un Senior SDE che lavora per SageMaker Studio presso Amazon Web Services. Si concentra sulla creazione di soluzioni ML interattive e sulla semplificazione dell'esperienza del cliente per integrare SageMaker Studio con le tecnologie più diffuse nell'ingegneria dei dati e nell'ecosistema ML. Nel suo tempo libero, Edward è un grande fan del campeggio, delle escursioni e della pesca e si diverte a passare il tempo con la sua famiglia.

Timestamp:

Di più da Apprendimento automatico di AWS