本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
排程管道執行
您可以使用 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 規則。
導覽至EventBridge 主控台
。 -
選取左側的規則。
-
選取
Create Rule
。 -
輸入規則的名稱和說明。
-
選取啟動此規則的方式。您有下列規則選擇:
-
事件模式:當符合模式的事件發生時,您的規則就會啟動。您可以選擇符合特定事件類型的預先定義模式,也可以建立自訂模式。如果您選取預先定義的模式,可以編輯模式以對其進行自訂。如需事件模式的詳細資訊,請參閱 CloudWatch 事件 中的事件模式。
-
排程:您的規則會按照指定排程定期啟動。您可以使用固定頻率排程,這類排程會按照指定的分鐘數、小時或週數啟動。您也可以使用 cron 表達式建立更精細的排程,例如 “每個月的第一個星期一早上 8 點”。自訂或合作夥伴事件匯流排不支援排程。
-
-
選取您所需的事件匯流排。
-
選取當事件符合您的事件模式或排程啟動時要調用的目標。最多可為每個規則新增 5 個目標。在下拉式清單中選取
SageMaker Pipeline
。 -
從管道下拉式清單中選取要啟動的管道。
-
使用名稱和值對新增要傳遞至管道執行的參數。參數值可為靜態或動態。如需 Amazon SageMaker Pipeline 參數的詳細資訊,請參閱 AWS::Events::Rule SagemakerPipelineParameters。
-
每次啟動管道時,靜態值都會傳遞給管道執行。例如,如果
{"Name": "Instance_type", "Value": "ml.4xlarge"}
在參數清單中指定 ,則StartPipelineExecutionRequest
每次 EventBridge 啟動管道時都會以參數形式傳遞。 -
動態值是使用 JSON path. EventBridge parses 來自事件承載的值來指定,然後傳遞至管道執行。例如:
$.detail.param.value
-
-
選取要用於此規則的角色。您可使用現有的角色或建立新角色。
-
(可選) 新增標籤。
-
選取
Create
以完成規則。
您的規則現已生效,可用於啟動管道執行了。
使用 建立 EventBridge 規則 AWS CLI
下列程序說明如何使用 建立 EventBridge 規則 AWS CLI。
-
建立要啟動的規則。使用 建立 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:角色ARN的 EventBridge 應擔任 來執行管道。
-
參數:要傳遞的 Amazon SageMaker 管道參數。
-
-
執行下列命令,使用 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。
所需的許可
您需要具有使用管道排程器的必要許可。完成下列步驟以設定您的許可:
將下列最低權限政策連接至用於建立管道觸發程序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 嘗試啟動不存在管道的執行。此外,如果您使用另一個筆記本工作階段或已刪除管道目標,請透過排程器CLI
或 EventBridge 主控台清除孤立排程。