Планирование заданий конвейера машинного обучения в версии 2
ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение машинного обучения Azure CLI версии 2 (current)Python SDK azure-ai-ml версии 2 (current)
В этой статье вы узнаете, как запланировать конвейеры машинного обучения для запуска в Azure. Вы можете запланировать обычные задачи, такие как переобучение моделей или регулярно обновлять пакетные прогнозы на основе истекшего времени.
В этой статье показано, как создавать, извлекать, обновлять и деактивировать расписания с помощью интерфейса командной строки Машинное обучение Azure, пакета SDK Машинное обучение Azure версии 2 для Python или пользовательского интерфейса Студия машинного обучения Azure.
Совет
Чтобы запланировать задания с помощью внешнего оркестратора, например Фабрика данных Azure или Microsoft Fabric, рассмотрите возможность развертывания заданий конвейера в конечной точке пакетной службы. Дополнительные сведения см. в статье "Развертывание существующих заданий конвейера в конечных точках пакетной службы" и запуск моделей Машинное обучение Azure из Fabric с помощью конечных точек пакетной службы (предварительная версия).
Необходимые компоненты
- Подписка Azure. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись, прежде чем начать работу.
- Рабочая область Машинного обучения Azure. Сведения о создании рабочей области см. в разделе "Создание ресурсов рабочей области".
- Понимание Машинное обучение Azure конвейеров. Дополнительные сведения см. в статье "Что такое конвейеры машинного обучения".
- Интерфейс командной строки Azure и
ml
расширение, установленные, следуя инструкциям в разделе "Установка", "Настройка" и использование интерфейса командной строки (версии 2). - Знание того, как создавать конвейеры YAML Машинное обучение Azure. Дополнительные сведения см. в статье "Создание и запуск конвейеров машинного обучения" с помощью компонентов с Машинное обучение Azure CLI.
Ограничения
- Машинное обучение Azure расписания версии 2 не поддерживают триггеры на основе событий.
- Cli и SDK версии 2 поддерживают указание сложных шаблонов повторения, содержащих несколько меток времени триггера. Пользовательский интерфейс студии отображает сложные шаблоны, но не поддерживает их редактирование.
- Пользовательский интерфейс студии поддерживает только расписания версии 2 и не может содержать список или доступ к расписаниям версии 1, основанным на опубликованных конвейерах или конечных точках конвейера. Можно создать расписание для неопубликованного конвейера.
- Если повторение устанавливается как 31-й или 30-й день каждого месяца, расписание не запускает задания в месяцах, имеющих меньше дней.
DAYS
иMONTHS
значения не поддерживаются в выражениях расписания cron. Значения, передаваемые для этих параметров, игнорируются и обрабатываются как*
.
Создание графика
При наличии задания конвейера с удовлетворяющей производительностью и выходными данными можно настроить расписание для автоматического запуска задания на регулярной основе. Для этого необходимо создать расписание, которое связывает задание с триггером. Триггер может быть шаблоном recurrence
или cron
выражением, указывающим интервал и частоту выполнения задания.
В обоих случаях необходимо сначала определить задание конвейера либо встроенным, либо путем указания существующего задания конвейера. Вы можете определить конвейеры в YAML и запустить их из интерфейса командной строки, создать конвейеры в Python или создать конвейеры в Студия машинного обучения Azure. Вы можете создавать задания конвейера локально или из существующих заданий в рабочей области.
Вы можете создавать расписания версии 2 для заданий конвейера версии 2 или версии 1 с помощью пользовательского интерфейса студии, пакета SDK версии 2 или CLI версии 2. Сначала не нужно публиковать существующие конвейеры, чтобы настроить расписания для заданий конвейера.
Примеры кода, приведенные в этой статье, относятся к работе с расписанием в Машинное обучение 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 используйте следующую команду, чтобы создать расписание с помощью ИНТЕРФЕЙСА командной строки:
# 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
с разделителями пространства. Подстановочный знак *
означает все значения поля.
В выражении cron расписания машинного языка Azure:
MINUTES
— целое число или список от 0 до 59.HOURS
— целое число или список от 0 до 23.DAYS
значения не поддерживаются и всегда рассматриваются как*
. Значение*
вDAYS
означают все дни в месяц, которые зависят от месяца и года.MONTHS
значения не поддерживаются и всегда рассматриваются как*
.DAYS-OF-WEEK
— целое число или список от 0 до 6, где 0 = воскресенье. Также принимаются имена дней.
Например, выражение 15 16 * * 1
означает 4:15 вечера UTC каждый понедельник. Дополнительные сведения о выражениях crontab см. вики-сайте Crontab Expression на сайте GitHub.
Следующий код 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"
что расписание начинается с 10:15:00 10 мая 2022 года в часовом поясе UTC-4. Если опущено, значение по умолчанию равно времени создания расписания. Если время начала в прошлом, первое задание выполняется во время следующего вычисляемого выполнения.end_time
(необязательно) — это дата окончания и время с часовой поясом. Если опущено, расписание остается активным до тех пор, пока не будет отключено вручную.time_zone
(необязательно) указывает часовой пояс расписания повторения. Если опущено, значение по умолчанию — UTC.
После создания расписания YAML используйте следующую команду, чтобы создать расписание с помощью ИНТЕРФЕЙСА командной строки:
# 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
Использование поддерживаемых выражений в расписаниях
При определении расписания можно использовать следующие макросовые выражения для определения динамических значений параметров, которые разрешаются фактическим значениям во время выполнения задания.
Expression | Description | Поддерживаемые свойства |
---|---|---|
${{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
выполняется каждые 12 часов, начиная с 6:00 1 января 2021 г., то имена созданных заданий отображаются следующим образом:
- имя-расписания-20210101T060000Z
- имя-расписания-20210101T180000Z
- имя-расписания-20210102T060000Z
- имя-расписания-20210102T180000Z и т. д.
Вы также можете использовать запрос JMESPath Azure CLI для запроса заданий, инициированных по имени расписания.
# 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".
Действие | Description | Правило |
---|---|---|
Читать | Получение и перечисление расписаний | Microsoft.MachineLearningServices/workspaces/schedules/read |
Write | Создание, обновление, отключение и включение расписаний | Microsoft.MachineLearningServices/workspaces/schedules/write |
Удаление | Удаление расписаний | Microsoft.MachineLearningServices/workspaces/schedules/delete |
Рекомендации по затратам
Счета за расписания выставляются на основе количества расписаний. Каждое расписание создает приложение логики, которое Машинное обучение Azure узлах от имени пользователя (HOBO).
Приложение логики взимается обратно в подписку Azure пользователя. Затраты на ресурсы HOBO выставляются с использованием того же счетчика, что и исходный поставщик ресурсов. Расходы отображаются в ресурсе узла, который является рабочей областью Машинное обучение Azure.