パイプライン実行のスケジュール - Amazon SageMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

パイプライン実行のスケジュール

Amazon SageMaker モデル構築パイプラインの実行は、Amazon EventBridgeを使用してスケジュールできます。Amazon SageMaker Model Building Pipelines は、Amazon EventBridgeのターゲットとしてサポートされています。これにより、イベントバス内の任意のイベントに基づいて、モデル構築パイプラインの実行を開始できます。を使用すると EventBridge、パイプラインの実行を自動化し、トレーニングジョブやエンドポイントのステータスの変更などのイベントに自動的に対応できます。イベントには、Amazon S3 バケットにアップロードされる新しいファイル、ドリフトによる Amazon SageMaker エンドポイントのステータスの変更、Amazon Simple Notification Service (SNS) トピックが含まれます。

次の SageMaker パイプラインアクションを自動的に開始できます。 

  • StartPipelineExecution

SageMaker ジョブのスケジュールの詳細については、「Amazon SageMaker による自動化」を参照してください EventBridge。

Amazon でパイプラインをスケジュールする EventBridge

Amazon CloudWatch Events でパイプラインの実行を開始するには、 EventBridgeルール を作成する必要があります。イベントのルールを作成するときは、 がルールに一致するイベント EventBridge を受信したときに実行するターゲットアクションを指定します。イベントがルールに一致すると、 EventBridge は指定されたターゲットにイベントを送信し、ルールで定義されたアクションを開始します。

以下のチュートリアルでは、 コンソールまたは EventBridge を使用して でパイプラインの実行を EventBridgeスケジュールする方法を示します AWS CLI。 

前提条件

  • アクセス許可でSageMaker::StartPipelineExecution が引き受け EventBridge ることができるロール。このロールは、コンソールから EventBridgeルールを作成すると自動的に作成できます。作成しない場合は、このロールを自分で作成する必要があります。 SageMaker ロールの作成については、SageMaker 「ロール」を参照してください。

  • スケジュールする Amazon SageMaker Pipeline。Amazon SageMaker Pipeline を作成するには、「パイプラインの定義」を参照してください。

コンソール EventBridgeを使用して EventBridge ルールを作成する

次の手順は、 EventBridge コンソールを使用して EventBridge ルールを作成する方法を示しています。 

  1. EventBridge コンソール に移動します。

  2. 左側にある [Rules] (ルール) を選択します。

  3. Create Rule を選択します。

  4. ルールの名前と説明を入力します。

  5. このルールの開始方法を選択します。ルールには、次の選択肢があります。

    • Event pattern (イベントパターン): パターンに一致するイベントが発生したときにルールが開始されます。特定のタイプのイベントに一致する事前定義済みのパターンを選択するか、カスタムパターンを作成できます。事前定義済みパターンを選択した場合は、このパターンを編集してカスタマイズできます。イベントパターンの詳細については、「イベント のイベントパターン CloudWatch 」を参照してください。

    • Schedule (スケジュール): ルールは指定されたスケジュールに従って定期的に開始されます。指定した分数、時間数、週数で定期的に開始する固定レートのスケジュールを使用できます。また、cron 式を使用すれば、「毎月第 1 月曜日の午前 8 時」など、よりきめ細かいスケジュールを作成できます。カスタムイベントバスまたはパートナーイベントバスでは、スケジュールはサポートされていません。

  6. 目的のイベントバスを選択します。

  7. イベントがイベントパターンと一致した場合またはスケジュールが開始された場合に呼び出すターゲットを選択します。1 件のルールあたり最大 5 個のターゲットを追加できます。ターゲットドロップダウンリストで [SageMaker Pipeline] を選択します。

  8. パイプラインのドロップダウンリストから、開始するパイプラインを選択します。

  9. 名前と値のペアを使用して、パイプラインの実行に渡すパラメータを追加します。パラメータ値は、静的な値または動的な値を使用できます。Amazon SageMaker Pipeline パラメータの詳細については、AWS「::Events::Rule SagemakerPipelineParameters」を参照してください。

    • 静的な値は、パイプラインが開始されるたびにパイプラインの実行に渡されます。例えば、 {"Name": "Instance_type", "Value": "ml.4xlarge"}がパラメータリストで指定されている場合、 がパイプライン EventBridge を開始するStartPipelineExecutionRequestたびに にパラメータとして渡されます。

    • 動的値は JSON path. EventBridge parses イベントペイロードから値を解析し、パイプライン実行に渡します。例: $.detail.param.value

  10. このルールに使用するロールを選択します。既存のロールを使用するか、新しいロールを作成できます。

  11. (オプション) タグを追加します。

  12. Create を選択して、ルールを確定します。

これでルールが有効になり、パイプラインの実行を開始する準備が整います。

を使用して EventBridge ルールを作成する AWS CLI

