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 programaticamente um pipeline para ser executado no Azure e a usar a interface do usuário de agendamento para fazer o mesmo. É possível criar um agendamento com base no tempo decorrido. Os agendamentos baseados em tempo podem ser usados para cuidar de tarefas rotineiras, como treinar novamente modelos ou fazer previsões em lotes regularmente para mantê-los atualizados. Depois de aprender a criar agendamentos, aprenderá a recuperá-los, atualizá-los e desativá-los por meio de CLI, SDK e interface do usuário do Estúdio.

Dica

Se você precisar 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. Saiba mais sobre como implantar trabalhos em um ponto de extremidade em lote e como consumir pontos de extremidade em lote do Microsoft Fabric.

Pré-requisitos

Agendar um trabalho de pipeline

Para executar um trabalho de pipeline de forma recorrente, você precisará criar um agendamento. Um Schedule associa um trabalho e um gatilho. O gatilho pode ser cron que use a expressão cron para descrever a espera entre execuções ou recurrence que especifique usando qual frequência disparar o trabalho. Em cada caso, você precisa definir um trabalho de pipeline primeiro, podendo ser trabalhos de pipeline existentes ou um trabalho de pipeline com definição em linha, consulte Criar um trabalho de pipeline na CLI e Criar um trabalho de pipeline no SDK.

Você pode agendar um yaml de trabalho de pipeline em um trabalho de pipeline local ou existente no workspace.

Criar um agendamento

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

APLICA-SE A:Extensão de ML da CLI do Azure v2 (atual)

$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 contém as propriedades a seguir:

  • (Obrigatório)type especifica que o tipo de agendamento é recurrence. Também pode ser cron, consulte detalhes na próxima seção.

A lista continua abaixo.

Observação

As propriedades a seguir que precisam ser especificadas se aplicam à CLI e ao SDK.

  • (Obrigatório)frequency especifica a unidade de tempo que descreve a frequência com que o agendamento é acionado. Pode ser minute, hour, day, week, month.

  • (Obrigatório)interval especifica com que frequência o agendamento é disparado com base na frequência, que é o número de unidades de tempo a aguardar até que o agendamento seja acionado novamente.

  • (Opcional) schedule define o padrão de recorrência, contendo hours, minutes e weekdays.

    • Quando frequency é day, o padrão pode especificar hours e minutes.
    • Quando frequency é week e month, o padrão pode especificar hours, minutes e weekdays.
    • hours deve ser um inteiro ou uma lista, de 0 a 23.
    • minutes deve ser um inteiro ou uma lista, de 0 a 59.
    • weekdays pode ser uma cadeia de caracteres ou uma lista, de monday a sunday.
    • Se schedule for omitido, os trabalhos serão disparados de acordo com a lógica de start_time, frequency e interval.
  • (Opcional) start_time descreve a data e a hora de início com fuso horário. Se start_time for omitido, start_time será igual à hora do trabalho criado. Se a hora de início estiver no passado, o primeiro trabalho será executado no próximo tempo de execução calculado.

  • (Opcional) end_time descreve a data e a hora de término com fuso horário. Se end_time for omitido, o agendamento continuará disparando trabalhos até que o agendamento seja desabilitado manualmente.

  • (Opcional) time_zone especifica o fuso horário da recorrência. Se omitido, por padrão será UTC. Para saber mais sobre valores de fuso horário, consulte o apêndice para valores de fuso horário.

Criar um agendamento baseado em tempo com a expressão cron

APLICA-SE A:Extensão de ML da CLI do Azure v2 (atual)

$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

A seção trigger define os detalhes do agendamento e contém as seguintes propriedades:

  • (Obrigatório)type especifica que o tipo de agendamento é cron.

A lista continua abaixo.

  • (Obrigatório)expression usa a expressão crontab padrão para expressar um agendamento recorrente. Uma única expressão é composta por cinco campos delimitados por espaço:

    MINUTES HOURS DAYS MONTHS DAYS-OF-WEEK

    • Um único curinga (*), que abrange todos os valores do campo. Assim, um * em dias significa todos os dias de um mês (que varia com mês e ano).

    • O expression: "15 16 * * 1" no exemplo acima significa as 16:15PM em todas as segundas-feiras.

    • A tabela a seguir lista os valores válidos para cada campo:

      Campo Intervalo Comentário
      MINUTES 0-59 -
      HOURS 0-23 -
      DAYS - Não há suporte. O valor será ignorado e tratado como *.
      MONTHS - Não há suporte. O valor será ignorado e tratado como *.
      DAYS-OF-WEEK 0 a 6 Zero (0) significa domingo. Nomes de dias também aceitos.
    • Para saber mais sobre como usar a expressão crontab, consulte Wiki da Expressão Crontab no GitHub .

    Importante

    DAYS e MONTH não tem suporte. Se você passar um valor, ele será ignorado e tratado como *.

  • (Opcional) start_time especifica a data e a hora de início com o fuso horário do agendamento. start_time: "2022-05-10T10:15:00-04:00" significa que o agendamento começa a partir das 10:15:00AM em 2022-05-10 no fuso horário UTC-4. Se start_time for omitido, start_time 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.

  • (Opcional) end_time descreve a data e a hora de término com fuso horário. Se end_time for omitido, o agendamento continuará disparando trabalhos até que o agendamento seja desabilitado manualmente.

  • (Opcional) time_zone especifica o fuso horário da expressão. Se omitido, por padrão será UTC. Consulte o apêndice para obter valores de fuso horário.

