排定機器學習管線作業
適用於:Azure CLI ml 延伸模組 v2 (目前)Python SDK azure-ai-ml v2 (目前)
在本文中,您會了解如何以程式設計方式排程要在 Azure 上執行的管線,並使用排程 UI 執行相同操作。 您可以根據已耗用時間建立排程。 依時排程可用來處理常式工作,例如為保持最新狀態,重新定型模型或定期執行批次預測。 了解如何建立排程後,您將繼續了解如何透過 CLI、SDK 和 studio UI 擷取、更新和停用排程。
提示
如果您需要使用外部協調器 (例如 Azure Data Factory 或 Microsoft Fabric) 來排程作業,請考慮在批次端點下部署管線作業。 深入了解如何在批次端點下部署作業,以及如何從 Microsoft Fabric 取用批次端點。
必要條件
- 您必須擁有 Azure 訂用帳戶才能使用 Azure Machine Learning。 如尚未擁有 Azure 訂用帳戶,請在開始之前先建立免費帳戶。 立即試用免費或付費版本的 Azure Machine Learning。
安裝 Azure CLI 和
ml
擴充功能。 遵循安裝、設定和使用 CLI (v2) 中的安裝步驟。建立 Azure Machine Learning 工作區 (如果沒有的話)。 若要建立工作區,請參閱安裝、設定和使用 CLI (v2)。
排程管線作業
若要定期執行管道作業,即須建立排程。 Schedule
關聯作業和觸發程序。 觸發程序可以是 cron
使用 cron 運算式描述執行間的等候,或 recurrence
指定使用觸發作業的頻率。 在每個案例中,您必須先定義管道作業,此作業可以是現有的管道作業,或管道作業定義內嵌,請參閱在 CLI 中建立管道作業和在 SDK 中建立管道作業。
您可以在本機中排程管道作業 yaml,或在工作區中排程現有的管道作業。
建立排程
使用定期模式建立依據時間的排程
$schema: https://azuremlschemas.azureedge.net/latest/schedule.schema.json
name: simple_recurrence_job_schedule
display_name: Simple recurrence job schedule
description: a simple hourly recurrence job schedule
trigger:
type: recurrence
frequency: day #can be minute, hour, day, week, month
interval: 1 #every day
schedule:
hours: [4,5,10,11,12]
minutes: [0,30]
start_time: "2022-07-10T10:00:00" # optional - default will be schedule creation time
time_zone: "Pacific Standard Time" # optional - default will be UTC
create_job: ./simple-pipeline-job.yml
# create_job: azureml:simple-pipeline-job
trigger
包含下列屬性:
- (必要)
type
指定排程類型為recurrence
。 類型也可以是cron
,請參閱下一節的詳細資料。
以下是清單接續。
注意
下列需要指定的屬性適用於 CLI 和 SDK。
(必要)
frequency
指定描述排程啟動頻率的時間單位。 單位可以是minute
、hour
、day
、week
、month
。(必要)
interval
根據頻率指定排程啟動週期,即等候排程再次啟動的時間單位數。(選用)
schedule
定義定期模式,包含hours
、minutes
和weekdays
。frequency
是day
時,模式可以指定hours
和minutes
。frequency
是week
和month
時,模式可以指定hours
、minutes
和weekdays
。hours
應為整數或清單 (0 到 23)。minutes
應為整數或清單 (0 到 59)。weekdays
可以是monday
到sunday
的字串或清單。- 如果省略
schedule
,即根據start_time
、frequency
和interval
的邏輯觸發作業。
(選用)
start_time
描述包含時區的開始日期和時間。 如果省略start_time
,start_time 會等於作業建立的時間。 如果開始時間已結束,第一個作業會在下一個計算的執行時間執行。(選用)
end_time
描述包含時區的結束日期和時間。 如果省略end_time
,排程會繼續觸發作業,直到手動停用排程為止。(選用)
time_zone
指定定期的時區。 如果省略,即預設為 UTC。 若要深入了解時區值,請參閱時區值的附件。
使用 cron 運算式建立依據時間的排程
$schema: https://azuremlschemas.azureedge.net/latest/schedule.schema.json
name: simple_cron_job_schedule
display_name: Simple cron job schedule
description: a simple hourly cron job schedule
trigger:
type: cron
expression: "0 * * * *"
start_time: "2022-07-10T10:00:00" # optional - default will be schedule creation time
time_zone: "Pacific Standard Time" # optional - default will be UTC
# create_job: azureml:simple-pipeline-job
create_job: ./simple-pipeline-job.yml
trigger
區段會定義排程詳細資料,並包含下列屬性:
- (必要)
type
指定排程類型為cron
。
以下是清單接續。
(必要)
expression
使用標準 crontab 運算式表示定期排程。 單一運算式由五個空格分隔欄位組成:MINUTES HOURS DAYS MONTHS DAYS-OF-WEEK
單一萬用字元 (
*
),涵蓋欄位所有的值。 所以以天為單位的*
即一個月的所有天數 (天數會因月份和年份而異)。上述範例中的
expression: "15 16 * * 1"
即每星期一下午 4:15。下表列出每個欄位的有效值:
欄位 範圍 註解 MINUTES
0-59 - HOURS
0-23 - DAYS
- 不支援。 此值會被忽略,並視為 *
。MONTHS
- 不支援。 此值會被忽略,並視為 *
。DAYS-OF-WEEK
0-6 零 (0) 即星期日。 也接受星期名稱。 若要深入了解如何使用 crontab 運算式,請參閱 GitHub 上的 Crontab 運算式 Wiki。
重要
不支援
DAYS
和MONTH
。 如果您傳遞值,運算式會忽略此值並視為*
。(選用)
start_time
指定包含排程時區的開始日期和時間。start_time: "2022-05-10T10:15:00-04:00"
即排程以 UTC-4 時區的 2022 年 5 月 10 日上午 10:15:00 開始。 如果省略start_time
,start_time
會等於排程建立時間。 如果開始時間已結束,第一個作業會在下一個計算的執行時間執行。(選用)
end_time
描述包含時區的結束日期和時間。 如果省略end_time
,排程會繼續觸發作業,直到手動停用排程為止。(選用)
time_zone
指定運算式的時區。 如果省略,即預設為 UTC。 請參閱時區值的附件。
限制:
- 目前 Azure Machine Learning v2 排程不支援事件型觸發程序。
- 您可以使用 Azure Machine Learning SDK/CLI v2 指定包含多個觸發時間戳記的複雜定期模式,UI 則只會顯示複雜模式,而不支援編輯。
- 如果您將定期設為每月 31 號,對於日期少於 31 天的月份,排程便不會觸發作業。
定義排程時變更執行階段設定
使用現有作業定義排程時,您可以變更作業的執行階段設定。 使用此方法,您可以使用包含不同輸入的相同作業,定義多重排程。
$schema: https://azuremlschemas.azureedge.net/latest/schedule.schema.json
name: cron_with_settings_job_schedule
display_name: Simple cron job schedule
description: a simple hourly cron job schedule
trigger:
type: cron
expression: "0 * * * *"
start_time: "2022-07-10T10:00:00" # optional - default will be schedule creation time
time_zone: "Pacific Standard Time" # optional - default will be UTC
create_job:
type: pipeline
job: ./simple-pipeline-job.yml
# job: azureml:simple-pipeline-job
# runtime settings
settings:
#default_compute: azureml:cpu-cluster
continue_on_step_failure: true
inputs:
hello_string_top_level_input: ${{name}}
tags:
schedule: cron_with_settings_schedule
定義排程時可以變更下列屬性:
屬性 | 說明 |
---|---|
設定 | 執行管道作業時使用的設定字典。 |
輸入 | 執行管道作業時使用的輸入字典。 |
輸出 | 執行管道作業時使用的輸入字典。 |
experiment_name | 觸發作業的實驗名稱。 |
注意
工作室 UI 使用者只能在建立排程時修改輸入、輸出和執行時間設定。 experiment_name
只能使用 CLI 或 SDK 來變更。
排程中支援的運算式
定義排程時,我們支援下列運算式,並在作業執行階段解析運算式為實際值。
運算式 | 描述 | 支援的屬性 |
---|---|---|
${{creation_context.trigger_time}} |
觸發排程的時間。 | 管道作業的字串類型輸入 |
${{name}} |
作業的名稱。 | 管道作業的 outputs.path |
管理排程
建立排程
建立排程 yaml 後,您可以使用下列命令,透過 CLI 建立排程。
# This action will create related resources for a schedule. It will take dozens of seconds to complete.
az ml schedule create --file cron-schedule.yml --no-wait
列出工作區中的排程
az ml schedule list
檢查排程詳細資料
az ml schedule show -n simple_cron_job_schedule
更新排程
az ml schedule update -n simple_cron_job_schedule --set description="new description" --no-wait
注意
如果您不只要更新標籤/說明,建議您使用 az ml schedule create --file update_schedule.yml
停用排程
az ml schedule disable -n simple_cron_job_schedule --no-wait
啟用排程
az ml schedule enable -n simple_cron_job_schedule --no-wait
從排程查詢觸發作業
排程觸發的作業所有顯示名稱會使用 <schedule_name>-YYYYMMDDThhmmssZ 為顯示名稱。 例如,如果建立從 2021 年 1 月 1 日上午 6 點開始,每 12 小時執行一次且名稱為 named-schedule 的排程,建立的作業顯示名稱即如下所示:
- named-schedule-20210101T060000Z
- named-schedule-20210101T180000Z
- named-schedule-20210102T060000Z
- named-schedule-20210102T180000Z 等
您也可以套用 Azure CLI JMESPath 查詢,查詢排程名稱觸發的作業。
# query triggered jobs from schedule, please replace the simple_cron_job_schedule to your schedule name
az ml job list --query "[?contains(display_name,'simple_cron_schedule')]"
注意
針對尋找排程所觸發的所有作業,如需更簡單的方式,請使用工作室 UI 查看排程詳細資料頁面上的作業記錄。
刪除排程
重要
排程必須停用才能刪除。 刪除是不可復原的動作。 排程一經刪除,即無法存取或復原。
az ml schedule delete -n simple_cron_job_schedule
RBAC (角色型存取控制) 支援
由於排程通常用於生產環境,為減少操作錯誤的影響,建議工作區管理員限制在工作區內建立和管理排程的存取權。
目前有三個動作規則與排程相關,您可以在 Azure 入口網站中設定。 您可以深入了解如何管理 Azure Machine Learning 工作區的存取權。
動作 | 描述 | 規則 |
---|---|---|
參閱 | 取得並列出 Machine Learning 工作區中的排程 | Microsoft.MachineLearningServices/workspaces/schedules/read |
寫入 | 在 Machine Learning 工作區中建立、更新、停用和啟用排程 | Microsoft.MachineLearningServices/workspaces/schedules/write |
刪除 | 刪除 Machine Learning 工作區中的排程 | Microsoft.MachineLearningServices/workspaces/schedules/delete |
成本考量
- 排程會根據排程數目計費,每個排程都會代表使用者建立裝載 Azure 機器學習 子的邏輯應用程式。
- 邏輯應用程式的成本會變更回使用者的 Azure 訂用帳戶,而且您可以使用原始 RP 發出的相同計量來計費 HOBO 資源的成本。 它們會顯示在主機資源下(工作區)。
常見問題集
為什麼 SDK 所建立的排程未列在 UI 中?
排程 UI 適用於 v2 排程。 因此,您的 v1 排程不會透過 UI 列出或存取。
不過,v2 排程也支援 v1 管線作業。 您不必先發佈管線,就可以直接設定管線作業的排程。
為什麼我的排程未在我之前設定的時間觸發作業?
- 根據預設,排程會使用 UTC 時區來計算觸發時間。 您可以在建立精靈中指定時區,或在排程詳細資料頁面中更新時區。
- 如果您將定期設為每月 31 號,對於日期少於 31 天的月份,排程便不會觸發作業。
- 如果您使用 Cron 運算式,則不支援 MONTH。 如果您傳遞值,則系統會忽略該值並將其視為 *。 這是已知限制。
是否支援事件型排程?
- 否,V2 排程不支援事件型排程。
下一步
- 深入了解 CLI (v2) 排程 YAML 結構描述。
- 了解如何在 CLI v2 中建立管道作業。
- 了解如何在 SDK v2 中建立管道作業。
- 深入了解 CLI (v2) 核心 YAML 語法。
- 深入了解管道。
- 深入了解元件。