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


Планирование заданий конвейера машинного обучения в версии 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 расписания версии 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и minutesweekdays. Если опущено, задания активируются в соответствии с логикой 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

Изменение параметров задания при определении расписаний

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

При определении расписания можно изменить settingsinputsили 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 и т. д.

Снимок экрана: вкладка заданий в Студии машинного обучения 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".

Действие Description Правило
Читать Получение и перечисление расписаний Microsoft.MachineLearningServices/workspaces/schedules/read
Write Создание, обновление, отключение и включение расписаний Microsoft.MachineLearningServices/workspaces/schedules/write
Удаление Удаление расписаний Microsoft.MachineLearningServices/workspaces/schedules/delete

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

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

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