Planifier les exécutions du pipeline - Amazon SageMaker

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Planifier les exécutions du pipeline

Vous pouvez planifier vos exécutions Amazon SageMaker Pipelines à l'aide d'Amazon EventBridge. Amazon SageMaker Pipelines est pris en charge en tant que cible dans Amazon EventBridge. Cela vous permet de lancer l'exécution de votre pipeline de création de modèle en fonction de n'importe quel événement dans votre bus d'événements. Vous pouvez ainsi automatiser l'exécution de votre pipeline et répondre automatiquement à des événements tels que les modifications du poste de formation ou de l'état des terminaux. EventBridge Les événements incluent le chargement d'un nouveau fichier dans votre compartiment Amazon S3, un changement de statut de votre point de SageMaker terminaison Amazon dû à une dérive et des sujets relatifs au Amazon Simple Notification Service (SNS).

Les actions Pipelines suivantes peuvent être lancées automatiquement : 

  • StartPipelineExecution

Pour plus d'informations sur la planification des SageMaker tâches, consultez Automatiser SageMaker avec Amazon EventBridge.

Planifier un pipeline avec Amazon EventBridge

Pour démarrer l'exécution d'un pipeline avec Amazon CloudWatch Events, vous devez créer une EventBridge règle. Lorsque vous créez une règle pour les événements, vous spécifiez une action cible à entreprendre lorsque EventBridge vous recevez un événement correspondant à la règle. Lorsqu'un événement correspond à la règle, EventBridge envoie l'événement à la cible spécifiée et lance l'action définie dans la règle.

Les didacticiels suivants montrent comment planifier l'exécution d'un pipeline à EventBridge l'aide de la EventBridge console ou du AWS CLI. 

Prérequis

  • Un rôle qui EventBridge peut être assumé avec l'SageMaker::StartPipelineExecutionautorisation. Ce rôle peut être créé automatiquement si vous créez une règle depuis la EventBridge console ; dans le cas contraire, vous devez créer ce rôle vous-même. Pour plus d'informations sur la création d'un SageMaker rôle, consultez la section SageMaker Rôles.

  • Un Amazon SageMaker Pipeline à planifier. Pour créer un SageMaker pipeline Amazon, consultez la section Définir un pipeline.

Création d'une EventBridge règle à l'aide de la EventBridge console

La procédure suivante montre comment créer une EventBridge règle à l'aide de la EventBridge console. 

  1. Accédez à la EventBridge console.

  2. Sélectionnez Rules (Règles) sur le côté gauche.

  3. Sélectionnez Create Rule.

  4. Saisissez un nom et une description pour la règle.

  5. Sélectionnez comment vous souhaitez initier cette règle. Vous avez les choix suivants pour votre règle :

    • Modèle d'événement : votre règle est lancée lorsqu'un événement correspondant au modèle se produit. Vous pouvez choisir un modèle prédéfini qui correspond à un certain type d'événement ou créer un modèle personnalisé. Si vous sélectionnez un motif prédéfini, vous pouvez le modifier pour le personnaliser. Pour plus d'informations sur les modèles d'événements, voir Modèles d'événements dans les CloudWatch événements.

    • Planification : votre règle est lancée régulièrement selon une planification spécifiée. Vous pouvez utiliser un programme à taux fixe qui se lance régulièrement pendant un nombre spécifié de minutes, d'heure ou de semaines. Vous pouvez également utiliser une expression cron pour créer un horaire plus précis, comme « le premier lundi de chaque mois à 8 h ». La planification n'est pas prise en charge sur un bus d'événement personnalisé ou partenaire.

  6. Sélectionnez le bus d'événement de votre choix.

  7. Sélectionnez la ou les cibles à appeler lorsqu'un événement correspond à votre modèle d'événement ou lorsque la planification est lancée. Vous pouvez ajouter jusqu'à 5 cibles par règle. Sélectionnez SageMaker Pipeline dans la liste déroulante cible.

  8. Sélectionnez le pipeline que vous souhaitez lancer dans la liste déroulante du pipeline.

  9. Ajoutez des paramètres à transmettre à l'exécution de votre pipeline à l'aide d'une paire nom et valeur. Les valeurs des paramètres peuvent être statiques ou dynamiques. Pour plus d'informations sur les paramètres d'Amazon SageMaker Pipeline, consultez AWS: :Events : SagemakerPipelineParameters :Rule.

    • Les valeurs statiques sont transmises à l'exécution du pipeline chaque fois que le pipeline est lancé. Par exemple, s'il {"Name": "Instance_type", "Value": "ml.4xlarge"} est spécifié dans la liste des paramètres, il est transmis en tant que paramètre à StartPipelineExecutionRequest chaque fois que le pipeline EventBridge est lancé.

    • Les valeurs dynamiques sont spécifiées à l'aide d'un JSON chemin. EventBridge analyse la valeur d'une charge utile d'événement, puis la transmet à l'exécution du pipeline. Par exemple : $.detail.param.value

  10. Sélectionnez le rôle à utiliser pour cette règle. Vous pouvez utiliser un rôle existant ou en créer un.

  11. (Facultatif) Ajoutez des balises.

  12. Sélectionnez Create pour finaliser votre règle.

