本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
排程管道執行
您可以使用 Amazon EventBridge 排程 Amazon SageMaker 管道執行。 EventBridge Amazon EventBridge 中的目標支援 Amazon SageMaker 管道。 EventBridge 這可讓您根據事件匯流排中的任何事件,啟動模型建置管道執行。使用 EventBridge,您可以自動執行管道,並自動回應訓練工作或端點狀態變更等事件。事件包括正在上傳至 Amazon S3 儲存貯體的新檔案、因偏離而變更 Amazon SageMaker AI 端點的狀態,以及 Amazon Simple Notification Service (SNS) 主題。
可自動啟動下列管道動作:
-
StartPipelineExecution
如需排程 SageMaker AI 任務的詳細資訊,請參閱使用 Amazon EventBridge 自動化 SageMaker AI。
使用 Amazon EventBridge 為管道排程
若要使用 Amazon CloudWatch Events 開始管道執行,您必須建立 EventBridge 規則。當您為事件建立規則時,您可以指定當 EventBridge 收到符合規則的事件時要採取的目標動作。當事件符合規則時,EventBridge 會將事件傳送到指定目標並啟動規則中定義的動作。
下列教學課程示範如何使用 EventBridge 主控台或 AWS CLI為管道執行排程。
先決條件
-
EventBridge 在
SageMaker::StartPipelineExecution
許可下可以擔任的角色。如果您從 EventBridge 主控台建立規則,則可以自動建立此角色;否則,您需要自行建立此角色。如需建立 SageMaker AI 角色的資訊,請參閱 SageMaker 角色。 -
要排程的 Amazon SageMaker AI 管道。若要建立 Amazon SageMaker AI 管道,請參閱定義管道。
使用 EventBridge 主控台建立 EventBridge 規則
下列程序示範如何使用 EventBridge 主控台建立 EventBridge 規則。
導覽至 EventBridge 主控台
。 -
選取左側的規則。
-
選取
Create Rule
。 -
輸入規則的名稱和說明。
-
選取啟動此規則的方式。您有下列規則選擇:
-
事件模式:當符合模式的事件發生時,您的規則就會啟動。您可以選擇符合特定事件類型的預先定義模式,也可以建立自訂模式。如果您選取預先定義的模式,可以編輯模式以對其進行自訂。如需有關事件模式的詳細資訊,請參閱 CloudWatch Events 中的事件模式。
-
排程:您的規則會按照指定排程定期啟動。您可以使用固定頻率排程,這類排程會按照指定的分鐘數、小時或週數啟動。您也可以使用 cron 表達式建立更精細的排程,例如 “每個月的第一個星期一早上 8 點”。自訂或合作夥伴事件匯流排不支援排程。
-
-
選取您所需的事件匯流排。
-
選取當事件符合您的事件模式或排程啟動時要調用的目標。最多可為每個規則新增 5 個目標。在下拉式清單中選取
SageMaker Pipeline
。 -
從管道下拉式清單中選取要啟動的管道。
-
使用名稱和值對新增要傳遞至管道執行的參數。參數值可為靜態或動態。如需 Amazon SageMaker AI Pipeline 參數的詳細資訊,請參閱AWS::Events::Rule SagemakerPipelineParameters。
-
每次啟動管道時,靜態值都會傳遞給管道執行。例如,如果已在參數清單中指定
{"Name": "Instance_type", "Value": "ml.4xlarge"}
,則每次 EventBridge 啟動管道時,它都會作為參數在StartPipelineExecutionRequest
中傳遞。 -
動態值是使用 JSON 路徑指定的。EventBridge 會剖析事件承載中的值,然後將其傳遞至管道執行。例如:
$.detail.param.value
-
-
選取要用於此規則的角色。您可使用現有的角色或建立新角色。
-
(可選) 新增標籤。
-
選取
Create
以完成規則。
您的規則現已生效,可用於啟動管道執行了。
使用 AWS CLI 建立 EventBridge 規則
下列程序示範如何使用 AWS CLI建立 EventBridge 規則。
-
建立要啟動的規則。使用 建立 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>
-
-
新增當事件符合您的事件模式或排程啟動時要調用的目標。最多可為每個規則新增 5 個目標。 對於每個目標,您必須指定以下內容:
-
ARN:管道的資源 ARN。
-
角色 ARN:EventBridge 執行管道所用的角色 ARN。
-
參數:要傳遞的 Amazon SageMaker AI 管道參數。
-
-
執行下列命令,使用 put-targets 將 Amazon SageMaker AI 管道作為目標傳遞至您的規則:
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 建立管道排程。
所需的許可
您需要具有使用管道排程器的必要許可。完成下列步驟以設定您的許可:
將下列最低權限政策連接至用於建立管道觸發條件的 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" } } } ] }
將服務主體新增至此角色的信任政策
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
建構函數,您可以將管道排程為執行一次或按預定間隔執行。管道排程的類型必須為 at
、 rate
或 cron
。這組排程類型是 EventBridge 排程選項的延伸。如需如何使用 PipelineSchedule
類別的詳細資訊,請參閱 sagemaker.workflow.triggers.PipelineSchedulePipelineSchedule
。
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 或
DeletePipeline
API 呼叫中刪除管道並不會刪除您的觸發。因此,觸發會變得孤立,而 SageMaker AI 會嘗試為不存在的管道啟動執行。此外,如果您使用另一個筆記本工作階段或已刪除管道目標,請透過排程器 CLI
或 EventBridge 主控台清除孤立的排程。