排定機器學習管線作業

適用於:Azure CLI ml 延伸模組 v2 (目前)Python SDK azure-ai-ml v2 (目前)

在本文中,您會了解如何以程式設計方式排程要在 Azure 上執行的管線,並使用排程 UI 執行相同操作。 您可以根據已耗用時間建立排程。 依時排程可用來處理常式工作,例如為保持最新狀態,重新定型模型或定期執行批次預測。 了解如何建立排程後,您將繼續了解如何透過 CLI、SDK 和 studio UI 擷取、更新和停用排程。

提示

如果您需要使用外部協調器 (例如 Azure Data Factory 或 Microsoft Fabric) 來排程作業,請考慮在批次端點下部署管線作業。 深入了解如何在批次端點下部署作業,以及如何從 Microsoft Fabric 取用批次端點

必要條件

排程管線作業

若要定期執行管道作業,即須建立排程。 Schedule 關聯作業和觸發程序。 觸發程序可以是 cron 使用 cron 運算式描述執行間的等候,或 recurrence 指定使用觸發作業的頻率。 在每個案例中,您必須先定義管道作業,此作業可以是現有的管道作業,或管道作業定義內嵌,請參閱在 CLI 中建立管道作業在 SDK 中建立管道作業

您可以在本機中排程管道作業 yaml,或在工作區中排程現有的管道作業。

建立排程

使用定期模式建立依據時間的排程

適用於:Azure CLI ml 延伸模組 v2 (目前)

$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 指定描述排程啟動頻率的時間單位。 單位可以是 minutehourdayweekmonth

  • (必要)interval 根據頻率指定排程啟動週期,即等候排程再次啟動的時間單位數。

  • (選用) schedule 定義定期模式,包含 hoursminutesweekdays

    • frequencyday 時,模式可以指定 hoursminutes
    • frequencyweekmonth 時,模式可以指定 hoursminutesweekdays
    • hours 應為整數或清單 (0 到 23)。
    • minutes 應為整數或清單 (0 到 59)。
    • weekdays 可以是 mondaysunday 的字串或清單。
    • 如果省略 schedule,即根據 start_timefrequencyinterval 的邏輯觸發作業。
  • (選用) start_time 描述包含時區的開始日期和時間。 如果省略 start_time,start_time 會等於作業建立的時間。 如果開始時間已結束,第一個作業會在下一個計算的執行時間執行。

  • (選用) end_time 描述包含時區的結束日期和時間。 如果省略 end_time,排程會繼續觸發作業,直到手動停用排程為止。

  • (選用) time_zone 指定定期的時區。 如果省略,即預設為 UTC。 若要深入了解時區值,請參閱時區值的附件

使用 cron 運算式建立依據時間的排程

適用於:Azure CLI ml 延伸模組 v2 (目前)

$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

    重要

    不支援 DAYSMONTH。 如果您傳遞值,運算式會忽略此值並視為 *

  • (選用) start_time 指定包含排程時區的開始日期和時間。 start_time: "2022-05-10T10:15:00-04:00" 即排程以 UTC-4 時區的 2022 年 5 月 10 日上午 10:15:00 開始。 如果省略 start_timestart_time 會等於排程建立時間。 如果開始時間已結束,第一個作業會在下一個計算的執行時間執行。

  • (選用) end_time 描述包含時區的結束日期和時間。 如果省略 end_time,排程會繼續觸發作業,直到手動停用排程為止。

  • (選用) time_zone 指定運算式的時區。 如果省略,即預設為 UTC。 請參閱時區值的附件

限制:

  • 目前 Azure Machine Learning v2 排程不支援事件型觸發程序。
  • 您可以使用 Azure Machine Learning SDK/CLI v2 指定包含多個觸發時間戳記的複雜定期模式,UI 則只會顯示複雜模式,而不支援編輯。
  • 如果您將定期設為每月 31 號,對於日期少於 31 天的月份,排程便不會觸發作業。

定義排程時變更執行階段設定

使用現有作業定義排程時,您可以變更作業的執行階段設定。 使用此方法,您可以使用包含不同輸入的相同作業,定義多重排程。

適用於:Azure CLI ml 延伸模組 v2 (目前)

$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

管理排程

建立排程

適用於:Azure CLI ml 延伸模組 v2 (目前)

建立排程 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

列出工作區中的排程

適用於:Azure CLI ml 延伸模組 v2 (目前)

az ml schedule list

檢查排程詳細資料

適用於:Azure CLI ml 延伸模組 v2 (目前)

az ml schedule show -n simple_cron_job_schedule

更新排程

適用於:Azure CLI ml 延伸模組 v2 (目前)

az ml schedule update -n simple_cron_job_schedule  --set description="new description" --no-wait

注意

如果您不只要更新標籤/說明,建議您使用 az ml schedule create --file update_schedule.yml

停用排程

適用於:Azure CLI ml 延伸模組 v2 (目前)

az ml schedule disable -n simple_cron_job_schedule --no-wait

啟用排程

適用於:Azure CLI ml 延伸模組 v2 (目前)

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 Machine Learning 工作室 中 [作業] 索引標籤的螢幕快照。

您也可以套用 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 查看排程詳細資料頁面上的作業記錄


刪除排程

重要

排程必須停用才能刪除。 刪除是不可復原的動作。 排程一經刪除,即無法存取或復原。

適用於:Azure CLI ml 延伸模組 v2 (目前)

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 排程不支援事件型排程。

下一步