Votre règle est maintenant en vigueur et prête à lancer les exécutions de votre pipeline.

Créez une EventBridge règle à l'aide du AWS CLI

La procédure suivante montre comment créer une EventBridge règle à l'aide du AWS CLI.

  1. Créez une règle à lancer. Lorsque vous créez une EventBridge règle à l'aide du AWS CLI, deux options s'offrent à vous pour lancer votre règle : le modèle d'événement et le calendrier.

    • Modèle d'événement : votre règle est lancée lorsqu'un événement correspondant au modèle se produit. Vous pouvez choisir un modèle prédéfini qui correspond à un certain type d'événement ou créer un modèle personnalisé. Si vous sélectionnez un motif prédéfini, vous pouvez le modifier pour le personnaliser.  Vous pouvez créer une règle avec un modèle d'événement à l'aide de la commande suivante :

      aws events put-rule --name <RULE_NAME> ----event-pattern <YOUR_EVENT_PATTERN> --description <RULE_DESCRIPTION> --role-arn <ROLE_TO_EXECUTE_PIPELINE> --tags <TAGS>
    • Planification : votre règle est lancée régulièrement selon une planification spécifiée. Vous pouvez utiliser un programme à taux fixe qui se lance régulièrement pendant un nombre spécifié de minutes, d'heure ou de semaines. Vous pouvez également utiliser une expression cron pour créer un horaire plus précis, comme « le premier lundi de chaque mois à 8 h ». La planification n'est pas prise en charge sur un bus d'événement personnalisé ou partenaire. Vous pouvez créer une règle avec une planification à l'aide de la commande suivante :

      aws events put-rule --name <RULE_NAME> --schedule-expression <YOUR_CRON_EXPRESSION> --description <RULE_DESCRIPTION> --role-arn <ROLE_TO_EXECUTE_PIPELINE> --tags <TAGS>
  2. Ajoutez une ou plusieurs cibles à appeler lorsqu'un événement correspond à votre modèle d'événement ou lorsque la planification est lancée. Vous pouvez ajouter jusqu'à 5 cibles par règle.  Pour chaque cible, vous devez spécifier les éléments suivants : 

    • ARN: La ressource ARN de votre pipeline.

    • Rôle ARN : Le ARN rôle EventBridge doit assumer pour exécuter le pipeline.

    • Paramètres : paramètres SageMaker du pipeline Amazon à transmettre.

  3. Exécutez la commande suivante pour transmettre un SageMaker pipeline Amazon comme cible à votre règle à l'aide de put-targets :

    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>}]} }]"] 

Planifier un pipeline avec le SageMaker Python SDK

