共用方式為


排定機器學習管線作業

適用於: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 Machine Learning v2 排程不支援事件型觸發程序。
  • CLI 和 SDK v2 排程支援指定包含多個觸發程序時間戳記的複雜週期模式。 工作室 UI 會顯示複雜的模式,但不支援編輯它們。
  • 工作室 UI 僅支援 v2 排程,且無法列出或存取以發佈的管線或管線端點為基礎的 v1 排程。 您可以為未發佈的管線建立排程。
  • 如果週期設定為每個月的第 31 天或第 30 天,排程就不會在天數較少的月份觸發作業。
  • cron 排程運算式不支援 DAYSMONTHS 值。 針對這些參數傳遞的值會被忽略並視為 *

建立排程

若管線作業的效能和輸出令人滿意,您可以設定一個排程,以定期自動觸發此作業。 若要這麼做,您必須建立排程以將作業與觸發程序建立關聯。 觸發成續可以是 recurrence 模式,或是可指定執行作業間隔和頻率的 cron 運算式。

在這兩種情況下,您必須以內嵌方式或藉由指定現有的管線作業,先定義管線作業。 您可以在 YAML 中定義管線,並從 CLI 執行管線、在 Python 中以內嵌方式製作管線,或在 Azure Machine Learning 工作室中撰寫管線。 您可以在本機建立管線作業,或從工作區中的現有作業建立管線作業。

您可以使用工作室 UI、SDK v2 或 CLI v2 來建立 v2 或 v1 管線作業的 v2 排程。 您不需要先發佈現有的管線,即可設定管線作業的排程。

本文中的程式碼範例來自使用 Azure Machine Learning CLI 2.0 中的排程

使用週期模式定義以時間為基礎的排程

下列 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 (必要) 是排程引發所依據的時間單位。 可以是 minuteshoursdaysweeksmonths
  • interval (必要) 是排程週期之間的時間單位數目。
  • schedule (選擇性) 會定義迴圈模式,其可包含 hoursminutesweekdays。 如果省略,作業會根據 start_timefrequencyinterval 的邏輯觸發。
    • frequencyday 時,模式可以指定 hoursminutes
    • frequencyweekmonth 時,模式可以指定 hoursminutesweekdays
      • hours 是從 0 到 23 的整數或清單。
      • minutes 是從 0 到 59 的整數或清單。
      • weekdays 是從 mondaysunday 的字串或清單。
  • 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

在定義排程時變更作業設定

有時候,建議您讓排程所觸發的作業具有與測試作業不同的設定。 當您使用現有的作業定義排程時,您可以變更作業設定。 此方法可讓您定義多個排程,這些排程會使用相同的作業搭配不同的輸入。

當您定義排程時,您可變更要在執行管線作業時使用的 settingsinputsoutputs。 您也可以變更所觸發作業的 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 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')]"

提示

工作室中排程詳細資料頁面上的 [作業歷程記錄] 索引標籤提供簡單的方法來尋找排程觸發的所有作業。


角色型存取控制 (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 工作區。