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.
- A CLI do Azure e
ml
a extensão instaladas seguindo as instruções em Instalar, configurar e usar a CLI (v2). - Conhecimento de como criar pipelines YAML do Azure Machine Learning. Para obter informações, consulte Criar e executar pipelines de aprendizado de máquina usando componentes com a CLI do Azure Machine Learning.
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
eMONTHS
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 serminutes
,hours
,days
,weeks
, oumonths
.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 conterhours
,minutes
eweekdays
. Se omitidos, os trabalhos são acionados de acordo com a lógica destart_time
,frequency
einterval
.- Quando
frequency
éday
, o padrão pode especificarhours
eminutes
. - Quando
frequency
éweek
oumonth
, o padrão pode especificarhours
,minutes
eweekdays
.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 demonday
atésunday
.
- Quando
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-WEEK
delimitados 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 emDAYS
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
, inputs
ou 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.yml
o .
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>-YYYYMMDDThhmmssZ
para 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
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.