Les sections suivantes vous montrent comment configurer les autorisations d'accès aux EventBridge ressources et créer votre calendrier de pipeline à l'aide de SageMaker PythonSDK.

Autorisations nécessaires

Vous devez disposer des autorisations nécessaires pour utiliser le planificateur de pipeline. Procédez comme suit pour configurer vos autorisations :

  1. Associez la politique de privilèges minimaux suivante au IAM rôle utilisé pour créer les déclencheurs du pipeline, ou utilisez la politique AWS géréeAmazonEventBridgeSchedulerFullAccess.

    { "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. Établissez une relation de confiance avec EventBridge en ajoutant le principal de service scheduler.amazonaws.com à la politique de confiance de ce rôle. Assurez-vous d'associer la politique de confiance suivante au rôle d'exécution si vous lancez le bloc-notes dans SageMaker Studio.

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

Création d'un calendrier de pipeline

À l'aide du PipelineSchedule constructeur, vous pouvez planifier un pipeline pour qu'il s'exécute une seule fois ou à un intervalle prédéterminé. Un calendrier de pipeline doit être du type atrate, oucron. Cet ensemble de types de planification est une extension des options de EventBridge planification. Pour plus d'informations sur l'utilisation de la PipelineSchedule classe, consultez sagemaker.workflow.triggers. PipelineSchedule. L'exemple suivant montre comment créer chaque type de planification avecPipelineSchedule.

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" )
Note

Si vous créez un calendrier ponctuel et que vous devez accéder à l'heure actuelle, utilisez datetime.utcnow() plutôt quedatetime.now(). Ce dernier ne stocke pas le contexte de zone actuel et entraîne un transfert d'heure incorrect EventBridge.

Attachez le déclencheur à votre pipeline

Pour vous rattacher PipelineSchedule à votre pipeline, put_triggers appelez l'appel sur l'objet de pipeline que vous avez créé avec une liste de déclencheurs. Si vous obtenez une réponseARN, cela signifie que vous avez créé le calendrier avec succès dans votre compte et EventBridge que vous commencez à appeler le pipeline cible à l'heure ou au rythme spécifiés. Vous devez spécifier un rôle doté des autorisations appropriées pour associer des déclencheurs à un pipeline parent. Si vous n'en fournissez pas, Pipelines extrait le rôle par défaut utilisé pour créer le pipeline à partir du fichier de configuration.

L'exemple suivant montre comment associer un calendrier à un 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>)

Décrire les déclencheurs actuels

Pour récupérer des informations sur les déclencheurs de pipeline que vous avez créés, vous pouvez les invoquer describe_trigger() API avec le nom du déclencheur. Cette commande renvoie des détails sur l'expression de planification créée, tels que son heure de début, son état activé et d'autres informations utiles. L'extrait suivant montre un exemple d'invocation :

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

Nettoyer les ressources du déclencheur

Avant de supprimer votre pipeline, nettoyez les déclencheurs existants pour éviter une fuite de ressources dans votre compte. Vous devez supprimer les déclencheurs avant de détruire le pipeline parent. Vous pouvez supprimer vos déclencheurs en transmettant une liste de noms de déclencheurs au delete_triggersAPI. L'extrait suivant montre comment supprimer des déclencheurs.

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

Tenez compte des limites suivantes lorsque vous supprimez vos déclencheurs :

  • L'option permettant de supprimer les déclencheurs en spécifiant les noms des déclencheurs n'est disponible qu'en SageMaker PythonSDK. La suppression du pipeline dans le CLI ou un DeletePipeline API appel ne supprime pas vos déclencheurs. Par conséquent, les déclencheurs deviennent orphelins et SageMaker tentent de démarrer une exécution pour un pipeline inexistant.

  • De même, si vous utilisez une autre session de bloc-notes ou si vous avez déjà supprimé la cible du pipeline, nettoyez les plannings orphelins via le planificateur CLIou la console. EventBridge