Поделиться через


Планирование заданий конвейера машинного обучения

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение CLI Azure для машинного обучения версии 2 (текущая)Python SDK azure-ai-ml версии 2 (текущая)

В этой статье вы узнаете, как запланировать конвейеры машинного обучения для запуска в Azure. Вы можете запланировать обычные задачи, такие как переобучение моделей или регулярно обновлять пакетные прогнозы на основе истекшего времени.

В этой статье показано, как создавать, извлекать, обновлять и деактивировать расписания с помощью интерфейса командной строки Машинное обучение Azure, пакета SDK Машинное обучение Azure версии 2 для Python или пользовательского интерфейса Студия машинного обучения Azure.

Совет

Чтобы запланировать задания с помощью внешнего оркестратора, например Фабрика данных Azure или Microsoft Fabric, рассмотрите возможность развертывания заданий конвейера в конечной точке пакетной обработки. Для получения дополнительной информации см. Развертывание существующих заданий конвейера в конечных точках пакетной службы и Запуск моделей Машинного обучения Azure из Fabric с помощью конечных точек пакетной службы (предварительная версия).

Предварительные требования

Ограничения

  • Планировщики Azure Machine Learning v2 не поддерживают триггеры на основе событий.
  • Cli и SDK версии 2 поддерживают указание сложных шаблонов повторения, содержащих несколько меток времени триггера. Пользовательский интерфейс студии отображает сложные шаблоны, но не поддерживает их редактирование.
  • Пользовательский интерфейс студии поддерживает только расписания версии 2 и не может содержать список или доступ к расписаниям версии 1, основанным на опубликованных конвейерах или конечных точках конвейера. Можно создать расписание для неопубликованного конвейера.
  • Если повторение определено как 31-й или 30-й день каждого месяца, расписание не запускает задания в месяцах с меньшим количеством дней.
  • DAYS и MONTHS значения не поддерживаются в выражениях расписания cron. Значения, передаваемые для этих параметров, игнорируются и обрабатываются как *.
  • Даже после назначения управляемого удостоверения расписанию автор должен сохранить разрешения на выполнение задания, чтобы расписание функционировало.

Создание графика

При наличии конвейерной задачи с удовлетворительными результатами и производительностью можно настроить расписание для автоматического запуска задачи регулярно. Для этого необходимо создать расписание, которое связывает задание с триггером. Триггер может быть шаблоном recurrence или cron выражением, указывающим интервал и частоту выполнения задания.

В обоих случаях сначала необходимо определить задание конвейера, либо встроенно, либо указав существующее задание конвейера. Вы можете определить конвейеры в YAML и запустить их из интерфейса командной строки, создавать конвейеры напрямую в Python или компоновать их в Azure Machine Learning Studio. Вы можете создавать задания конвейера локально или из существующих заданий в рабочей области.

Вы можете создавать расписания версии 2 для заданий конвейера версии 2 или версии 1 с помощью пользовательского интерфейса студии, пакета SDK версии 2 или CLI версии 2. Вам не нужно сначала публиковать существующие конвейеры, чтобы настроить расписания для заданий для конвейеров.

Примеры кода, приведенные в этой статье, взяты из работы с планировщиком в 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 (обязательно) — это единица времени, на основе которой осуществляется выполнение расписания. Может быть minutes, hours, days, weeks или months.
  • interval (обязательно) — это количество единиц времени между повторением расписания.
  • schedule(необязательно) определяет шаблон повторения, который может содержать hoursи minutesweekdays. Если это пропущено, задания активируются в соответствии с логикой start_time, frequency и interval.
    • Когда frequency и day шаблон может указывать hours и minutes.
    • Когда frequency это week или month, шаблон может указать hours, minutesи weekdays.
      • hours — целое число или список от 0 до 23.
      • minutes — целое число или список от 0 до 59.
      • weekdays — строка или список из mondaysunday.
  • 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

Использование поддерживаемых выражений в расписаниях

При определении расписания можно использовать следующие выражения макросов для определения динамических значений параметров, которые разрешаются в конкретные значения во время выполнения задачи.

выражение Описание Поддерживаемые свойства
${{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 и т. д.

Снимок экрана: вкладка заданий в Студии машинного обучения Azure с фильтрацией по отображаемому имени задания.

Вы также можете использовать запрос 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 машинного обучения".

Действие Описание Правило
Читать Получение и просмотр расписаний Microsoft.MachineLearningServices/workspaces/schedules/read
Напишите Создание, обновление, отключение и включение расписаний Microsoft.MachineLearningServices/workspaces/schedules/запись
Удалить Удаление расписаний Microsoft.MachineLearningServices/workspaces/schedules/delete (удаление)

Рекомендации по затратам

Счета за расписания выставляются на основе количества расписаний. Каждое расписание создает приложение логики, которое Машинное обучение Azure размещает от имени пользователя (HOBO). Поэтому приложение логики не может отображаться как ресурс в подписке пользователя на портале Azure.

С другой стороны, логическое приложение списывает плату с подписки Azure пользователя. Затраты на ресурсы HOBO выставляются с использованием того же счетчика, что и исходный поставщик ресурсов. Зарядки отображаются под ресурсом хоста, которым является рабочая область Azure Machine Learning.