Agendar trabalhos de pipeline de aprendizado de máquina

APLICA-SE A:Extensão de ML da CLI do Azure v2 (atual)SDK do Python azure-ai-ml v2 (atual)

Neste artigo, você aprenderá a agendar pipelines de machine learning para execução no Azure. Você pode agendar tarefas rotineiras, como treinar novamente modelos ou atualizar regularmente previsões em lotes com base no tempo decorrido.

Este artigo mostra como criar, recuperar, atualizar e desativar agendamentos usando a CLI do Azure Machine Learning, o SDK do Azure Machine Learning v2 para Python ou a interface do usuário do Estúdio do Azure Machine Learning.

Dica

Para agendar trabalhos usando um orquestrador externo, como o Azure Data Factory ou o Microsoft Fabric, considere implantar seus trabalhos de pipeline em um ponto de extremidade em lote. Para obter mais informações, consulte Implantar trabalhos de pipeline existentes em pontos de extremidade em lotes e Executar modelos do Azure Machine Learning do Fabric usando pontos de extremidade em lote (versão prévia).

Pré-requisitos

Limitações

  • O agendamento do Azure Machine Learning v2 não dá suporte a gatilhos baseados em eventos.
  • Os agendamentos da CLI e do SDK v2 dão suporte à especificação de padrões de recorrência complexos que contêm vários carimbos de data/hora de gatilho. A interface do usuário do estúdio exibe os padrões complexos, mas não oferece suporte à edição deles.
  • A interface do usuário do estúdio dá suporte apenas a agendamentos v2 e não pode listar ou acessar agendamentos v1 baseados em pipelines publicados ou pontos de extremidade de pipeline. Você pode criar um agendamento para um pipeline não publicado.
  • Se a recorrência for definida como o 31º ou 30º dia de cada mês, o agendamento não disparará trabalhos em meses com menos dias.
  • Não há suporte para valores DAYS e MONTHS em expressões de agendamento cron. Os valores passados para esses parâmetros são ignorados e tratados como *.

Criar um agendamento

Quando você tem um trabalho de pipeline com desempenho e saídas satisfatórios, pode configurar um agendamento para disparar automaticamente o trabalho regularmente. Para fazer isso, você deve criar um agendamento que associe o trabalho a um gatilho. O gatilho pode ser um padrão de recurrence ou uma expressão cron que especifica o intervalo e a frequência para executar o trabalho.

Em ambos os casos, você precisa definir um trabalho de pipeline primeiro, em linha ou especificando um trabalho de pipeline existente. Você pode definir pipelines no YAML e executá-los na CLI, criar pipelines em linha no Python ou compor pipelines no Estúdio do Azure Machine Learning. Você pode criar trabalhos de pipeline localmente ou de trabalhos existentes no workspace.

Você pode criar agendamentos v2 para trabalhos de pipeline v2 ou v1 usando a interface do usuário do estúdio, o SDK v2 ou a CLI v2. Você não precisa publicar pipelines existentes primeiro para configurar agendamento para trabalhos de pipeline.

Os exemplos de código neste artigo são de Trabalhar com Agendamento na CLI 2.0 do Azure Machine Learning.

Definir um agendamento baseado em tempo com um padrão de recorrência

O código YAML a seguir define um agendamento recorrente para um trabalho de pipeline. O parâmetro type obrigatório especifica que o tipo de 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

Você deve ou pode fornecer os seguintes parâmetros de agendamento:

Parâmetros

  • frequency (obrigatório) é a unidade de tempo na qual o agendamento é acionado. Pode ser minutes, hours, days, weeks ou months.
  • interval (obrigatório) é o número de unidades de tempo entre recorrências de agendamento.
  • schedule (opcional) define o padrão de recorrência, que pode conter hours, minutes e weekdays. Se omitido, os trabalhos são disparados de acordo com a lógica de start_time, frequency e interval.
    • Quando frequency for day, o padrão pode especificar hours e minutes.
    • Quando frequency for week ou month, o padrão pode especificar hours, minutes e weekdays.
      • hours é um inteiro ou uma lista de 0 a 23.
      • minutes é um inteiro ou uma lista de 0 a 59.
      • weekdays é uma cadeia de caracteres ou uma lista de monday a sunday.
  • start_time (opcional) é a data e a hora de início com fuso horário. Se omitido, o padrão será igual ao tempo de criação do agendamento. Se a hora de início estiver no passado, o primeiro trabalho será executado no próximo tempo de execução calculado.
  • end_time (opcional) é a data e a hora de término com fuso horário. Se omitido, o agendamento permanecerá ativo até ser desabilitado manualmente.
  • time_zone (opcional) especifica o fuso horário do agendamento de recorrência. Se omitido, o padrão será UTC (Tempo Universal Coordenado). Para saber mais sobre valores de fuso horário, acesse o apêndice de valores de fuso horário.

Depois de criar o YAML de agendamento, você pode usar o comando a seguir para criar um agendamento por meio da CLI:

# 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

Definir um agendamento baseado em tempo com uma expressão cron

Uma expressão cron pode especificar um padrão de recorrência mais flexível e personalizado para um agendamento. Uma expressão crontab é composta por campos MINUTES HOURS DAYS MONTHS DAYS-OF-WEEK delimitados por espaço. Um * curinga significa todos os valores para um campo.

Em uma expressão cron de agendamento do Azure Machine Language:

  • MINUTES é um inteiro ou uma lista de 0 a 59.
  • HOURS é um inteiro ou uma lista de 0 a 23.
  • Valores de DAYS não têm suporte e são sempre tratados como *. Um valor de * em DAYS significa todos os dias de um mês (que varia de acordo com o mês e o ano).
  • Valores de MONTHS não têm suporte e são sempre tratados como *.
  • DAYS-OF-WEEK é um inteiro ou uma lista de 0 a 6, em que 0 = domingo. Nomes de dias também são aceitos.

