Pianificare i processi della pipeline di Machine Learning

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

Questo articolo illustra come pianificare l'esecuzione di pipeline di apprendimento automatico in Azure. È possibile pianificare attività di routine come la ripetizione del training dei modelli o l'aggiornamento regolare delle stime in batch in base al tempo trascorso.

Questo articolo illustra come creare, recuperare, aggiornare e disattivare le pianificazioni mediante l'interfaccia della riga di comando di Azure Machine Learning, Azure Machine Learning SDK v2 per Python o l'interfaccia utente dello studio di Azure Machine Learning.

Suggerimento

Per pianificare i processi usando un agente di orchestrazione esterno, come Azure Data Factory o Microsoft Fabric, è consigliabile distribuire i processi di pipeline in un endpoint batch. Per altre informazioni, vedere Distribuire processi di pipeline esistenti in endpoint batch e Eseguire modelli di Azure Machine Learning da Fabric usando endpoint batch (anteprima).

Prerequisiti

Limiti

  • Le pianificazioni di Azure Machine Learning v2 non supportano i trigger basati su eventi.
  • Le pianificazioni dell'interfaccia della riga di comando e dell'SDK v2 supportano la specifica di criteri di ricorrenza complessi che contengono più timestamp di trigger. L'interfaccia utente dello studio visualizza i criteri complessi ma non ne supporta la modifica.
  • L'interfaccia utente dello studio supporta solo le pianificazioni v2 e non è in grado di elencare o accedere alle pianificazioni v1 basate su pipeline pubblicate o endpoint di pipeline. È possibile creare una pianificazione per una pipeline non pubblicata.
  • Se la ricorrenza è impostata al 31° o al 30° giorno di ogni mese, la pianificazione non attiva i processi in mesi che hanno meno giorni.
  • I valori DAYS e MONTHS non sono supportati nelle espressioni di pianificazioni Cron. I valori passati per questi parametri vengono ignorati e considerati come *.

Creare una programmazione

Quando le prestazioni e gli output di un processo di pipeline sono soddisfacenti, è possibile configurare una pianificazione per l’attivazione automatica del processo a intervalli regolari. A questo scopo è necessario creare una pianificazione che associ il processo a un trigger. Il trigger può essere un criterio recurrence o un'espressione cron che specifica l'intervallo e la frequenza di esecuzione del processo.

In entrambi i casi occorre prima definire un processo di pipeline, inline o specificandone uno esistente. È possibile definire pipeline in YAML ed eseguirle dall'interfaccia della riga di comando, creare pipeline inline in Python oppure comporre pipeline nello studio di Azure Machine Learning. È possibile creare processi di pipeline in locale o da processi esistenti nell'area di lavoro.

È possibile creare pianificazioni v2 per processi di pipeline v2 o v1 usando l'interfaccia utente dello studio, l'SDK v2 o l'interfaccia della riga di comando v2. Non è necessario pubblicare prima le pipeline esistenti per poter configurare le pianificazioni per i processi di pipeline.

Gli esempi di codice forniti in questo articolo sono tratti da Uso della pianificazione nell'interfaccia della riga di comando di Azure Machine Learning 2.0.

Definire una pianificazione basata sul tempo con un criterio di ricorrenza

Il codice YAML seguente definisce una pianificazione ricorrente per un processo di pipeline. Il parametro obbligatorio type specifica che il tipo di 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

È obbligatorio o facoltativo specificare i parametri di pianificazione seguenti:

