Pianificare i processi della pipeline di Machine Learning

SI APPLICA A:Estensione ml dell'interfaccia della riga di comando di Azure v2 (corrente)SDK di Python azure-ai-ml v2 (corrente)

In questo articolo si apprenderà come pianificare a livello di codice una pipeline per l'esecuzione in Azure e usare l'interfaccia utente di pianificazione per eseguire le stesse operazioni. È possibile creare una pianificazione in base al tempo trascorso. Le pianificazioni basate sul tempo possono essere usate per occuparsi delle attività di routine, ad esempio ripetere il training dei modelli o eseguire regolarmente stime batch per mantenerle aggiornate. Dopo aver appreso come creare pianificazioni, si apprenderà come recuperarle, aggiornarle e disattivarle tramite l’interfaccia della riga di comando, l’SDK e l’interfaccia utente di Studio.

Suggerimento

Se è necessario pianificare i processi usando un agente di orchestrazione esterno, ad esempio Azure Data Factory o Microsoft Fabric, è consigliabile distribuire i processi della pipeline in un endpoint Batch. Altre informazioni su come distribuire i processi in un endpoint batche come usare gli endpoint batch da Microsoft Fabric.

Prerequisiti

  • L’uso di Azure Machine Learning richiede una sottoscrizione di Azure. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare. Provare la versione gratuita o a pagamento di Azure Machine Learning.

Pianificare un processo della pipeline

Per eseguire un processo della pipeline su base ricorrente, è necessario creare una pianificazione. Un Schedule associa un processo e un trigger. Il trigger può essere cron, che usa un’espressione cron per descrivere l'attesa tra le esecuzioni o recurrence, che specifica la frequenza di attivazione del processo. In ogni caso, è prima necessario definire un processo della pipeline, può trattarsi di processi pipeline esistenti o di un processo della pipeline definito inline, fare riferimento a Creare un processo della pipeline nell'interfaccia della riga di comando e Creare un processo della pipeline in SDK.

È possibile pianificare un yaml del processo della pipeline in locale o in un processo della pipeline esistente nell'area di lavoro.

Creare una programmazione

Creare una pianificazione basata sul tempo con il modello di ricorrenza

SI APPLICA A:Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)

$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 contiene le proprietà seguenti:

  • (Obbligatorio)type specifica che il tipo di pianificazione è recurrence. Può anche essere cron, vedere i dettagli nella sezione successiva.

L'elenco continua di seguito.

Nota

Le proprietà seguenti che devono essere specificate si applicano per l'interfaccia della riga di comando e l'SDK.

  • (Obbligatorio)frequency specifica l'unità di tempo che descrive la frequenza con cui viene attivata la pianificazione. Può essere minute, hour, day, week, month.

  • (Obbligatorio)interval specifica la frequenza di attivazione della pianificazione in base alla frequenza, vale a dire il numero di unità di tempo di attesa fino alla successiva attivazione della pianificazione.

  • (Facoltativo) schedule definisce il criterio di ricorrenza contenente hours, minutes e weekdays.

    • Quando frequency è uguale a day, un criterio può specificare hours e minutes.
    • Quando frequency è week e month, il modello può specificare hours, minutes e weekdays.
    • hours deve essere un numero intero o un elenco, compreso tra 0 e 23.
    • minutes deve essere un numero intero o un elenco, compreso tra 0 e 59.
    • weekdays può essere una stringa o un elenco da monday a sunday.
    • Se schedule viene omesso, i processi verranno attivati in base alla logica di start_time, frequency e interval.
  • (Facoltativo) start_time descrive la data e l'ora di inizio, con il fuso orario. Se start_time viene omesso, start_time sarà uguale all'ora di creazione del processo. Se l'ora di inizio è passata, il primo processo verrà eseguito al successivo runtime calcolato.

  • (Facoltativo) end_time descrive la data e l'ora di fine con il fuso orario. Se end_time viene omesso, la pianificazione continuerà ad attivare i processi fino a quando la pianificazione viene disabilitata manualmente.

  • (Facoltativo) time_zone specifica il fuso orario della ricorrenza. Se omesso, per impostazione predefinita è UTC. Per altre informazioni sui valori del fuso orario, vedere l’appendice per i valori del fuso orario.

Creare una pianificazione basata sul tempo con l'espressione cron

SI APPLICA A:Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)

$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

La sezione trigger definisce i dettagli della pianificazione e contiene le proprietà seguenti:

  • (Obbligatorio)type specifica che il tipo di pianificazione è cron.