次の手順は、 を使用して EventBridge ルールを作成する方法を示しています AWS CLI。

  1. 開始するルールを作成します。を使用して EventBridge ルールを作成する場合 AWS CLI、ルールの開始方法にはイベントパターンとスケジュールの 2 つのオプションがあります。

    • Event pattern (イベントパターン): パターンに一致するイベントが発生したときにルールが開始されます。特定のタイプのイベントに一致する事前定義済みのパターンを選択するか、カスタムパターンを作成できます。事前定義済みのパターンを選択した場合は、このパターンを編集してカスタマイズできます。  次のコマンドを使用すると、イベントパターンによるルールを作成できます。

      aws events put-rule --name <RULE_NAME> ----event-pattern <YOUR_EVENT_PATTERN> --description <RULE_DESCRIPTION> --role-arn <ROLE_TO_EXECUTE_PIPELINE> --tags <TAGS>
    • Schedule (スケジュール): ルールは指定したスケジュールに従って定期的に開始されます。指定した分数、時間数、週数で定期的に開始する固定レートのスケジュールを使用できます。また、cron 式を使用すれば、「毎月第 1 月曜日の午前 8 時」など、よりきめ細かいスケジュールを作成できます。カスタムイベントバスまたはパートナーイベントバスでは、スケジュールはサポートされていません。次のコマンドを使用すると、スケジュールによるルールを作成できます。

      aws events put-rule --name <RULE_NAME> --schedule-expression <YOUR_CRON_EXPRESSION> --description <RULE_DESCRIPTION> --role-arn <ROLE_TO_EXECUTE_PIPELINE> --tags <TAGS>
  2. イベントがイベントパターンと一致した場合またはスケジュールが開始された場合に呼び出すターゲットを追加します。1 件のルールあたり最大 5 個のターゲットを追加できます。  ターゲットごとに、以下を指定する必要があります。 

    • ARN: パイプラインARNのリソース。

    • ロール ARN: パイプラインを実行するためにロールARNの が引き受け EventBridge る必要があります。

    • パラメータ: 渡す Amazon SageMaker パイプラインパラメータ。

  3. 次のコマンドを実行して、put-targets を使用して Amazon SageMaker パイプラインをターゲットとしてルールに渡します。

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

SageMaker Python でパイプラインをスケジュールする SDK

以下のセクションでは、Python を使用して EventBridge リソースにアクセスし、パイプラインスケジュールを作成するアクセス許可を設定する方法を示します SageMaker SDK。

必要なアクセス許可

パイプラインスケジューラを使用するには、必要なアクセス許可が必要です。アクセス許可を設定するには、次のステップを実行します。

  1. パイプライントリガーの作成に使用するIAMロールに次の最小権限ポリシーをアタッチするか、 AWS 管理ポリシー を使用しますAmazonEventBridgeSchedulerFullAccess

    { "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. このロールの信頼ポリシーにサービスプリンシパル EventBridge を追加してscheduler.amazonaws.com、 との信頼関係を確立します。 SageMaker Studio でノートブックを起動する場合は、必ず次の信頼ポリシーを実行ロールにアタッチしてください。

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

パイプラインスケジュールを作成する

PipelineSchedule コンストラクタを使用すると、パイプラインを 1 回または所定の間隔で実行するようにスケジュールできます。パイプラインスケジュールは、at、、rateまたは のタイプである必要がありますcron。このスケジューリングタイプのセットは、EventBridge スケジューリングオプション を拡張したものです。PipelineSchedule クラスの使用方法の詳細については、「sagemaker.workflow.triggers」を参照してください。PipelineSchedule次の例は、 を使用して各スケジューリングタイプを作成する方法を示しています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" )
注記

1 回限りのスケジュールを作成し、現在の時刻にアクセスする必要がある場合は、 datetime.utcnow()の代わりに を使用しますdatetime.now()。後者には現在のゾーンコンテキストが保存されず、 に渡される時間が正しくありません EventBridge。

トリガーをパイプラインにアタッチする

をパイプラインPipelineScheduleにアタッチするには、作成したパイプラインオブジェクトの put_triggers 呼び出しをトリガーのリストで呼び出します。レスポンス が表示された場合ARN、アカウントでスケジュールが正常に作成され、指定された時刻またはレートでターゲットパイプラインの呼び出し EventBridge が開始されます。親パイプラインにトリガーをアタッチするには、正しいアクセス許可を持つロールを指定する必要があります。指定しない場合、 SageMaker パイプラインは設定ファイル からパイプラインの作成に使用されるデフォルトのロールを取得します。

次の例は、スケジュールをパイプラインにアタッチする方法を示しています。

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

現在のトリガーを記述する

作成したパイプライントリガーに関する情報を取得するには、トリガー名describe_trigger()APIで を呼び出します。このコマンドは、開始時刻、有効状態、その他の有用な情報など、作成されたスケジュール式に関する詳細を返します。次のスニペットは、サンプル呼び出しを示しています。

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

クリーンアップトリガーリソース

パイプラインを削除する前に、既存のトリガーをクリーンアップして、アカウントのリソースリークを回避します。親パイプラインを破棄する前に、トリガーを削除する必要があります。トリガー名のリストを delete_triggers に渡すことで、トリガーを削除できますAPI。次のスニペットは、トリガーを削除する方法を示しています。

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

トリガーを削除するときは、次の制限に注意してください。

  • トリガー名を指定してトリガーを削除するオプションは、 SageMaker Python でのみ使用できますSDK。CLI または DeletePipelineAPI呼び出しでパイプラインを削除しても、トリガーは削除されません。その結果、トリガーは孤立し、存在しないパイプラインの実行を開始 SageMaker しようとします。

  • また、別のノートブックセッションを使用している場合、またはパイプラインターゲットをすでに削除している場合は、スケジューラCLIまたは EventBridge コンソールを使用して孤立したスケジュールをクリーンアップします。