Parametri

  • frequency (obbligatorio) è l'unità di tempo in base alla quale viene attivata la pianificazione. Può essere minutes, hours, days, weeks o months.
  • interval (obbligatorio) è il numero di unità di tempo tra le ricorrenze della pianificazione.
  • schedule (facoltativo) definisce il criterio di ricorrenza, che può contenere hours, minutes e weekdays. Se omesso, i processi vengono attivati in base alla logica di start_time, frequency e interval.
    • Quando frequency è uguale a day, il criterio può specificare hours e minutes.
    • Quando frequency è uguale a week o a month, il criterio può specificare hours, minutes e weekdays.
      • hours è un numero intero o un elenco compreso tra 0 e 23.
      • minutes è un numero intero o un elenco compreso tra 0 e 59.
      • weekdays è una stringa o un elenco compreso tra monday e sunday.
  • start_time (facoltativo) è la data e l'ora di inizio con il fuso orario. Se omesso, il valore predefinito è uguale alla data e ora di creazione della pianificazione. Se la data e ora di inizio è nel passato, il primo processo viene eseguito alla data e ora di esecuzione successiva calcolata.
  • end_time (facoltativo) è la data e l'ora di fine con il fuso orario. Se omesso, la pianificazione rimane attiva finché non viene disabilitata manualmente.
  • time_zone (facoltativo) specifica il fuso orario della pianificazione della ricorrenza. Se omesso, il valore predefinito è Coordinated Universal Time (UTC). Per altre informazioni sui valori del fuso orario, vedere la relativa appendice.

Dopo aver creato lo schema YAML della pianificazione, è possibile usare il comando seguente per creare la pianificazione tramite l'interfaccia della riga di comando:

# 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

Definire una pianificazione basata sul tempo con un'espressione Cron

Un'espressione Cron consente di specificare un criterio di ricorrenza più flessibile e personalizzato per una pianificazione. Un’espressione crontab standard è costituita dai campi delimitati da spazi MINUTES HOURS DAYS MONTHS DAYS-OF-WEEK. Il carattere jolly * indica tutti i valori di un campo.

In un'espressione Cron per le pianificazioni di Azure Machine Learning:

  • MINUTES è un numero intero o un elenco compreso tra 0 e 59.
  • HOURS è un numero intero o un elenco compreso tra 0 e 23.
  • I valori DAYS non sono supportati e vengono sempre considerati come *. Il valore * in DAYS indica tutti i giorni di un mese (varia con mese e anno).
  • I valori MONTHS non sono supportati e vengono sempre considerati come *.
  • DAYS-OF-WEEK è un numero intero o un elenco compreso tra 0 e 6, dove 0 corrisponde a domenica. Sono accettati anche i nomi dei giorni.

Ad esempio, l'espressione 15 16 * * 1 indica le 16:15 UTC di ogni lunedì. Per altre informazioni sulle espressioni crontab, vedere la wiki sull’espressione Crontab in GitHub.

Il codice YAML seguente definisce una pianificazione ricorrente per un processo di pipeline. Il parametro obbligatorio type specifica che il tipo di 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

È obbligatorio o facoltativo specificare i parametri di pianificazione seguenti:

Parametri

  • expression (obbligatorio) è un'espressione crontab standard che esprime una pianificazione ricorrente.
  • start_time (facoltativo) è la data e l'ora di inizio della pianificazione con il fuso orario. Ad esempio, start_time: "2022-05-10T10:15:00-04:00" indica che la pianificazione inizia alle 10:15:00 del 10 maggio 2022 nel fuso orario UTC-4. Se omesso, il valore predefinito è uguale alla data e ora di creazione della pianificazione. Se la data e ora di inizio è nel passato, il primo processo viene eseguito alla data e ora di esecuzione successiva calcolata.
  • end_time (facoltativo) è la data e l'ora di fine con il fuso orario. Se omesso, la pianificazione rimane attiva finché non viene disabilitata manualmente.
  • time_zone (facoltativo) specifica il fuso orario della pianificazione della ricorrenza. Se omesso, il valore predefinito è UTC.

Dopo aver creato lo schema YAML della pianificazione, è possibile usare il comando seguente per creare la pianificazione tramite l'interfaccia della riga di comando:

# 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

Modificare le impostazioni del processo durante la definizione delle pianificazioni

