Pianificazione delle esecuzioni della pipeline - Amazon SageMaker AI

Pianificazione delle esecuzioni della pipeline

Puoi pianificare le esecuzioni di Amazon SageMaker Pipelines con Amazon EventBridge. Amazon SageMaker Pipelines è supportato come destinazione in Amazon EventBridge. Ciò consente di avviare l'esecuzione della pipeline per la costruzione di modelli in base a qualsiasi evento nel bus di eventi. EventBridge ti consente di automatizzare le esecuzioni della pipeline e rispondere automaticamente a eventi come i processi di addestramento o le modifiche dello stato degli endpoint. Gli eventi includono il caricamento di un nuovo file nel bucket Amazon S3, una modifica dello stato dell’endpoint Amazon SageMaker AI dovuta a una deriva e argomenti di Amazon Simple Notification Service (SNS).

Le azioni di Pipelines seguenti possono essere avviate automaticamente: 

  • StartPipelineExecution

Per ulteriori informazioni sulla pianificazione dei processi di SageMaker AI, consulta Automazione di SageMaker AI con Amazon EventBridge.

Pianificazione di una pipeline con Amazon EventBridge

Per avviare l'esecuzione di una pipeline con Eventi Amazon CloudWatch, devi creare una regola EventBridge. Quando crei una regola per gli eventi, specifichi un'operazione mirata da intraprendere quando EventBridge riceve un evento che corrisponde alla regola. Quando un evento corrisponde alla regola, EventBridge invia l'evento alla destinazione specificata e avvia l'operazione definita nella regola.

I seguenti tutorial mostrano come pianificare l'esecuzione di una pipeline con EventBridge utilizzando la console EventBridge o la AWS CLI. 

Prerequisiti

  • Un ruolo che EventBridge può assumere con l'autorizzazione SageMaker::StartPipelineExecution. Questo ruolo può essere creato automaticamente se crei una regola dalla console EventBridge. In caso contrario, lo devi creare autonomamente. Per informazioni sulla creazione di un ruolo SageMaker AI, consulta Ruoli SageMaker.

  • Una pipeline Amazon SageMaker AI da pianificare. Per creare una pipeline Amazon SageMaker AI, consulta Definizione di una pipeline.

Creazione di una regola EventBridge utilizzando la console EventBridge

La procedura seguente mostra come creare una regola EventBridge utilizzando la console EventBridge. 

  1. Passa alla console EventBridge.

  2. Seleziona Regole sul lato sinistro.

  3. Seleziona Create Rule.

  4. Immettere un nome e una descrizione per la regola.

  5. Seleziona come desideri avviare questa regola. Sono disponibili le seguenti opzioni per la regola:

    • Modello di evento: la regola viene avviata quando si verifica un evento corrispondente al modello. È possibile scegliere un modello predefinito che corrisponda a un determinato tipo di evento oppure creare un modello personalizzato. Se selezioni un modello predefinito, puoi modificarlo per personalizzarlo. Per ulteriori informazioni sui modelli di evento, consulta Modelli di eventi in Eventi CloudWatch.

    • Pianificazione: la regola viene avviata regolarmente in base a una pianificazione specificata. È possibile utilizzare una pianificazione a frequenza fissa che viene avviata regolarmente per un determinato numero di minuti, ore o settimane. Puoi anche usare un'espressione cron per creare una pianificazione più dettagliata, ad esempio "il primo lunedì di ogni mese alle 8:00". La pianificazione non è supportata su un bus di eventi partner o personalizzato.

  6. Seleziona il bus di eventi desiderato.

  7. Seleziona uno o più destinazioni da richiamare quando un evento corrisponde al tuo modello di evento o quando viene avviata la pianificazione. È possibile aggiungere fino a 5 destinazioni per regola. Seleziona SageMaker Pipeline nell'elenco a discesa delle destinazioni.

  8. Seleziona la pipeline che desideri avviare dall'elenco a discesa delle pipeline.

  9. Aggiungi parametri da passare all'esecuzione della pipeline utilizzando una coppia nome e valore. I valori dei parametri possono essere statici o dinamici. Per ulteriori informazioni sui parametri di Amazon SageMaker AI Pipeline, consulta AWS::Events::Rule SagemakerPipelineParameters.

    • I valori statici vengono passati all'esecuzione della pipeline ogni volta che viene avviata la pipeline. Ad esempio, se {"Name": "Instance_type", "Value": "ml.4xlarge"} è specificato nell'elenco dei parametri, viene passato come parametro in StartPipelineExecutionRequest ogni volta che EventBridge avvia la pipeline.

    • I valori dinamici vengono specificati utilizzando un percorso JSON. EventBridge analizza il valore dal payload dell'evento, quindi lo passa all'esecuzione della pipeline. Ad esempio: $.detail.param.value

  10. Seleziona il ruolo da utilizzare per questa regola. Puoi utilizzare un ruolo esistente o crearne uno nuovo.

  11. (Opzionale) Aggiungi dei tag.

  12. Seleziona Create per finalizzare la tua regola.