Por exemplo, a expressão 15 16 * * 1 significa 16:15 UTC toda segunda-feira. Para obter mais informações sobre as expressões crontab, consulte a Wiki de expressão Crontab no GitHub.

O código YAML a seguir define um agendamento recorrente para um trabalho de pipeline. O parâmetro type obrigatório especifica que o tipo de 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

Você deve ou pode fornecer os seguintes parâmetros de agendamento:

Parâmetros

  • expression (obrigatório) é uma expressão crontab padrão que expressa um agendamento recorrente.
  • start_time (opcional) é a data e a hora de início do agendamento com fuso horário. Por exemplo, start_time: "2022-05-10T10:15:00-04:00" significa que a programação começa às 10:15:00 do dia 10 de maio de 2022 no fuso horário UTC-4. Se omitido, o padrão será igual ao tempo de criação do agendamento. Se a hora de início estiver no passado, o primeiro trabalho será executado no próximo tempo de execução calculado.
  • end_time (opcional) é a data e a hora de término com fuso horário. Se omitido, o agendamento permanecerá ativo até ser desabilitado manualmente.
  • time_zone (opcional) especifica o fuso horário do agendamento de recorrência. Se omitido, o padrão será UTC.

Depois de criar o YAML de agendamento, você pode usar o comando a seguir para criar um agendamento por meio da CLI:

# 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

Alterar as configurações de trabalho ao definir agendamentos

Às vezes, talvez seja melhor que os trabalhos disparados por agendamentos tenham configurações diferentes dos trabalhos de teste. Ao definir um agendamento usando um trabalho existente, você pode alterar as configurações do trabalho. Essa abordagem permite definir vários agendamentos que usam o mesmo trabalho com entradas diferentes.

Ao definir um agendamento, você pode alterar o settings, inputs ou outputs para ser usado ao executar o trabalho de pipeline. Você também pode alterar o experiment_name do trabalho disparado.

A definição do agendamento a seguir altera as configurações de um trabalho existente.

$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

Use expressões com suporte nos agendamentos

Ao definir um agendamento, você pode usar as expressões macro a seguir para definir valores de parâmetro dinâmicos que resolvem valores reais durante o runtime do trabalho.

Expression Descrição Propriedades com suporte
${{name}} Nome do trabalho Caminho de outputs do trabalho de pipeline
${{creation_context.trigger_time}} Hora de gatilho do trabalho inputs do tipo de cadeia de caracteres do trabalho de pipeline

Gerenciar agendamento

Você pode listar, exibir detalhes, atualizar, desabilitar, habilitar e excluir agendamentos em um workspace.

Listar agendamentos

az ml schedule list

Ver detalhes do agendamento

az ml schedule show -n simple_cron_job_schedule

Atualizar um agendamento

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

Observação

Para atualizar mais do que apenas rótulos e descrições, considere usar az ml schedule create --file update_schedule.yml.

Desabilitar um agendamento

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

Habilitar um agendamento

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

excluir uma agenda

Importante

Primeiro, você deve desabilitar um agendamento para excluí-lo. A exclusão é permanente e não pode ser recuperada.

az ml schedule delete -n simple_cron_job_schedule

Consultar trabalhos disparados de um agendamento

Trabalhos disparados por um agendamento específico têm o nome de exibição <schedule_name>-YYYYMMDDThhmmssZ. Por exemplo, se um agendamento chamado named-schedule for executado a cada 12 horas a partir das 6h de 1º de janeiro de 2021, os nomes de exibição dos trabalhos criados serão os seguintes:

  • named-schedule-20210101T060000Z
  • named-schedule-20210101T180000Z
  • named-schedule-20210102T060000Z
  • named-schedule-20210102T180000Z e assim por diante

Captura de tela da guia trabalhos no Estúdio do Azure Machine Learning filtrando por nome de exibição do trabalho.

Você também pode aplicar a consulta JMESPath da CLI do Azure para consultar os trabalhos disparados por um nome de agendamento.

# 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')]"

Dica

A guia Histórico de trabalhos na página de detalhes do agendamento no estúdio fornece uma maneira simples de localizar todos os trabalhos disparados por um agendamento.


Suporte ao RBAC (Controle de acesso baseado em função)

Como os agendamentos são usados para produção, é importante reduzir a possibilidade e o impacto de operação incorreta. Os administradores do workspace podem restringir o acesso à criação e ao gerenciamento do agendamento em um workspace.

Os administradores podem configurar as seguintes regras de ação relacionadas a agendamentos no portal do Azure. Para obter mais informações, consulte Gerenciar acesso a workspaces do Azure Machine Learning.

Ação Descrição Regra
Ler Obter e listar agendamentos Microsoft.MachineLearningServices/workspaces/schedules/read
Gravar Criar, atualizar, desabilitar e habilitar agendamentos Microsoft.MachineLearningServices/workspaces/schedules/write
Excluir Excluir agendamentos Microsoft.MachineLearningServices/workspaces/schedules/delete

Considerações de custo

Os agendamentos são cobrados com base no número de agendamentos. Cada agendamento cria um aplicativo lógico que o Azure Machine Learning hospeda em nome do usuário (HOBO).

O aplicativo lógico faz a cobrança na assinatura do Azure do usuário. Os custos de recursos HOBO são cobrados usando o mesmo medidor emitido pelo provedor de recursos original. Os encargos são exibidos no recurso do host, que é o workspace do Azure Machine Learning.