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
- Uma assinatura do Azure. Se você não tiver uma conta gratuita, crie uma antes de começar.
- Um Workspace do Azure Machine Learning. Para criar um workspace, confira Criar recursos de workspace.
- Uma noção básica sobre pipelines do Azure Machine Learning. Para obter mais informações, confira O que são pipelines de machine learning.
- A CLI do Azure e a extensão
ml
instalada seguindo as instruções em Instalar, configurar e usar a CLI (v2). - Saiba como criar pipelines YAML do Azure Machine Learning. Para obter mais informações, consulte Criar e executar pipelines de machine learning usando componentes com a CLI do Azure Machine Learning.
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
eMONTHS
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 serminutes
,hours
,days
,weeks
oumonths
.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 conterhours
,minutes
eweekdays
. Se omitido, os trabalhos são disparados de acordo com a lógica destart_time
,frequency
einterval
.- Quando
frequency
forday
, o padrão pode especificarhours
eminutes
. - Quando
frequency
forweek
oumonth
, o padrão pode especificarhours
,minutes
eweekdays
.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 demonday
asunday
.
- Quando
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*
emDAYS
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
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.