Partilhar via


Agendar trabalhos de pipelines de machine learning

APLICA-SE A:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (current)

Neste artigo, você aprenderá a agendar pipelines de aprendizado de máquina para execução no Azure. Você pode agendar tarefas de rotina, como retreinar modelos ou atualizar regularmente previsões de lote com base no tempo decorrido.

Este artigo mostra como criar, recuperar, atualizar e desativar agendas 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.

Gorjeta

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 lote e Executar modelos do Azure Machine Learning a partir da malha usando pontos de extremidade em lote (visualização).

Pré-requisitos

  • Uma subscrição do Azure. Se não tiver uma, crie uma conta gratuita antes de começar.
  • Uma área de trabalho do Azure Machine Learning. Para criar um espaço de trabalho, consulte Criar recursos do espaço de trabalho.
  • Uma compreensão dos pipelines do Azure Machine Learning. Para obter informações, consulte O que são pipelines de aprendizado de máquina.

Limitações

  • As agendas do Azure Machine Learning v2 não dão suporte a gatilhos baseados em eventos.
  • As agendas CLI e SDK v2 suportam a 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 suporta a edição deles.
  • A interface do usuário do estúdio suporta apenas agendas v2 e não pode listar ou acessar agendas v1 baseadas em pipelines ou pontos de extremidade de pipeline publicados. Você pode criar uma agenda para um pipeline não publicado.
  • Se a recorrência for definida como o 31º ou 30º dia de cada mês, o cronograma não acionará trabalhos em meses que têm menos dias.
  • DAYS e MONTHS os valores não são suportados em expressões de agenda cron. Os valores passados para esses parâmetros são ignorados e tratados como *.

Criar uma agenda

Quando você tem um trabalho de pipeline com desempenho e saídas satisfatórios, você pode configurar um cronograma para acionar automaticamente o trabalho regularmente. Para fazer isso, você deve criar uma agenda que associe o trabalho a um gatilho. O gatilho pode ser um recurrence padrão ou uma cron expressão 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 a partir da CLI, criar pipelines embutidos em Python ou compor pipelines no estúdio de Aprendizado de Máquina do Azure. Você pode criar trabalhos de pipeline localmente ou a partir de trabalhos existentes no espaço de trabalho.

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

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

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

O código YAML a seguir define um cronograma recorrente para um trabalho de pipeline. O parâmetro required type especifica que o trigger tipo é 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 em que o cronograma é acionado. Pode ser minutes, hours, days, weeks, ou months.
  • interval(obrigatório) é o número de unidades de tempo entre as recorrências do programa.
  • schedule (opcional) define o padrão de recorrência, que pode conter hours, minutese weekdays. Se omitidos, os trabalhos são acionados de acordo com a lógica de start_time, frequencye interval.
    • Quando frequency é day, o padrão pode especificar hours e minutes.
    • Quando frequency é week ou month, o padrão pode especificar hours, minutese weekdays.
      • hours é um número inteiro ou lista de 0 a 23.
      • minutes é um número inteiro ou uma lista de 0 a 59.
      • weekdays é uma cadeia de caracteres ou lista de monday até sunday.
  • start_time (opcional) é a data e hora de início com fuso horário. Se omitido, o padrão é igual ao tempo de criação agendado. 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 hora de término com fuso horário. Se omitida, a agenda permanece ativa até ser desativada manualmente.
  • time_zone (opcional) especifica o fuso horário do cronograma de recorrência. Se omitido, o padrão é Tempo Universal Coordenado (UTC). Para obter mais informações sobre valores de fuso horário, consulte o apêndice para valores de fuso horário.

Depois de criar o agendamento YAML, use o seguinte comando para criar o agendamento via 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 cronograma baseado em tempo com uma expressão cron

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

Em uma expressão cron da agenda da Linguagem de Máquina do Azure:

  • MINUTES é um número inteiro ou uma lista de 0 a 59.
  • HOURS é um número inteiro ou lista de 0 a 23.
  • DAYS os valores não são suportados e são sempre tratados como *. O * valor em DAYS significa todos os dias de um mês, que varia com o mês e o ano.
  • MONTHS os valores não são suportados e são sempre tratados como *.
  • DAYS-OF-WEEK é um número inteiro ou lista de 0 a 6, onde 0 = domingo. Nomes de dias também são aceitos.

