你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

计划机器学习管道作业

适用范围:Azure CLI ml 扩展 v2(最新版)Python SDK azure-ai-ml v2(最新版)

本文介绍如何计划机器学习管道,以便在 Azure 上运行。 你可以计划例行任务,例如重新训练模型或根据已用时间定期更新批量预测。

本文介绍如何使用 Azure 机器学习 CLI、适用于 Python 的 Azure 机器学习 SDK v2 或 Azure 机器学习工作室 UI 创建、检索、更新和停用计划。

提示

若要使用外部业务流程协调程序(例如 Azure 数据工厂或 Microsoft Fabric)计划作业,请考虑在批处理终结点下部署管道作业。 有关详细信息,请参阅将现有管道作业部署到批处理终结点使用批处理终结点从 Fabric 运行 Azure 机器学习模型(预览版)

先决条件

限制

  • Azure 机器学习 v2 计划不支持基于事件的触发器。
  • CLI 和 SDK v2 计划支持指定包含多个触发时间戳的复杂重复周期模式。 工作室 UI 会显示复杂模式,但不支持对其进行编辑。
  • 工作室 UI 仅支持 v2 计划,无法列出或访问基于已发布管道或管道终结点的 v1 计划。 可为未发布的管道创建计划。
  • 如果将重复周期设置为每月的 31 日或 30 日,则计划不会在天数较少的月份触发作业。
  • cron 计划表达式不支持 DAYSMONTHS 值。 为这些参数传递的值将被忽略并视为 *

创建计划

如果某个管道作业具有令人满意的性能和输出,你就可以设置计划来定期自动触发该作业。 为此,必须创建一个用于将作业与触发器相关联的计划。 触发器可以是 recurrence 模式,也可以是指定作业运行间隔和频率的 cron 表达式。

在这两种情况下,首先都需要内联定义,或通过指定现有管道作业来定义一个管道作业。 可以在 YAML 中定义管道并从 CLI 运行它们、在 Python 中内联创作管道,或者在 Azure 机器学习工作室中编写管道。 可以在本地创建管道作业,也可以基于工作区中的现有作业创建管道作业。

可以使用工作室 UI、SDK v2 或 CLI v2 为 v2 或 v1 管道作业创建 v2 计划。 无需首先发布现有管道即可为管道作业设置计划。

本文中的代码示例摘自在 Azure 机器学习 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 之间的整数或列表。
      • weekdaysmondaysunday 的字符串或列表。
  • 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 机器语言计划 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 机器学习工作室中作业选项卡的屏幕截图,其中按作业显示名称进行了筛选。

此外,还可以应用 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 机器学习工作区的访问

操作 说明 规则
读取 获取和列出计划 Microsoft.MachineLearningServices/workspaces/schedules/read
创建、更新、禁用和启用计划 Microsoft.MachineLearningServices/workspaces/schedules/write
删除 删除计划 Microsoft.MachineLearningServices/workspaces/schedules/delete

成本注意事项

计划根据计划数量计费。 每个计划都会创建一个逻辑应用,Azure 机器学习将代表 (HOBO) 用户托管该应用。

逻辑应用向用户的 Azure 订阅收费。 HOBO 资源费用将使用原始资源提供程序发出的同一计量器来计收。 费用显示在主机资源(即 Azure 机器学习工作区)下。