排程管道執行 - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

排程管道執行

您可以使用 Amazon 排程 Amazon EventBridge SageMaker Pipelines 執行。Amazon 支援 Amazon EventBridge SageMaker Pipelines 作為目標。這可讓您根據事件匯流排中的任何事件,啟動模型建置管道執行。透過 EventBridge,您可以自動化管道執行,並自動回應訓練任務或端點狀態變更等事件。事件包括要上傳至 Amazon S3 儲存貯體的新檔案、因偏離而變更 Amazon SageMaker 端點的狀態,以及 Amazon Simple Notification Service (SNS) 主題。

可自動啟動下列管道動作: 

  • StartPipelineExecution

如需排程 SageMaker 任務的詳細資訊,請參閱 SageMaker 使用 Amazon 自動執行 EventBridge。

使用 Amazon 排程管道 EventBridge

若要使用 Amazon CloudWatch Events 啟動管道執行,您必須建立 EventBridge規則 。當您為事件建立規則時,您可以指定當 EventBridge 收到符合規則的事件時要採取的目標動作。當事件符合規則時, EventBridge 會將事件傳送至指定的目標,並啟動規則中定義的動作。

下列教學課程示範如何使用 EventBridge 主控台或 來 EventBridge排程管道執行 AWS CLI。 

必要條件

  • EventBridge 可以使用 許可擔任SageMaker::StartPipelineExecution的角色。如果您從 EventBridge主控台建立規則,可以自動建立此角色;否則,您需要自行建立此角色。如需建立 SageMaker 角色的相關資訊,請參閱SageMaker 角色

  • 要排程的 Amazon SageMaker 管道。若要建立 Amazon SageMaker Pipeline,請參閱定義管道。

使用 EventBridge主控台建立 EventBridge 規則

下列程序說明如何使用 EventBridge 主控台建立 EventBridge 規則。 

  1. 導覽至EventBridge 主控台

  2. 選取左側的規則

  3. 選取 Create Rule

  4. 輸入規則的名稱和說明。

  5. 選取啟動此規則的方式。您有下列規則選擇:

    • 事件模式:當符合模式的事件發生時,您的規則就會啟動。您可以選擇符合特定事件類型的預先定義模式,也可以建立自訂模式。如果您選取預先定義的模式,可以編輯模式以對其進行自訂。如需事件模式的詳細資訊,請參閱 CloudWatch 事件 中的事件模式

    • 排程:您的規則會按照指定排程定期啟動。您可以使用固定頻率排程,這類排程會按照指定的分鐘數、小時或週數啟動。您也可以使用 cron 表達式建立更精細的排程,例如 “每個月的第一個星期一早上 8 點”。自訂或合作夥伴事件匯流排不支援排程。

  6. 選取您所需的事件匯流排。

  7. 選取當事件符合您的事件模式或排程啟動時要調用的目標。最多可為每個規則新增 5 個目標。在下拉式清單中選取 SageMaker Pipeline

  8. 從管道下拉式清單中選取要啟動的管道。

  9. 使用名稱和值對新增要傳遞至管道執行的參數。參數值可為靜態或動態。如需 Amazon SageMaker Pipeline 參數的詳細資訊,請參閱 AWS::Events::Rule SagemakerPipelineParameters

    • 每次啟動管道時,靜態值都會傳遞給管道執行。例如,如果{"Name": "Instance_type", "Value": "ml.4xlarge"}在參數清單中指定 ,則StartPipelineExecutionRequest每次 EventBridge 啟動管道時都會以參數形式傳遞。

    • 動態值是使用 JSON path. EventBridge parses 來自事件承載的值來指定,然後傳遞至管道執行。例如:$.detail.param.value

  10. 選取要用於此規則的角色。您可使用現有的角色或建立新角色。

  11. (可選) 新增標籤。

  12. 選取 Create 以完成規則。

您的規則現已生效,可用於啟動管道執行了。

使用 建立 EventBridge 規則 AWS CLI

下列程序說明如何使用 建立 EventBridge 規則 AWS CLI。

  1. 建立要啟動的規則。使用 建立 EventBridge 規則時 AWS CLI,有兩個啟動規則的選項,即事件模式和排程。

    • 事件模式:當符合模式的事件發生時,您的規則就會啟動。您可以選擇符合特定事件類型的預先定義模式,也可以建立自訂模式。如果您選取預先定義的模式,可以編輯模式以對其進行自訂。  您可以使用下列命令建立具有事件模式的規則:

      aws events put-rule --name <RULE_NAME> ----event-pattern <YOUR_EVENT_PATTERN> --description <RULE_DESCRIPTION> --role-arn <ROLE_TO_EXECUTE_PIPELINE> --tags <TAGS>
    • 排程:您的規則會按照指定排程定期啟動。您可以使用固定頻率排程,這類排程會按照指定的分鐘數、小時或週數啟動。您也可以使用 cron 表達式建立更精細的排程,例如 “每個月的第一個星期一早上 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. 新增當事件符合您的事件模式或排程啟動時要調用的目標。最多可為每個規則新增 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

下列各節說明如何設定存取 EventBridge 資源的許可,並使用 SageMaker Python 建立管道排程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. 透過將服務主體新增至此角色的信任政策scheduler.amazonaws.com, EventBridge 與 建立信任關係。如果您在 SageMaker Studio 中啟動筆記本,請務必將下列信任政策連接至執行角色。

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

建立管道排程

使用PipelineSchedule建構器,您可以將管道排程為執行一次或預定間隔。管道排程必須為類型 atratecron。這組排程類型是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" )
注意

如果您建立一次性排程且需要存取目前時間,請使用 datetime.utcnow()而非 datetime.now()。後者不會儲存目前的區域內容,並導致傳遞給 的時間不正確 EventBridge。

將觸發條件連接至您的管道

若要將 PipelineSchedule 連接至您的管道,請使用觸發程序清單,在建立的管道物件上叫用 put_triggers呼叫。如果您收到回應 ARN,您已成功在帳戶中建立排程,並 EventBridge 開始在指定的時間或速率叫用目標管道。您必須指定具有正確許可的角色,才能將觸發條件連接至父管道。如果您沒有提供管道,管道會擷取用於從組態檔案 建立管道的預設角色。

下列範例示範如何將排程連接至管道。

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 主控台清除孤立排程。