排定機器學習管線作業
適用於:Azure CLI ml 延伸模組 v2 (目前)Python SDK azure-ai-ml v2 (目前)
在本文中,您可了解如何排程要在 Azure 上執行的機器學習管線。 您可以排程例行工作,例如重新定型模型,或根據經過的時間定期更新批次預測。
本文說明如何使用 Azure Machine Learning CLI、Azure Machine Learning SDK v2 for Python 或 Azure Machine Learning 工作室 UI 來建立、擷取、更新和停用排程。
提示
若要使用外部協調器 (例如 Azure Data Factory 或 Microsoft Fabric) 來排程作業,請考慮在批次端點下部署管線作業。 如需詳細資訊,請參閱將現有的管線作業部署至批次端點和使用批次端點從 Fabric 執行 Azure Machine Learning 模型 (預覽)。
必要條件
- Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
- Azure Machine Learning 工作區。 若要建立工作區,請參閱建立工作區資源。
- 了解 Azure Machine Learning 管線。 如需相關資訊,請參閱什麼是機器學習管線。
- 遵循安裝、設定和使用 CLI (v2) 中的指示所安裝的 Azure CLI 和
ml
延伸模組。 - 如何建立 Azure Machine Learning YAML 管線的知識。 如需相關資訊,請參閱使用元件搭配 Azure Machine Learning CLI 建立和執行機器學習管線。
限制
- Azure Machine Learning v2 排程不支援事件型觸發程序。
- CLI 和 SDK v2 排程支援指定包含多個觸發程序時間戳記的複雜週期模式。 工作室 UI 會顯示複雜的模式,但不支援編輯它們。
- 工作室 UI 僅支援 v2 排程,且無法列出或存取以發佈的管線或管線端點為基礎的 v1 排程。 您可以為未發佈的管線建立排程。
- 如果週期設定為每個月的第 31 天或第 30 天,排程就不會在天數較少的月份觸發作業。
- cron 排程運算式不支援
DAYS
和MONTHS
值。 針對這些參數傳遞的值會被忽略並視為*
。
建立排程
若管線作業的效能和輸出令人滿意,您可以設定一個排程,以定期自動觸發此作業。 若要這麼做,您必須建立排程以將作業與觸發程序建立關聯。 觸發成續可以是 recurrence
模式,或是可指定執行作業間隔和頻率的 cron
運算式。
在這兩種情況下,您必須以內嵌方式或藉由指定現有的管線作業,先定義管線作業。 您可以在 YAML 中定義管線,並從 CLI 執行管線、在 Python 中以內嵌方式製作管線,或在 Azure Machine Learning 工作室中撰寫管線。 您可以在本機建立管線作業,或從工作區中的現有作業建立管線作業。
您可以使用工作室 UI、SDK v2 或 CLI v2 來建立 v2 或 v1 管線作業的 v2 排程。 您不需要先發佈現有的管線,即可設定管線作業的排程。
使用週期模式定義以時間為基礎的排程
下列 YAML 程式碼會定義管線作業的週期性排程。 必要的 type
參數會指定 trigger
類型為 recurrence
。
$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
您必須或可以提供下列排程參數:
參數
frequency
(必要) 是排程引發所依據的時間單位。 可以是minutes
、hours
、days
、weeks
或months
。interval
(必要) 是排程週期之間的時間單位數目。schedule
(選擇性) 會定義迴圈模式,其可包含hours
、minutes
和weekdays
。 如果省略,作業會根據start_time
、frequency
和interval
的邏輯觸發。- 當
frequency
是day
時,模式可以指定hours
和minutes
。 - 當
frequency
是week
或month
時,模式可以指定hours
、minutes
和weekdays
。hours
是從 0 到 23 的整數或清單。minutes
是從 0 到 59 的整數或清單。weekdays
是從monday
到sunday
的字串或清單。
- 當
start_time
(選用) 是具有時區的開始日期和時間。 如果省略,預設值等於排程建立時間。 如果開始時間已過,第一個作業將在下一個算出的執行階段執行。end_time
(選用) 是具有時區的結束日期和時間。 如果省略,排程會維持使用中狀態,直到手動停用為止。time_zone
(選用) 指定週期排程的時區。 如果省略,預設值為國際標準時間 (UTC)。 如需時區值的詳細資訊,請參閱時區值的附錄。
建立排程 YAML 後,使用下列命令,透過 CLI 建立排程:
# This action creates related resources for a schedule. It takes dozens of seconds to complete.
az ml schedule create --file simple-pipeline-job.yml --no-wait
使用 cron 運算式定義以時間為基礎的排程
Cron 運算式可為排程指定彈性且自訂的週期模式。 標準 crontab 運算式是由以空白分隔的欄位 MINUTES HOURS DAYS MONTHS DAYS-OF-WEEK
所組成。 萬用字元 *
表示欄位的所有值。
在 Azure Machine Language 排程 cron 運算式中:
MINUTES
是從 0 到 59 的整數或清單。HOURS
是從 0 到 23 的整數或清單。- 不支援
DAYS
值,而且一律會被視為*
。 以DAYS
為單位的*
值表示一個月的所有天數,其會因月份和年份而異。 - 不支援
MONTHS
值,而且一律會被視為*
。 DAYS-OF-WEEK
是從 0 到 6 的整數或清單,其中 0 = 星期日。 也接受星期幾的名稱。
例如,運算式 15 16 * * 1
表示每週一下午 4:15 (UTC)。 如需 crontab 表達式的詳細資訊,請參閱 GitHub 上的 Crontab 表達式 Wiki。
下列 YAML 程式碼會定義管線作業的週期性排程。 必要的 type
參數會指定 trigger
類型為 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
您必須或可以提供下列排程參數:
參數
expression
(必要) 是表示週期性排程的標準 crontab 運算式。start_time
(選用) 是具有時區的排程開始日期和時間。 例如,start_time: "2022-05-10T10:15:00-04:00"
表示排程從 2022 年 5 月 10 日上午 10:15:00 開始 (UTC-4 時區)。 如果省略,預設值等於排程建立時間。 如果開始時間已過,第一個作業將在下一個算出的執行階段執行。end_time
(選用) 是具有時區的結束日期和時間。 如果省略,排程會維持使用中狀態,直到手動停用為止。time_zone
(選用) 指定週期排程的時區。 若省略,預設值為 UTC。
建立排程 YAML 後,使用下列命令,透過 CLI 建立排程:
# This action creates related resources for a schedule. It takes dozens of seconds to complete.
az ml schedule create --file simple-pipeline-job.yml --no-wait
在定義排程時變更作業設定
有時候,建議您讓排程所觸發的作業具有與測試作業不同的設定。 當您使用現有的作業定義排程時,您可以變更作業設定。 此方法可讓您定義多個排程,這些排程會使用相同的作業搭配不同的輸入。
當您定義排程時,您可變更要在執行管線作業時使用的 settings
、inputs
或 outputs
。 您也可以變更所觸發作業的 experiment_name
。
下列排程定義會變更現有作業的設定。
$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
在排程中使用支援的運算式
當您定義排程時,可使用下列巨集運算式來定義動態參數值,以在作業執行階段解析為實際值。
運算式 | 描述 | 支援的屬性 |
---|---|---|
${{name}} |
作業的名稱 | 管線作業的 outputs 路徑 |
${{creation_context.trigger_time}} |
作業的觸發時間 | 管線作業的字串類型 inputs |
管理排程
您可以在工作區中列出、檢視詳細資料、更新、停用、啟用和刪除排程。
列出排程
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
刪除排程
重要
您必須先停用排程才能予以刪除。 刪除是永久且無法復原的作業。
az ml schedule delete -n simple_cron_job_schedule
從排程查詢觸發作業
由特定排程觸發的作業全都有顯示名稱 <schedule_name>-YYYYMMDDThhmmssZ
。 例如,如果名為 named-schedule
的排程從 2021 年 1 月 1 日上午 6 點開始每隔 12 小時執行一次,則所建立作業的顯示名稱如下所示:
- 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')]"
提示
工作室中排程詳細資料頁面上的 [作業歷程記錄] 索引標籤提供簡單的方法來尋找排程觸發的所有作業。
角色型存取控制 (RBAC) 支援
因為排程使用於生產環境,所以務必減少操作錯誤的可能性和影響。 工作區管理員可限制在工作區中建立和管理排程的存取權。
系統管理員可以在 Azure 入口網站中設定與排程相關的下列動作規則。 如需詳細資訊,請參閱 管理 Azure Machine Learning 工作區。
動作 | 描述 | 規則 |
---|---|---|
參閱 | 取得和列出排程 | Microsoft.MachineLearningServices/workspaces/schedules/read |
寫入 | 建立、更新、停用和啟用排程 | Microsoft.MachineLearningServices/workspaces/schedules/write |
刪除 | 刪除排程 | Microsoft.MachineLearningServices/workspaces/schedules/delete |
成本考量
排程會根據排程數目計費。 每個排程都會建立 Azure Machine Learning 代表 (HOBO) 使用者裝載的邏輯應用程式。
此邏輯應用程式會向使用者的 Azure 訂用帳戶收費。 HOBO 資源成本會使用原始資源提供者發出的相同計量來計費。 費用會出現在主機資源底下,也就是 Azure Machine Learning 工作區。