你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
计划机器学习管道作业
适用范围:Azure CLI ml 扩展 v2(最新版)Python SDK azure-ai-ml v2(最新版)
本文介绍如何以编程方式将管道计划为在 Azure 上运行,并使用计划 UI 执行相同的操作。 可以基于运行时间创建计划。 基于时间的计划可用于处理例程任务,例如定期重新训练模型或执行批量预测,使其保持最新状态。 了解如何创建计划后,你将了解如何通过 CLI、SDK 和工作室 UI 检索、更新和停用它们。
提示
如果需要使用外部业务流程协调程序(如 Azure 数据工厂或 Microsoft Fabric)安排作业,请考虑在批处理终结点下部署管道作业。 详细了解如何在批处理终结点下部署作业以及如何从 Microsoft Fabric 消耗批处理终结点。
先决条件
- 必须拥有 Azure 订阅,才能使用 Azure 机器学习。 如果没有 Azure 订阅,请在开始操作前先创建一个免费帐户。 立即试用免费版或付费版 Azure 机器学习。
安装 Azure CLI 和
ml
扩展。 按照安装、设置和使用 CLI (v2)中的安装步骤执行操作。创建 Azure 机器学习工作区(如果没有)。 有关工作区的创建,请参阅安装、设置和使用 CLI (v2)。
计划管道作业
若要重复运行管道作业,需创建计划。 Schedule
可关联作业和触发器。 触发器可以是 cron
,其使用 cron 表达式来描述运行之间的等待,也可以是 recurrence
,其指定触发作业的频率。 在每种情况下,都需要先定义管道作业,可以是现有的管道作业,也可以是内联定义的管道作业,请参阅在 CLI 中创建管道作业和在 SDK 中创建管道作业。
可以在本地计划管道作业 yaml,也可以在工作区计划现有管道作业。
创建计划
使用定期模式创建基于时间的计划
$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
指定描述计划触发频率的时间单位。 可以是minute
、hour
、day
、week
、month
。(必需)
interval
指定计划触发频率,即计划再次触发之前需等待的时间单位数。(可选)
schedule
定义定期模式,包含hours
、minutes
和weekdays
。frequency
为day
时,模式可以指定hours
和minutes
。frequency
为week
和month
时,模式可以指定hours
、minutes
和weekdays
。hours
应为 0 到 23 的整数或列表。minutes
应为 0 到 59 的整数或列表。weekdays
可以是monday
到sunday
的字符串或列表。- 如果省略
schedule
,则将根据start_time
、frequency
和interval
的逻辑触发作业。
(可选)
start_time
使用时区描述开始日期和时间。 如果省略start_time
,则 start_time 将等于作业创建时间。 如果开始时间是过去的时间,则第一个作业将在下一个计算的运行时间运行。(可选)
end_time
使用时区描述结束日期和时间。 如果省略end_time
,则在手动禁用计划之前,计划将继续触发作业。(可选)
time_zone
指定定期的时区。 如果省略,则默认为 UTC。 若要了解有关时区值的详细信息,请参阅时区值附录。
使用 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
trigger
部分定义计划详细信息,其包含以下属性:
- (必需)
type
指定计划类型为cron
。
列表继续如下。
(必需)
expression
使用标准 crontab 表达式来表达定期计划。 单个表达式由 5 个空格分隔的字段组成:MINUTES HOURS DAYS MONTHS DAYS-OF-WEEK
单个通配符 (
*
) 涵盖字段的所有值。 因此,天中的*
表示一个月的所有天(因月份和年份而异)。上例中的
expression: "15 16 * * 1"
表示每周一下午 16:15。下表列出了各字段的有效值:
字段 范围 注释 MINUTES
0-59 - HOURS
0-23 - DAYS
- 不支持。 将忽略该值并将其视为 *
。MONTHS
- 不支持。 将忽略该值并将其视为 *
。DAYS-OF-WEEK
0-6 零 (0) 表示星期日。 也接受天的名称。 若要详细了解如何使用 crontab 表达式,请参阅 GitHub 上的 Crontab 表达式 wiki。
重要
不支持
DAYS
和MONTH
。 如果传递一个值,该值将被忽略并被视为*
。(可选)
start_time
使用计划的时区指定开始日期和时间。start_time: "2022-05-10T10:15:00-04:00"
表示计划于 UTC-4 时区 2022-05-10 上午 10:15:00 开始。 如果省略start_time
,则start_time
将等于计划创建时间。 如果开始时间是过去的时间,则第一个作业将在下一个计算的运行时间运行。(可选)
end_time
使用时区描述结束日期和时间。 如果省略end_time
,则在手动禁用计划之前,计划将继续触发作业。(可选)
time_zone
指定表达式的时区。 如果省略,则默认为 UTC。 请参阅时区值附录。
的限制:
- 目前,Azure 机器学习 v2 计划不支持基于事件的触发器。
- 可以使用 Azure 机器学习 SDK/CLI v2 指定包含多个触发时间戳的复杂重复模式,而 UI 仅显示复杂模式且不支持编辑。
- 如果将重复周期设置为每月的 31 日,在少于 31 天的月份,计划不会触发作业。
定义计划时更改运行时设置
使用现有作业定义计划时,可以更改作业的运行时设置。 使用此方法可以在同一作业中使用不同输入定义多个计划。
$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
定义计划时,可以更改以下属性:
属性 | 说明 |
---|---|
设置 | 运行管道作业时要使用的设置字典。 |
inputs | 运行管道作业时要使用的输入字典。 |
outputs | 运行管道作业时要使用的输入字典。 |
experiment_name | 触发的作业的试验名称。 |
注意
工作室 UI 用户只能在创建计划时修改输入、输出和运行时设置。 只能使用 CLI 或 SDK 更改 experiment_name
。
计划中支持的表达式
定义计划时,支持以下表达式,在作业运行时这些表达式将解析为实际值。
表达式 | 说明 | 支持的属性 |
---|---|---|
${{creation_context.trigger_time}} |
触发计划的时间。 | 管道作业的字符串类型输入 |
${{name}} |
作业的名称。 | 管道作业的 outputs.path |
管理计划
创建日程安排
创建计划 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
列出工作区中的计划
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
从计划查询触发的作业
计划触发的所有作业的显示名称都将显示为 <计划名称>-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')]"
注意
有关查找计划触发的所有作业的更简单方法,请使用工作室 UI 查看计划详细信息页上的作业历史记录。
删除计划
重要
必须禁用计划才能将其删除。 删除是不可恢复的操作。 删除某个计划后,永远无法访问或恢复它。
az ml schedule delete -n simple_cron_job_schedule
RBAC(基于角色的访问控制)支持
由于计划通常用于生产,为了减少误操作的影响,工作区管理员可能希望限制对在工作区中创建和管理计划的访问。
目前有三个操作规则与计划相关,你可以在 Azure 门户中配置这些规则。 可以详细了解如何管理对 Azure 机器学习工作区的访问权限。
操作 | 说明 | 规则 |
---|---|---|
读取 | 获取和列出机器学习工作区中的计划 | Microsoft.MachineLearningServices/workspaces/schedules/read |
写入 | 在机器学习工作区中创建、更新、禁用和启用计划 | Microsoft.MachineLearningServices/workspaces/schedules/write |
删除 | 在机器学习工作区中删除计划 | Microsoft.MachineLearningServices/workspaces/schedules/delete |
成本注意事项
- 根据计划数量对计划进行计费,每个计划将为用户创建一个托管 Azure 机器学习代表订阅 (HOBO) 的逻辑应用。
- 逻辑应用的成本将重新计入用户的 Azure 订阅,你可以发现 HOBO 资源的成本使用原始 RP 发出的相同计量来计费。 它们显示在主机资源(工作区)下。
常见问题解答
为何 UI 中未列出 SDK 创建的计划?
计划 UI 适用于 v2 计划。 因此,无法通过 UI 列出或访问 v1 计划。
但是,v2 计划也支持 v1 管道作业。 你无需先发布管道,而可以直接为管道作业设置计划。
为何我的计划未在我先前设置的时间触发作业?
- 默认情况下,计划将使用 UTC 时区来计算触发时间。 你可以在创建向导中指定时区,也可以在计划详细信息页中更新时区。
- 如果将重复周期设置为每月的 31 日,在少于 31 天的月份,计划不会触发作业。
- 如果使用 cron 表达式,则不支持 MONTH。 如果传递一个值,该值将被忽略并被视为 *。 这是一个已知限制。
是否支持基于事件的计划?
- 否,V2 计划不支持基于事件的计划。
后续步骤
- 详细了解 CLI (v2) 计划 YAML 架构。
- 了解如何在 CLI v2 中创建管道作业。
- 了解如何在 SDK v2 中创建管道作业。
- 详细了解 CLI (v2) 核心 YAML 语法。
- 详细了解管道。
- 详细了解组件。