L'elenco continua di seguito.

  • (Obbligatorio)expression usa l'espressione crontab standard per esprimere una pianificazione ricorrente. Una singola espressione è costituita da cinque campi delimitati da spazi:

    MINUTES HOURS DAYS MONTHS DAYS-OF-WEEK

    • Un singolo carattere jolly (*), che copre tutti i valori per il campo. Quindi un *, in giorni, indica tutti i giorni di un mese (che varia con mese e anno).

    • expression: "15 16 * * 1" nell'esempio precedente indica le 16:15 di ogni lunedì.

    • La tabella seguente elenca i valori validi per ogni campo:

      Campo Intervallo Commento
      MINUTES 0-59 -
      HOURS 0-23 -
      DAYS - Non supportato. Il valore verrà ignorato e trattato come *.
      MONTHS - Non supportato. Il valore verrà ignorato e trattato come *.
      DAYS-OF-WEEK 0-6 Zero (0) indica la domenica. Sono accettati anche i nomi dei giorni.
    • Per altre informazioni su come usare l'espressione crontab, vedere wiki dell'espressione Crontab su GitHub .

    Importante

    DAYS e MONTH non sono supportati. Se si passa un valore, verrà ignorato e verrà trattato come *.

  • (Facoltativo) start_time specifica la data e l'ora di inizio con il fuso orario della pianificazione. start_time: "2022-05-10T10:15:00-04:00" indica che la pianificazione inizia dalle 10:15:00 del 2022-05-10 nel fuso orario UTC-4. Se start_time viene omesso, start_time sarà uguale all'ora di creazione della pianificazione. Se l'ora di inizio è passata, il primo processo verrà eseguito al successivo runtime calcolato.

  • (Facoltativo) end_time descrive la data e l'ora di fine con il fuso orario. Se end_time viene omesso, la pianificazione continuerà ad attivare i processi fino a quando la pianificazione viene disabilitata manualmente.

  • (Facoltativo) time_zone specifica il fuso orario dell’espressione. Se omesso, per impostazione predefinita è UTC. Vedere l’appendice per i valori del fuso orario.

Limitazioni :

  • Attualmente la pianificazione di Azure Machine Learning v2 non supporta il trigger basato su eventi.
  • È possibile specificare criteri di ricorrenza complessi contenenti più timestamp di trigger usando Azure Machine Learning SDK/CLI v2, mentre l'interfaccia utente visualizza solo il modello complesso e non supporta la modifica.
  • Se si imposta la ricorrenza come il 31° giorno di ogni mese, in mesi con meno di 31 giorni, la pianificazione non attiverà i processi.

Modificare le impostazioni di runtime durante la definizione della pianificazione

Quando si definisce una pianificazione usando un processo esistente, è possibile modificare le impostazioni di runtime del processo. Usando questo approccio, è possibile definire più pianificazioni usando lo stesso processo con input diversi.

SI APPLICA A:Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)

$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

Quando si definisce la pianificazione, è possibile modificare le proprietà seguenti:

Proprietà Descrizione
settings Dizionario delle impostazioni da usare durante l'esecuzione del processo della pipeline.
input Dizionario di input da usare durante l'esecuzione del processo della pipeline.
outputs Dizionario di input da usare durante l'esecuzione del processo della pipeline.
experiment_name Nome dell'esperimento del processo attivato.

Nota

Gli utenti dell'interfaccia utente di Studio possono modificare solo le impostazioni di input, output e runtime durante la creazione di una pianificazione. experiment_name può essere modificato solo tramite l'interfaccia della riga di comando o l'SDK.

Espressioni supportate nella pianificazione

Quando si definisce la pianificazione, è supportata l'espressione seguente che verrà risolta in valore reale durante il runtime del processo.

Expression Descrizione Proprietà supportate
${{creation_context.trigger_time}} Ora in cui la pianificazione è stata attivata. Input di tipo stringa del processo della pipeline
${{name}} Nome del processo. outputs.path del processo della pipeline

Gestisci pianificazione

Creare pianificazione

SI APPLICA A:Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)

Dopo aver creato lo yaml della pianificazione, è possibile usare il comando seguente per creare una pianificazione tramite l'interfaccia della riga di comando.

# 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

Elencare le pianificazioni in un'area di lavoro

SI APPLICA A:Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)

az ml schedule list

Controllare i dettagli della pianificazione

SI APPLICA A:Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)

az ml schedule show -n simple_cron_job_schedule

Aggiornare una pianificazione

SI APPLICA A:Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)

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

Nota

