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

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

Из этой статьи вы узнаете, как программно запланировать запуск конвейера в Azure и использовать пользовательский интерфейс расписания для того же. Расписание можно создать на основе истекшего времени. Расписания на основе времени можно использовать для выполнения повседневных задач, таких как переобучение моделей или регулярное выполнение пакетных прогнозов для поддержания их актуальности. Научившись создавать расписания, вы узнаете, как извлекать, обновлять и деактивировать их с помощью интерфейса командной строки, пакета SDK и пользовательского интерфейса студии.

Совет

Если вам нужно запланировать задания с помощью внешнего оркестратора, например Фабрика данных Azure или Microsoft Fabric, рассмотрите возможность развертывания заданий конвейера в конечной точке пакетной службы. Дополнительные сведения о развертывании заданий в конечной точке пакетной службы и использовании пакетных конечных точек из Microsoft Fabric.

Необходимые компоненты

Планирование задания конвейера

Для выполнения задания конвейера на повторяющейся основе нужно создать расписание. Schedule связывает задание и триггер. В качестве триггера можно использовать cron с выражением, которое описывает ожидание между запусками, либо recurrence с указанием частоты запуска задания. В обоих случаях необходимо сначала определить задание конвейера: это может быть существующее задание или встроенное определение задания конвейера (см. разделы Создание задания конвейера с помощью CLI и Создание задания конвейера с помощью SDK).

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

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

Создание расписания на основе времени с шаблоном повторения

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

$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 (см. подробные сведения в следующем разделе).

Список продолжается ниже.

Примечание.

Следующие свойства, которые необходимо указать для интерфейса командной строки и пакета 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

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

$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 для выражения расписания повторений. Одно выражение состоит из пяти полей с разделителями-пробелами:

    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 см. на вики-сайте по выражениям Crontab на сайте GitHub.

    Внимание

    Значения DAYS и MONTH не поддерживаются. Если передать такое значение, оно игнорируется и рассматривается как *.

  • (Необязательно) start_time указывает дату и время начала в часовом поясе расписания. start_time: "2022-05-10T10:15:00-04:00" означает, что расписание начинается с 10:15:00 2022-05-10 в часовом поясе UTC-4. Если параметр start_time опущен, для start_time принимается время создания расписания. Если время запуска указано в прошлом, первое задание будет запущено в следующее время выполнения.

  • (Необязательно) end_time описывает дату и время окончания с указанием часового пояса. Если параметр end_time опущен, расписание будет продолжать запускать задания до тех пор, пока не будет отключено вручную.

  • (Необязательно) time_zone указывает часовой пояс выражения. Если это значение отсутствует, по умолчанию задается время в формате UTC. См. приложение для значений часового пояса.

Ограничения:

  • В настоящее время Машинное обучение Azure расписание версии 2 не поддерживает триггер на основе событий.
  • Можно указать сложный шаблон повторения, содержащий несколько меток времени триггера с помощью пакета SDK Машинное обучение Azure/CLI версии 2, в то время как пользовательский интерфейс отображает только сложный шаблон и не поддерживает редактирование.
  • Если вы устанавливаете повторение как 31-й день каждого месяца, в месяцах с менее чем 31 днями расписание не будет запускать задания.

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

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

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

$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

При создании расписания можно изменить перечисленные ниже свойства.

Свойство Description
параметры Словарь параметров, используемых при выполнении задания конвейера.
входные данные Словарь входных данных, используемый при выполнении задания конвейера.
выходные данные Словарь входных данных, используемый при выполнении задания конвейера.
experiment_name Имя эксперимента активированного задания.

Примечание.

Пользователи пользовательского интерфейса Студии могут изменять только входные, выходные данные и параметры среды выполнения при создании расписания. experiment_name можно изменить только с помощью интерфейса командной строки или пакета SDK.

Выражения, поддерживаемые в расписании

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

Expression Description Поддерживаемые свойства
${{creation_context.trigger_time}} Время активации расписания. Строковые входные данные задания конвейера
${{name}} Имя задания. Путь вывода данных задания конвейера

Управление расписанием

Создание расписания

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

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

# 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

Получение списка расписаний в рабочей области

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

az ml schedule list

Проверка сведений о расписании

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

az ml schedule show -n simple_cron_job_schedule

Обновление расписания

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

az ml schedule update -n simple_cron_job_schedule  --set description="new description" --no-wait

Примечание.

Если вы хотите обновить больше, чем просто теги или описание, рекомендуется использовать az ml schedule create --file update_schedule.yml

Отключение расписания

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

az ml schedule disable -n simple_cron_job_schedule --no-wait

Включение расписания

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

az ml schedule enable -n simple_cron_job_schedule --no-wait

Запрос активируемых заданий из расписания

Отображаемое имя заданий, активируемых по расписанию, имеет формат <имя_расписания>-YYYYMMDDThhmmssZ. Например, для расписание под названием "имя-расписания", созданного с запланированным запуском каждые 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')]"

Примечание.

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


Удаление расписания

Внимание

Перед удалением расписание необходимо отключить. Удаление — это неустранимое действие. После удаления расписания вы никогда не сможете получить доступ к нему или восстановить его.

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

az ml schedule delete -n simple_cron_job_schedule

Поддержка RBAC (управление доступом на основе ролей)

Так как расписания обычно используются для рабочей среды, чтобы снизить влияние неправильной работы, администраторы рабочих областей могут потребовать ограничить доступ к созданию расписаний и управлению ими в рабочей области.

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

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

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

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

Часто задаваемые вопросы

  • Почему мои расписания, созданные пакетом SDK, не перечислены в пользовательском интерфейсе?

    Пользовательский интерфейс расписания предназначен для расписаний версии 2. Таким образом, расписания версии 1 не будут перечислены или доступны через пользовательский интерфейс.

    Однако расписания версии 2 также поддерживают задания конвейера версии 1. Сначала не нужно публиковать конвейер, и вы можете напрямую настроить расписания для задания конвейера.

  • Почему мои расписания не активируют задание во время установки раньше?

    • По умолчанию расписания будут использовать часовой пояс UTC для вычисления времени триггера. Вы можете указать часовой пояс в мастере создания или обновить часовой пояс на странице сведений о расписании.
    • Если вы устанавливаете повторение как 31-й день каждого месяца, в месяцах с менее чем 31 днями расписание не будет запускать задания.
    • Если вы используете выражения cron, MONTH не поддерживается. Если вы передаете значение, оно будет игнорироваться и рассматриваться как *. Это известное ограничение.
  • Поддерживаются ли расписания на основе событий?

    • Нет, расписание версии 2 не поддерживает расписания на основе событий.

Следующие шаги