Por exemplo, a expressão 15 16 * * 1 significa 16:15 UTC todas as segundas-feiras. Para obter mais informações sobre expressões crontab, consulte o wiki Crontab Expression no GitHub.

O código YAML a seguir define um cronograma recorrente para um trabalho de pipeline. O parâmetro required type especifica que o trigger tipo é 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(required) é uma expressão crontab padrão que expressa uma programação recorrente.
  • start_time (opcional) é a data e hora de início do cronograma com fuso horário. Por exemplo, start_time: "2022-05-10T10:15:00-04:00" significa que o horário começa a partir das 10:15:00 de 10 de maio de 2022 no fuso horário UTC-4. Se omitido, o padrão é igual ao tempo de criação agendado. 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 hora de término com fuso horário. Se omitida, a agenda permanece ativa até ser desativada manualmente.
  • time_zone (opcional) especifica o fuso horário do cronograma de recorrência. Se omitido, o padrão é UTC.

Depois de criar o agendamento YAML, use o seguinte comando para criar o agendamento via 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 agendas

Às vezes, você pode querer que os trabalhos acionados por agendas tenham configurações diferentes dos trabalhos de teste. Ao definir uma agenda usando um trabalho existente, você pode alterar as configurações do trabalho. Essa abordagem permite definir várias agendas que usam o mesmo trabalho com entradas diferentes.

Ao definir uma agenda, você pode alterar o settings, inputsou outputs usar ao executar o trabalho de pipeline. Você também pode alterar o experiment_name do trabalho acionado.

A definição de agenda 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

Usar expressões suportadas em agendas

Ao definir uma agenda, você pode usar as seguintes expressões de macro para definir valores de parâmetros dinâmicos que são resolvidos para valores reais durante o tempo de execução do trabalho.

Expression Description Propriedades suportadas
${{name}} Nome do emprego outputs Caminho do trabalho de pipeline
${{creation_context.trigger_time}} Tempo de desencadeamento do trabalho Tipo de cadeia de caracteres inputs do trabalho de pipeline

Gerenciar cronograma

Você pode listar, exibir detalhes, atualizar, desabilitar, habilitar e excluir agendas em um espaço de trabalho.

Listar horários

az ml schedule list

Ver detalhes da programação

az ml schedule show -n simple_cron_job_schedule

Atualizar uma agenda

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

Nota

Para atualizar mais do que apenas tags e descrição, considere usar az ml schedule create --file update_schedule.ymlo .

Desativar uma agenda

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

Ativar uma agenda

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

Eliminar uma agenda

Importante

Você deve primeiro desativar um agendamento para excluí-lo. A eliminação é permanente e irrecuperável.

az ml schedule delete -n simple_cron_job_schedule

Trabalhos acionados por consulta a partir de uma agenda

Todos os trabalhos acionados por uma agenda específica têm o nome <schedule_name>-YYYYMMDDThhmmssZpara exibição . Por exemplo, se uma agenda nomeada named-schedule for executada 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:

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

Captura de ecrã do separador de trabalhos no estúdio do Azure Machine Learning filtrando por nome de apresentação do trabalho.

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

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

Gorjeta

A guia Histórico de trabalhos na página de detalhes da agenda no estúdio fornece uma maneira simples de encontrar todos os trabalhos acionados por uma agenda.


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

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

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

Ação Descrição Regra
Lida Obter e listar horários Microsoft.MachineLearningServices/workspaces/schedules/read
Escrita Criar, atualizar, desativar e habilitar agendas Microsoft.MachineLearningServices/workspaces/schedules/write
Delete Excluir agendas Microsoft.MachineLearningServices/workspaces/schedules/delete

Considerações de custos

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

O aplicativo lógico cobra de volta para a assinatura do Azure do usuário. Os custos de recursos do HOBO são cobrados usando o mesmo medidor emitido pelo provedor de recursos original. As cobranças aparecem sob o recurso de host, que é o espaço de trabalho do Azure Machine Learning.