Se si vuole aggiornare più di tag/descrizione, è consigliabile usare az ml schedule create --file update_schedule.yml

Disabilitare una pianificazione

SI APPLICA A:Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)

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

Abilitare una pianificazione

SI APPLICA A:Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)

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

Eseguire query sui processi attivati da una pianificazione

Tutti i nomi visualizzati dei processi attivati dalla pianificazione avranno il nome visualizzato come <schedule_name>-AAAAMMGGGgThhmmssZ. Ad esempio, se viene creata una pianificazione denominata con un'esecuzione pianificata ogni 12 ore a partire dalle 6:00 del 1° gennaio 2021, i nomi visualizzati dei processi creati saranno i seguenti:

  • named-schedule-20210101T060000Z
  • named-schedule-20210101T180000Z
  • named-schedule-20210102T060000Z
  • named-schedule-20210102T180000Z e così via

Screenshot della scheda Processi nel studio di Azure Machine Learning filtro in base al nome visualizzato del processo.

È anche possibile applicare la query JMESPath dell'interfaccia della riga di comando di Azure per eseguire query sui processi attivati da un nome di pianificazione.

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

Nota

Per un modo più semplice per trovare tutti i processi attivati da una pianificazione, vedere la Cronologia dei processi nella pagina dei dettagli della pianificazione usando l'interfaccia utente di Studio.


Eliminare una pianificazione

Importante

Una pianificazione deve essere disabilitata per essere eliminata. Elimina è un'azione irreversibile. Una volta eliminata una pianificazione, non è possibile accedervi o recuperarla.

SI APPLICA A:Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)

az ml schedule delete -n simple_cron_job_schedule

Supporto del controllo degli accessi in base al ruolo (RBAC)

Poiché le pianificazioni vengono in genere usate per la produzione, per ridurre l'impatto dell'operazione errata, gli amministratori dell'area di lavoro possono voler limitare l'accesso alla creazione e alla gestione delle pianificazioni all'interno di un'area di lavoro.

Attualmente sono disponibili tre regole di azione correlate alle pianificazioni ed è possibile configurare nel portale di Azure. Per altre informazioni, vedere Come gestire l'accesso a un'area di lavoro di Azure Machine Learning.

Azione Descrizione Regola
Lettura Ottenere ed elencare le pianificazioni nell'area di lavoro di Machine Learning Microsoft.MachineLearningServices/workspaces/schedules/read
Scrittura Creare, aggiornare, disabilitare e abilitare pianificazioni nell'area di lavoro di Machine Learning Microsoft.MachineLearningServices/workspaces/schedules/write
Elimina Eliminare una pianificazione nell’area di lavoro di Machine Learning Microsoft.MachineLearningServices/workspaces/schedules/delete

Considerazioni sui costi

  • Le pianificazioni vengono fatturate in base al numero di pianificazioni, ogni pianificazione creerà un'app per la logica che ospiterà sottoscrizioni di Azure Machine Learning per conto dell'utente (HOBO).
  • Il costo delle app per la logica tornerà alla sottoscrizione di Azure dell'utente ed è possibile trovare i costi delle risorse HOBO fatturati usando lo stesso contatore generato dal rp originale. Vengono visualizzati sotto la risorsa host (l'area di lavoro).

Domande frequenti

  • Perché le pianificazioni create dall'SDK non sono elencate nell'interfaccia utente?

    L'interfaccia utente delle pianificazioni è per le pianificazioni v2. Di conseguenza, le pianificazioni v1 non verranno elencate o accessibili tramite l'interfaccia utente.

    Tuttavia, le pianificazioni v2 supportano anche i processi della pipeline v1. Non è prima necessario pubblicare la pipeline ed è possibile configurare direttamente le pianificazioni per un processo della pipeline.

  • Perché le pianificazioni non attivano il processo al momento dell'impostazione precedente?

    • Per impostazione predefinita, le pianificazioni useranno il fuso orario UTC per calcolare l'ora del trigger. È possibile specificare il fuso orario nella creazione guidata o aggiornare il fuso orario nella pagina dei dettagli della pianificazione.
    • Se si imposta la ricorrenza come il 31° giorno di ogni mese, in mesi con meno di 31 giorni, la pianificazione non attiverà i processi.
    • Se si usano espressioni cron, MONTH non è supportato. Se si passa un valore, verrà ignorato e considerato come *. Si tratta di una limitazione nota.
  • Le pianificazioni basate su eventi sono supportate?

    • No, la pianificazione V2 non supporta le pianificazioni basate su eventi.

Passaggi successivi