Limitações:

  • Atualmente, o agendamento do Azure Machine Learning v2 não dá suporte ao gatilho baseado em eventos.
  • Você pode especificar um padrão de recorrência complexo que contém vários carimbos de data/hora de gatilho com o uso de SDK/CLI do Azure Machine Learning v2; já a interface do usuário exibe apenas o padrão complexo e não dá suporte à edição.
  • Se você definir a recorrência como o 31º dia de cada mês, em meses com menos de 31 dias o agendamento não disparará trabalhos.

Alterar configurações de tempo de execução ao definir o agendamento

Ao definir um agendamento usando um trabalho existente, você pode alterar as configurações de tempo de execução do trabalho. Usando essa abordagem, você pode definir vários agendamentos usando o mesmo trabalho com entradas diferentes.

APLICA-SE A:Extensão de ML da CLI do Azure v2 (atual)

$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

As propriedades a seguir podem ser alteradas ao definir o agendamento:

Propriedade Descrição
configurações Um dicionário de configurações a serem usadas ao executar o trabalho de pipeline.
entradas Um dicionário de entradas a serem usadas ao executar o trabalho de pipeline.
outputs Um dicionário de entradas a serem usadas ao executar o trabalho de pipeline.
experiment_name Nome do experimento do trabalho disparado.

Observação

Os usuários da interface do usuário do Estúdio só podem modificar as configurações de entrada, saída e runtime na criação de um agendamento. experiment_name só pode ser alterado usando a CLI ou o SDK.

Expressões com suporte no agendamento

Ao definir o agendamento, damos suporte à expressão a seguir que será resolvida como valor real durante o tempo de execução do trabalho.

Expression Descrição Propriedades com suporte
${{creation_context.trigger_time}} A hora em que o agendamento é disparado. Entradas de tipo de cadeia de caracteres do trabalho de pipeline
${{name}} O nome do trabalho. outputs.path do trabalho de pipeline

Gerenciar agendamento

Criar agendamento

APLICA-SE A:Extensão de ML da CLI do Azure v2 (atual)

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

# 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

Listar agendamentos em um espaço de trabalho

APLICA-SE A:Extensão de ML da CLI do Azure v2 (atual)

az ml schedule list

Verificar detalhes do agendamento

APLICA-SE A:Extensão de ML da CLI do Azure v2 (atual)

az ml schedule show -n simple_cron_job_schedule

Atualizar um agendamento

APLICA-SE A:Extensão de ML da CLI do Azurev2 (atual)

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

Observação

Se você quiser atualizar mais do que apenas marcas/descrição, é recomendável usar az ml schedule create --file update_schedule.yml

Desabilitar um agendamento

APLICA-SE A:Extensão de ML da CLI do Azurev2 (atual)

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

Habilitar um agendamento

APLICA-SE A:Extensão de ML da CLI do Azure v2 (atual)

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

Consultar trabalhos disparados de um agendamento

Todo nome de exibição dos trabalhos disparados pelo agendamento terá o nome de exibição <schedule_name>-YYYYMMDDThhmmssZ. Por exemplo, se uma agenda com um nome de agendamento nomeado for criada com uma execução agendada 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

Screenshot of the jobs tab in the Azure Machine Learning studio filtering by job display name.

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

Observação

Para obter uma maneira mais simples de localizar todos os trabalhos disparados por um agendamento, confira o Histórico de trabalhos na página de detalhes do agendamento usando a interface do usuário do Estúdio.


excluir uma agenda

Importante

Um agendamento deve ser desabilitado para ser excluído. A exclusão é uma ação irrecuperável. Depois que um agendamento é excluído, você nunca pode acessá-lo ou recuperá-lo.

APLICA-SE A:Extensão de ML da CLI do Azure v2 (atual)

az ml schedule delete -n simple_cron_job_schedule

Suporte a RBAC (controle de acesso baseado em função)

Como os agendamentos geralmente são usados para produção, para reduzir o impacto da má operação os administradores do workspace podem querer restringir o acesso à criação e ao gerenciamento de agendamentos em um workspace.

Atualmente, há três regras de ação relacionadas a agendamentos, e você pode configurá-las no portal do Azure. Você pode saber mais detalhes sobre como gerenciar o acesso a um workspace do Azure Machine Learning.

Ação Descrição Regra
Ler Obter e listar agendamentos no workspace do Machine Learning Microsoft.MachineLearningServices/workspaces/schedules/read
Gravar Criar, atualizar, desabilitar e habilitar agendamentos no workspace do Machine Learning Microsoft.MachineLearningServices/workspaces/schedules/write
Excluir Excluir um agendamento no workspace do Machine Learning Microsoft.MachineLearningServices/workspaces/schedules/delete

Perguntas frequentes

  • Por que meus agendamentos criados pelo SDK não estão listados na interface do usuário?

    A interface do usuário de agendamentos é para agendamentos v2. Portanto, seus agendamentos v1 não serão listados ou acessados por meio da interface do usuário.

    No entanto, os agendamentos v2 também dão suporte a trabalhos de pipeline v1. Você não precisa publicar o pipeline primeiro e pode configurar diretamente os agendamentos para um trabalho de pipeline.

  • Por que meus agendamentos não disparam o trabalho no momento em que defini antes?

    • Por padrão, os agendamentos usarão o fuso horário UTC para calcular a hora do gatilho. Você pode especificar fuso horário no assistente de criação ou atualizar o fuso horário na página de detalhes do agendamento.
    • Se você definir a recorrência como o 31º dia de cada mês, em meses com menos de 31 dias o agendamento não disparará trabalhos.
    • Se você estiver usando expressões Cron, não há suporte a MONTH. Se você transmitir um valor, ele será ignorado e tratado como *. Essa é uma limitação conhecida.
  • Há suporte a agendamentos baseados em eventos?

    • Não, o agendamento V2 não dá suporte a agendamentos baseados em eventos.

Próximas etapas