La tua regola è ora in vigore e pronta per avviare le esecuzioni della pipeline.

Creazione di una regola EventBridge tramite la AWS CLI

La procedura seguente mostra come creare una regola EventBridge utilizzando la AWS CLI.

  1. Crea una regola da avviare. Quando si crea una regola EventBridge utilizzando la AWS CLI, sono disponibili due opzioni per l'avvio della regola, il modello di evento e la pianificazione.

    • Modello di evento: la regola viene avviata quando si verifica un evento corrispondente al modello. È possibile scegliere un modello predefinito che corrisponda a un determinato tipo di evento oppure creare un modello personalizzato. Se selezioni un modello predefinito, puoi modificarlo per personalizzarlo.  È possibile creare una regola con modello di evento utilizzando il seguente comando:

      aws events put-rule --name <RULE_NAME> ----event-pattern <YOUR_EVENT_PATTERN> --description <RULE_DESCRIPTION> --role-arn <ROLE_TO_EXECUTE_PIPELINE> --tags <TAGS>
    • Pianificazione: la regola viene avviata regolarmente in base a una pianificazione specificata. È possibile utilizzare una pianificazione a frequenza fissa che viene avviata regolarmente per un determinato numero di minuti, ore o settimane. Puoi anche usare un'espressione cron per creare una pianificazione più dettagliata, ad esempio "il primo lunedì di ogni mese alle 8:00". La pianificazione non è supportata su un bus di eventi partner o personalizzato. È possibile creare una regola con pianificazione utilizzando il seguente comando:

      aws events put-rule --name <RULE_NAME> --schedule-expression <YOUR_CRON_EXPRESSION> --description <RULE_DESCRIPTION> --role-arn <ROLE_TO_EXECUTE_PIPELINE> --tags <TAGS>
  2. Aggiungi una o più destinazioni da richiamare quando un evento corrisponde al tuo modello di evento o quando viene avviata la pianificazione. È possibile aggiungere fino a 5 destinazioni per regola.  Per ciascuna destinazione, occorre specificare: 

    • ARN: l'ARN della risorsa della tua pipeline.

    • ARN del ruolo: l'ARN del ruolo che EventBridge deve assumere per eseguire la pipeline.

    • Parametri: parametri della pipeline Amazon SageMaker AI da passare.

  3. Utilizza il comando seguente per passare una pipeline Amazon SageMaker AI come destinazione alla regola con put-target:

    aws events put-targets --rule <RULE_NAME> --event-bus-name <EVENT_BUS_NAME> --targets "[{\"Id\": <ID>, \"Arn\": <RESOURCE_ARN>, \"RoleArn\": <ROLE_ARN>, \"SageMakerPipelineParameter\": { \"SageMakerParameterList\": [{\"Name\": <NAME>, \"Value\": <VALUE>}]} }]"] 

Pianificazione di una pipeline con SageMaker Python SDK

Le sezioni seguenti mostrano come configurare le autorizzazioni per accedere alle risorse EventBridge e creare la pianificazione della pipeline con SageMaker Python SDK.

Autorizzazioni richieste