In alcuni casi può essere opportuno che i processi attivati dalle pianificazioni abbiano configurazioni diverse dai processi di test. Quando si definisce una pianificazione usando un processo esistente, è possibile modificare le impostazioni del processo. Questo approccio consente di definire più pianificazioni che usano lo stesso processo con input diversi.

Durante la definizione di una pianificazione, è possibile modificare i valori di settings, inputs o outputs da usare per l'esecuzione del processo di pipeline. È anche possibile modificare il valore experiment_name del processo attivato.

La definizione di pianificazione seguente modifica le impostazioni di un processo esistente.

$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

Usare espressioni supportate nelle pianificazioni

Durante la definizione di una pianificazione, è possibile usare le espressioni macro seguenti per definire i valori dei parametri dinamici che si risolvono in valori effettivi durante il runtime del processo.

Expression Descrizione Proprietà supportate
${{name}} Nome del processo Percorso di outputs del processo di pipeline
${{creation_context.trigger_time}} Ora di attivazione del processo inputs di tipo stringa del processo della pipeline

Gestisci pianificazione

È possibile elencare, aggiornare, disabilitare, abilitare ed eliminare pianificazioni, nonché visualizzarne i dettagli, in un'area di lavoro.

Elencare le pianificazioni

az ml schedule list

Visualizzare i dettagli della pianificazione

az ml schedule show -n simple_cron_job_schedule

Aggiornare una pianificazione

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

Nota

Per aggiornare altre voci oltre ai tag e alla descrizione, è consigliabile usare az ml schedule create --file update_schedule.yml.

Disabilitare una pianificazione

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

Abilitare una pianificazione

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

Eliminare una pianificazione

Importante

Per eliminare una pianificazione, occorre prima disabilitarla. L'eliminazione è un’operazione permanente e irreversibile.

az ml schedule delete -n simple_cron_job_schedule

Eseguire query sui processi attivati da una pianificazione

Tutti i processi attivati da una pianificazione specifica hanno il nome visualizzato <schedule_name>-YYYYMMDDThhmmssZ. Ad esempio, se una pianificazione denominata named-schedule viene eseguita ogni 12 ore a partire dalle 6:00 del 1° gennaio 2021, i processi creati avranno i nomi visualizzati seguenti:

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

Screenshot della scheda Processi nel filtro di Studio di Azure Machine Learning 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')]"

Suggerimento

La scheda Cronologia processi nella pagina dei dettagli della pianificazione nello studio offre un modo semplice per trovare tutti i processi attivati da una pianificazione.


Supporto del controllo degli accessi in base al ruolo

Poiché le pianificazioni vengono usate per la produzione, è importante ridurre la possibilità e l'impatto di eventuali operazioni errate. Gli amministratori dell'area di lavoro possono limitare l'accesso alle operazioni di creazione e gestione delle pianificazioni in un'area di lavoro.

Gli amministratori possono configurare le seguenti regole di azione relative alle pianificazioni nel portale di Azure. Per altre informazioni, vedere Gestire l'accesso alle aree di lavoro di Azure Machine Learning.

Azione Descrizione Regola
Lettura Ottenere ed elencare le pianificazioni Microsoft.MachineLearningServices/workspaces/schedules/read
Scrittura Creare, aggiornare, disabilitare e abilitare pianificazioni Microsoft.MachineLearningServices/workspaces/schedules/write
Elimina Eliminare pianificazioni Microsoft.MachineLearningServices/workspaces/schedules/delete

Considerazioni sui costi

Le pianificazioni vengono fatturate in base al numero. Ogni pianificazione crea un'app per la logica ospitata in Azure Machine Learning per conto dell'utente (HOBO).

L'app per la logica viene addebitata sulla sottoscrizione di Azure dell'utente. I costi delle risorse HOBO vengono fatturati usando lo stesso contatore generato dal provider di risorse originale. Gli addebiti vengono visualizzati nella risorsa host, ovvero l'area di lavoro di Azure Machine Learning.