计划机器学习管道作业
适用范围:Azure CLI ml 扩展 v2(最新版)Python SDK azure-ai-ml v2(最新版)
本文介绍如何计划机器学习管道,以便在 Azure 上运行。 你可以计划例行任务,例如重新训练模型或根据已用时间定期更新批量预测。
本文介绍如何使用 Azure 机器学习 CLI、适用于 Python 的 Azure 机器学习 SDK v2 或 Azure 机器学习工作室 UI 创建、检索、更新和停用计划。
提示
若要使用外部业务流程协调程序(例如 Azure 数据工厂或 Microsoft Fabric)计划作业,请考虑在批处理终结点下部署管道作业。
先决条件
- Azure 订阅。 如果没有订阅,请在开始之前创建一个试用帐户。
- 一个 Azure 机器学习工作区。 若要创建工作区,请参阅创建工作区资源。
- 了解 Azure 机器学习管道。 有关信息,请参阅什么是机器学习管道。
- 按照安装、设置和使用 CLI (v2) 中的说明安装 Azure CLI 和
ml
扩展。 - 了解如何创建 Azure 机器学习 YAML 管道。 有关信息,请参阅在 Azure 机器学习 CLI 中使用组件创建并运行机器学习管道。
限制
- Azure 机器学习 v2 计划不支持基于事件的触发器。
- CLI 和 SDK v2 计划支持指定包含多个触发时间戳的复杂重复周期模式。 工作室 UI 会显示复杂模式,但不支持对其进行编辑。
- 工作室 UI 仅支持 v2 计划,无法列出或访问基于已发布管道或管道终结点的 v1 计划。 可为未发布的管道创建计划。
- 如果将重复周期设置为每月的 31 日或 30 日,则计划不会在天数较少的月份触发作业。
- cron 计划表达式不支持
DAYS
和MONTHS
值。 为这些参数传递的值将被忽略并视为*
。
创建计划
如果某个管道作业具有令人满意的性能和输出,你就可以设置计划来定期自动触发该作业。 为此,必须创建一个用于将作业与触发器相关联的计划。 触发器可以是 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
(必需)是计划触发依据的时间单位。 可以是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 机器语言计划 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_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 enable -n simple_cron_schedule --no-wait
从计划查询触发的作业
特定计划触发的作业都具有显示名称 <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_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 机器学习工作区)下。