Per eseguire lo scheduler per le pipeline, devi disporre delle autorizzazioni necessarie. Completa la procedura seguente per configurare le autorizzazioni:

  1. Collega la policy di privilegi minimi seguente al ruolo IAM utilizzato per creare i trigger della pipeline oppure utilizza la policy gestita da AWS, AmazonEventBridgeSchedulerFullAccess.

    JSON
    { "Version": "2012-10-17", "Statement": [ { "Action": [ "scheduler:ListSchedules", "scheduler:GetSchedule", "scheduler:CreateSchedule", "scheduler:UpdateSchedule", "scheduler:DeleteSchedule" ], "Effect": "Allow", "Resource": [ "*" ] }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::*:role/*", "Condition": { "StringLike": { "iam:PassedToService": "scheduler.amazonaws.com" } } } ] }
  2. Stabilisci una relazione di attendibilità con EventBridge aggiungendo il principale del servizio scheduler.amazonaws.com alla policy di attendibilità di questo ruolo. Assicurati di collegare la policy di attendibilità seguente al ruolo di esecuzione se avvii il notebook in SageMaker Studio.

JSON
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "scheduler.amazonaws.com", "sagemaker.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

Creazione di una pianificazione della pipeline

Utilizzando il costruttore PipelineSchedule, puoi pianificare l’esecuzione di una pipeline una tantum o a intervalli predeterminati. Una pianificazione della pipeline deve essere di tipo at, rate o cron. Questo set di tipi di pianificazione è un’estensione delle opzioni di pianificazione di EventBridge. Per ulteriori informazioni su come utilizzare la classe PipelineSchedule, consulta sagemaker.workflow.triggers.PipelineSchedule. L’esempio seguente mostra come creare ciascun tipo di pianificazione con PipelineSchedule.

from sagemaker.workflow.triggers import PipelineSchedule # schedules a pipeline run for 12/13/2023 at time 10:15:20 UTC my_datetime_schedule = PipelineSchedule( name="<schedule-name>", at=datetime(2023, 12, 13, 10, 15, 20) ) # schedules a pipeline run every 5 minutes my_rate_schedule = PipelineSchedule( name="<schedule-name>", rate=(5, "minutes") ) # schedules a pipeline run at 10:15am UTC on the last Friday of each month during the years 2022 to 2023 my_cron_schedule = PipelineSchedule( name="<schedule-name>", cron="15 10 ? * 6L 2022-2023" )
Nota

Se crei una pianificazione una tantum e devi accedere alla funzionalità per l’ora corrente, utilizza datetime.utcnow() invece di datetime.now(). Quest’ultimo non archivia il contesto della zona corrente e passa di conseguenza un orario errato a EventBridge.

Collegamento del trigger alla pipeline

Per collegare PipelineSchedule alla pipeline, invoca la chiamata put_triggers all’oggetto della pipeline creato con un elenco di trigger. Se ricevi un ARN di risposta, significa che hai creato correttamente la pianificazione nel tuo account ed EventBridge inizia a invocare la pipeline di destinazione all’ora o alla frequenza specificate. Devi specificare un ruolo con le autorizzazioni corrette per collegare i trigger a una pipeline principale. Se non lo fornisci, Pipelines recupera il ruolo predefinito utilizzato per creare la pipeline dal file di configurazione.

L’esempio seguente illustra come collegare una pianificazione a una pipeline.

scheduled_pipeline = Pipeline( name="<pipeline-name>", steps=[...], sagemaker_session=<sagemaker-session>, ) custom_schedule = PipelineSchedule( name="<schedule-name>", at=datetime(year=2023, month=12, date=25, hour=10, minute=30, second=30) ) scheduled_pipeline.put_triggers(triggers=[custom_schedule], role_arn=<role>)

Descrizione dei trigger correnti

Per recuperare informazioni sui trigger della pipeline creati, puoi invocare l’API describe_trigger() con il nome del trigger. Questo comando restituisce i dettagli sull’espressione di pianificazione creata, ad esempio l’ora di inizio, lo stato di abilitazione e altre informazioni utili. Il frammento seguente mostra un’invocazione di esempio:

scheduled_pipeline.describe_trigger(name="<schedule-name>")

Pulizia delle risorse del trigger

Prima di eliminare la pipeline, pulisci i trigger esistenti per evitare di perdere risorse del tuo account. Devi eliminare i trigger prima di distruggere la pipeline principale. Puoi eliminare i trigger passando un elenco di nomi di trigger all’API delete_triggers. Il frammento seguente mostra come eliminare i trigger.

pipeline.delete_triggers(trigger_names=["<schedule-name>"])
Nota

Quando elimini i trigger, tieni presente le limitazioni seguenti:

  • L’opzione che consente di eliminare i trigger specificandone i nomi è disponibile solo in SageMaker Python SDK. L’eliminazione della pipeline nella CLI o con una chiamata API DeletePipeline non elimina i trigger. Di conseguenza, i trigger diventano orfani e SageMaker AI tenta di avviare un’esecuzione di una pipeline inesistente.

  • Inoltre, se stai utilizzando un’altra sessione del notebook o hai già eliminato la destinazione della pipeline, pulisci le pianificazioni orfane tramite la CLI dello scheduler o la console EventBridge.