Configurare AutoML per eseguire il training di un modello di previsione di serie temporali con SDK e interfaccia della riga di comando
SI APPLICA A:Estensione per Machine Learning dell'interfaccia della riga di comando di Azure v2 (corrente)Python SDK azure-ai-ml v2 (corrente)
Machine Learning automatizzato (AutoML) in Azure Machine Learning usa modelli di Machine Learning standard insieme a modelli di serie temporali noti per creare previsioni. Questo approccio incorpora informazioni cronologiche sulla variabile di destinazione con funzionalità fornite dall'utente nei dati di input e funzionalità definite automaticamente. Gli algoritmi di ricerca dei modelli consentono di identificare i modelli con la migliore accuratezza predittiva. Per altre informazioni, vedere Metodologia di previsione e sweep e selezione del modello.
Questo articolo descrive come configurare AutoML per la previsione di serie temporali con Machine Learning usando Azure Machine Learning Python SDK](/python/api/overview/azure/ai-ml-readme). Il processo include la preparazione dei dati per il training e la configurazione dei parametri delle serie temporali in un processo di previsione (riferimento alla classe). È quindi possibile eseguire il training, l'inferenza e valutare i modelli usando componenti e pipeline.
Per un'esperienza con poco codice, vedere Esercitazione: Prevedere la domanda con Machine Learning automatizzato. Questa risorsa è un esempio di previsione delle serie temporali che usa AutoML in studio di Azure Machine Learning.
Prerequisiti
- Un'area di lavoro di Azure Machine Learning. Per creare un'area di lavoro, vedere Creare risorse dell'area di lavoro.
- Possibilità di avviare processi di training di AutoML. Per altre informazioni, vedere Configurare il training AutoML per i dati tabulari con l'interfaccia della riga di comando di Azure Machine Learning e Python SDK.
Preparare i dati di training e convalida
I dati di input per la previsione di AutoML devono contenere una serie temporale valida in formato tabulare. Ogni variabile deve avere una propria colonna corrispondente nella tabella dati. AutoML richiede almeno due colonne: una colonna temporale per rappresentare l'asse temporale e una colonna di destinazione per la quantità da prevedere. Altre colonne possono fungere da predittori. Per altre informazioni, vedere Come AutoML usa i dati.
Importante
Quando si esegue il training di un modello per prevedere valori futuri, assicurarsi che tutte le funzionalità usate nel training possano essere usate anche durante l'esecuzione di stime per l'orizzonte previsto.
Si consideri una funzionalità per il prezzo azionario corrente, che può aumentare notevolmente l'accuratezza del training. Se si prevede un orizzonte lungo, potrebbe non essere possibile stimare con precisione i valori delle azioni future che corrispondono ai punti delle serie temporali future. Questo approccio può ridurre l'accuratezza del modello.
I processi di previsione autoML richiedono che i dati di training siano rappresentati come MLTable
oggetto . Un MLTable
oggetto specifica un'origine dati e i passaggi per il caricamento dei dati. Per altre informazioni e casi d'uso, vedere [Uso di tabelle (how-to-mltable.md).
Per l'esempio seguente, si supponga che i dati di training siano contenuti in un file CSV in una directory locale, ./train_data/timeseries_train.csv.
È possibile creare un MLTable
oggetto usando mltable Python SDK , come illustrato nell'esempio seguente:
import mltable
paths = [
{'file': './train_data/timeseries_train.csv'}
]
train_table = mltable.from_delimited_files(paths)
train_table.save('./train_data')
Questo codice crea un nuovo file, ./train_data/MLTable, che contiene il formato di file e le istruzioni di caricamento.
Per avviare il processo di training, definire un oggetto dati di input usando Python SDK come indicato di seguito:
from azure.ai.ml.constants import AssetTypes
from azure.ai.ml import Input
# Training MLTable defined locally, with local data to be uploaded
my_training_data_input = Input(
type=AssetTypes.MLTABLE, path="./train_data"
)
Specificare dati di convalida in modo simile. Creare un MLTable
oggetto e specificare un input di dati di convalida. In alternativa, se non si forniscono dati di convalida, AutoML crea automaticamente divisioni di convalida incrociata dai dati di training da usare per la selezione del modello. Per ulteriori informazioni, vedi le seguenti risorse:
- Selezionare i modelli di previsione
- Impostare i requisiti di lunghezza dei dati di training
- Impedire l'overfitting con la convalida incrociata
Creare il calcolo per eseguire l'esperimento
AutoML usa l'ambiente di calcolo di Azure Machine Learning, ovvero una risorsa di calcolo completamente gestita, per eseguire il processo di training. Nell'esempio seguente viene creato un cluster di calcolo denominato cpu-compute
.
from azure.ai.ml.entities import AmlCompute
# specify aml compute name.
cpu_compute_target = "cpu-cluster"
try:
ml_client.compute.get(cpu_compute_target)
except Exception:
print("Creating a new cpu compute target...")
compute = AmlCompute(
name=cpu_compute_target, size="STANDARD_D2_V2", min_instances=0, max_instances=4
)
ml_client.compute.begin_create_or_update(compute).result()
Configurare l'esperimento
Nell'esempio seguente viene illustrato come configurare l'esperimento.
Le funzioni factory autoML vengono usate per configurare i processi di previsione in Python SDK. L'esempio seguente illustra come creare un processo di previsione impostando la metrica primaria e impostando i limiti per l'esecuzione del training:
from azure.ai.ml import automl
# Set forecasting variables
# As needed, modify the variable values to run the snippet successfully
forecasting_job = automl.forecasting(
compute="cpu-compute",
experiment_name="sdk-v2-automl-forecasting-job",
training_data=my_training_data_input,
target_column_name=target_column_name,
primary_metric="normalized_root_mean_squared_error",
n_cross_validations="auto",
)
# Set optional limits
forecasting_job.set_limits(
timeout_minutes=120,
trial_timeout_minutes=30,
max_concurrent_trials=4,
)
Prevedere le impostazioni del processo
Le attività di previsione hanno molte impostazioni specifiche per la previsione. Le impostazioni più semplici sono il nome della colonna temporale nei dati di training e l'orizzonte di previsione.
Usare i metodi di ForecastingJob per configurare queste impostazioni:
# Forecasting specific configuration
forecasting_job.set_forecast_settings(
time_column_name=time_column_name,
forecast_horizon=24
)
Il nome della colonna temporale è un'impostazione obbligatoria. In genere è consigliabile impostare l'orizzonte di previsione in base allo scenario di previsione. Se i dati contengono più serie temporali, è possibile specificare i nomi delle colonne ID di serie temporali. Quando queste colonne vengono raggruppate, definiscono le singole serie. Si supponga, ad esempio, di avere dati costituiti da vendite orarie da negozi e marchi diversi. L'esempio seguente illustra come impostare le colonne ID serie temporali presupponendo che i dati contengano delle colonne denominate store e marchio:
# Forecasting specific configuration
# Add time series IDs for store and brand
forecasting_job.set_forecast_settings(
..., # Other settings
time_series_id_column_names=['store', 'brand']
)
AutoML tenta di rilevare automaticamente le colonne ID serie temporali nei dati se non è specificato alcun valore.
Altre impostazioni sono facoltative e esaminate nella sezione seguente.
Impostazioni facoltative del processo di previsione
Sono disponibili configurazioni facoltative per le attività di previsione, ad esempio l'abilitazione del Deep Learning e la specifica di un'aggregazione di finestra mobile di destinazione. Nella documentazione di riferimento è disponibile un elenco completo dei parametri.
Impostazioni di ricerca del modello
Esistono due impostazioni facoltative che controllano lo spazio del modello in cui AutoML cerca il modello migliore: allowed_training_algorithms
e blocked_training_algorithms
. Per limitare lo spazio di ricerca a un determinato set di classi di modelli, usare il allowed_training_algorithms
parametro come illustrato nell'esempio seguente:
# Only search ExponentialSmoothing and ElasticNet models
forecasting_job.set_training(
allowed_training_algorithms=["ExponentialSmoothing", "ElasticNet"]
)
In questo scenario, il processo di previsione esegue la ricerca solo su classi di modelli Esponenziali Smoothing e Elastic Net. Per rimuovere un determinato set di classi di modelli dallo spazio di ricerca, usare come blocked_training_algorithms
illustrato nell'esempio seguente:
# Search over all model classes except Prophet
forecasting_job.set_training(
blocked_training_algorithms=["Prophet"]
)
Il processo esegue la ricerca in tutte le classi di modelli tranne Prophet. Per un elenco dei nomi dei modelli di previsione accettati in allowed_training_algorithms
e blocked_training_algorithms
, vedere proprietà di training. È possibile applicare entrambe le operazioni, ma non entrambe allowed_training_algorithms
e blocked_training_algorithms
a un'esecuzione di training.
Abilitare l'apprendimento per reti neurali profonde
AutoML viene fornito con un modello DNN (Deep Neural Network) personalizzato denominato TCNForecaster
. Questo modello è una rete convoluzionale temporale (TCN), che applica i metodi comuni delle attività di imaging alla modellazione di serie temporali. Le convoluzioni "causali" unidimensionali formano la struttura portante della rete e consentono al modello di apprendere criteri complessi in periodi di tempo prolungati nella cronologia del training. Per altre informazioni, vedere Introduzione a TCNForecaster.
TCNForecaster ottiene spesso un'accuratezza superiore rispetto ai modelli di serie temporali standard quando sono presenti migliaia o anche più osservazioni nella cronologia di training. Il training e lo sweep dei modelli TCNForecaster richiedono tuttavia più tempo a causa della capacità più elevata.
È possibile abilitare TCNForecaster in AutoML impostando il flag enable_dnn_training
nella configurazione di training come indicato di seguito:
# Include TCNForecaster models in the model search
forecasting_job.set_training(
enable_dnn_training=True
)
Per impostazione predefinita, il training di TCNForecaster è limitato a un singolo nodo di calcolo e a una singola GPU, se disponibile, per ogni prova del modello. Per scenari di dati di grandi dimensioni, è consigliabile distribuire ogni valutazione TCNForecaster su più core/GPU e nodi. Per altre informazioni ed esempi di codice, vedere Training distribuito.
Per abilitare DNN per un esperimento AutoML creato in studio di Azure Machine Learning, vedere le impostazioni del tipo di attività nella procedura di utilizzo dell'interfaccia utente di Studio.
Nota
- Quando si abilita la rete neurale profonda per gli esperimenti creati con l'SDK, le spiegazioni del modello migliori sono disabilitate.
- Il supporto di DNN per la previsione in Machine Learning automatizzato non è supportato per le esecuzioni avviate in Azure Databricks.
- L'approccio consigliato consiste nell'usare i tipi di calcolo GPU quando è abilitato il training DNN.
Funzionalità di ritardo e finestra mobile
I valori recenti della destinazione sono spesso funzionalità rilevanti in un modello di previsione. Di conseguenza, AutoML può creare funzionalità di aggregazione con ritardo e finestra mobile per migliorare potenzialmente l'accuratezza del modello.
Si consideri uno scenario di previsione della domanda energetica in cui sono disponibili i dati meteo e la domanda cronologica. La tabella mostra la progettazione della funzionalità risultante che si verifica quando l'aggregazione delle finestre viene applicata nelle ultime tre ore. Le colonne per minimo, massimo, e somma vengono generate in una finestra temporale scorrevole di tre ore in base alle impostazioni definite. Ad esempio, per l'osservazione valida l'8 settembre 2017 4:00, i valori massimi, minimi e somma vengono calcolati usando i valori della domanda per l'8 settembre 2017 1:00 - 3:00AM. Questa finestra di tre ore scorre in avanti per popolare i dati per le righe rimanenti. Per altre informazioni ed esempi, vedere le funzionalità di ritardo per la previsione delle serie temporali in AutoML.
È possibile abilitare le funzionalità di aggregazione di ritardo e finestra mobile per la destinazione impostando le dimensioni della finestra mobile, e gli ordini di ritardo da creare. Le dimensioni della finestra erano tre nell'esempio precedente. È anche possibile abilitare i ritardi per le funzionalità con l'impostazione feature_lags
. Nell'esempio seguente, tutte queste impostazioni sono impostate su auto
per indicare a AutoML di determinare automaticamente le impostazioni analizzando la struttura di correlazione dei dati:
forecasting_job.set_forecast_settings(
..., # Other settings
target_lags='auto',
target_rolling_window_size='auto',
feature_lags='auto'
)
Gestione di serie brevi
AutoML considera una serie temporale una serie breve se non sono presenti punti dati sufficienti per eseguire le fasi di training e convalida dello sviluppo di modelli. Per altre informazioni, vedere Requisiti di lunghezza dei dati di training.
AutoML include diverse azioni che possono essere eseguite per serie brevi. Queste azioni sono configurabili con l'impostazione short_series_handling_config
. Il valore predefinito è auto
. Nella seguente tabella vengono illustrate le impostazioni:
Impostazione | Descrizione | Note |
---|---|---|
auto |
Valore predefinito per la gestione di serie brevi. | - Se tutte le serie sono brevi, aggiungere i dati. - Se non tutte le serie sono brevi, rilasciare la serie breve. |
pad |
Se viene usata l'impostazione short_series_handling_config = pad , AutoML aggiunge valori casuali a ogni breve serie trovata. AutoML riempie la colonna di destinazione con rumore bianco. |
È possibile usare i tipi di colonna seguenti con la spaziatura interna specificata: - Colonne oggetto, riquadro con NaN s - Colonne numeriche, riquadro con 0 (zero) - Colonne booleane/logiche, riquadro con False |
drop |
Se viene usata l'impostazione short_series_handling_config = drop , AutoML elimina la serie breve e non viene usata per il training o la stima. |
Le previsioni per queste serie restituiranno valori NaN . |
None |
Nessuna serie viene riempita o eliminata. |
Nell'esempio seguente viene impostata la gestione delle serie brevi in modo che tutte le serie brevi vengano riempite con la lunghezza minima:
forecasting_job.set_forecast_settings(
..., # Other settings
short_series_handling_config='pad'
)
Attenzione
La spaziatura interna può influire sull'accuratezza del modello risultante perché introduce dati artificiali per evitare errori di training. Se molte delle serie sono brevi, si potrebbe verificare un certo impatto anche nei risultati di spiegabilità.
Frequenza e aggregazione dei dati di destinazione
Usare le opzioni di frequenza e aggregazione dei dati per evitare errori causati da dati irregolari. I dati sono irregolari se non seguono una cadenza impostata nel tempo, ad esempio ogni ora oppure ogni giorno. I dati POS (Point Of Sale) sono un buon esempio di dati irregolari. In questi scenari AutoML può aggregare i dati a una frequenza desiderata e quindi creare un modello di previsione dalle aggregazioni.
È necessario configurare le impostazioni frequency
e target_aggregate_function
per gestire i dati irregolari. L'impostazione della frequenza accetta stringhe DateOffset Pandas come input. La tabella seguente mostra i valori supportati per la funzione di aggregazione:
Funzione | Descrizione |
---|---|
sum |
Somma dei valori di destinazione |
mean |
Media o media dei valori di destinazione |
min |
Valore minimo di una destinazione |
max |
Valore massimo di una destinazione |
AutoML applica l'aggregazione per le colonne seguenti:
Colonna | Metodo di aggregazione |
---|---|
Predictor numerici | AutoML usa le sum funzioni , mean min , e max . Genera nuove colonne, in cui ogni nome di colonna include un suffisso che identifica il nome della funzione di aggregazione applicata ai valori di colonna. |
Predittori categorici | AutoML usa il valore del forecast_mode parametro per aggregare i dati. È la categoria più importante nella finestra. Per altre informazioni, vedere le descrizioni del parametro nelle sezioni Pipeline molti modelli e pipeline HTS. |
Predittori di dati | AutoML usa il valore di destinazione minimo (min ), il valore di destinazione massimo (max ) e forecast_mode le impostazioni dei parametri per aggregare i dati. |
Destinazione | AutoML aggrega i valori in base all'operazione specificata. In genere, la funzione è appropriata per la sum maggior parte degli scenari. |
L'esempio seguente imposta la frequenza su oraria e la funzione di aggregazione su somma:
# Aggregate the data to hourly frequency
forecasting_job.set_forecast_settings(
..., # Other settings
frequency='H',
target_aggregate_function='sum'
)
Impostazioni di convalida incrociata personalizzate
Esistono due impostazioni personalizzabili che controllano la convalida incrociata per i processi di previsione. Personalizzare il numero di riduzioni con il parametro n_cross_validations e configurare il parametro cv_step_size per definire l'offset di tempo tra le riduzioni. Per altre informazioni, vedere selezione del modello di previsione.
Per impostazione predefinita, AutoML imposta automaticamente entrambe le impostazioni in base alle caratteristiche dei dati. Gli utenti avanzati potrebbero voler impostarli manualmente. Si supponga, ad esempio, di avere dati di vendita giornalieri e di volere che la configurazione della convalida sia costituita da cinque riduzioni con un offset di sette giorni tra le riduzioni adiacenti. L'esempio di codice seguente illustra come impostare questi valori:
from azure.ai.ml import automl
# Create a job with five CV folds
forecasting_job = automl.forecasting(
..., # Other training parameters
n_cross_validations=5,
)
# Set the step size between folds to seven days
forecasting_job.set_forecast_settings(
..., # Other settings
cv_step_size=7
)
Definizione delle funzionalità personalizzata
Per impostazione predefinita, AutoML aumenta i dati di training con funzionalità ingegnerizzate per incrementare l'accuratezza dei modelli. Per altre informazioni, vedere progettazione automatizzata delle funzionalità. Alcuni dei passaggi di pre-elaborazione possono essere personalizzati usando la configurazione delle caratteristiche del processo di previsione.
La tabella seguente elenca le personalizzazioni supportate per la previsione:
Personalizzazione | Descrizione | Opzioni |
---|---|---|
Aggiornamento dello scopo della colonna | Esegue l'override del tipo di funzionalità rilevato automaticamente per la colonna specificata. | categorical , dateTime , numeric |
Aggiornamento dei parametri del trasformatore | Aggiorna i parametri per l'imputer specificato. | {"strategy": "constant", "fill_value": <value>} , {"strategy": "median"} , {"strategy": "ffill"} |
Si supponga, ad esempio, di avere uno scenario di domanda al dettaglio in cui i dati includono prezzi, un flag on sale
e un tipo di prodotto. L'esempio seguente illustra come impostare tipi e computer personalizzati per queste funzionalità:
from azure.ai.ml.automl import ColumnTransformer
# Customize imputation methods for price and is_on_sale features
# Median value imputation for price, constant value of zero for is_on_sale
transformer_params = {
"imputer": [
ColumnTransformer(fields=["price"], parameters={"strategy": "median"}),
ColumnTransformer(fields=["is_on_sale"], parameters={"strategy": "constant", "fill_value": 0}),
],
}
# Set the featurization
# Ensure product_type feature is interpreted as categorical
forecasting_job.set_featurization(
mode="custom",
transformer_params=transformer_params,
column_name_and_types={"product_type": "Categorical"},
)
Se si usa studio di Azure Machine Learning per l'esperimento, vedere Configurare le impostazioni di definizione delle funzionalità in Studio.
Inviare un processo di previsione
Dopo aver configurato tutte le impostazioni, si è pronti per eseguire il processo di previsione. Nell'esempio seguente viene illustrato questo processo.
# Submit the AutoML job
returned_job = ml_client.jobs.create_or_update(
forecasting_job
)
print(f"Created job: {returned_job}")
# Get a URL for the job in the studio UI
returned_job.services["Studio"].endpoint
Dopo l'invio del processo, AutoML effettua il provisioning delle risorse di calcolo, applica le funzionalità e altri passaggi di preparazione ai dati di input e inizia a eseguire lo sweep dei modelli di previsione. Per altre informazioni, vedere Metodologia di previsione in AutoML e Sweeping e Selezione del modello per la previsione in AutoML.
Orchestrare il training, inferenza e valutazione con componenti e pipeline
Il flusso di lavoro di Machine Learning richiede probabilmente più del semplice training. L'inferenza o il recupero di previsioni del modello su dati più recenti e la valutazione dell'accuratezza del modello in un set di test con valori di destinazione noti sono altre attività comuni che è possibile orchestrare in Azure Machine Learning insieme ai processi di training. Per supportare le attività di inferenza e valutazione, Azure Machine Learning fornisce componenti, ovvero parti di codice autonome che eseguono un passaggio in una pipeline di Azure Machine Learning.
Nell'esempio seguente viene recuperato il codice del componente da un registro client:
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential
# Get credential to access AzureML registry
try:
credential = DefaultAzureCredential()
# Check if token can be obtained successfully
credential.get_token("https://management.azure.com/.default")
except Exception as ex:
# Fall back to InteractiveBrowserCredential in case DefaultAzureCredential fails
credential = InteractiveBrowserCredential()
# Create client to access assets in AzureML preview registry
ml_client_registry = MLClient(
credential=credential,
registry_name="azureml-preview"
)
# Create client to access assets in AzureML registry
ml_client_metrics_registry = MLClient(
credential=credential,
registry_name="azureml"
)
# Get inference component from registry
inference_component = ml_client_registry.components.get(
name="automl_forecasting_inference",
label="latest"
)
# Get component to compute evaluation metrics from registry
compute_metrics_component = ml_client_metrics_registry.components.get(
name="compute_metrics",
label="latest"
)
Viene quindi definita una funzione di factory che crea pipeline che orchestrano il training, l'inferenza e il calcolo delle metriche. Per altre informazioni, vedere Configurare l'esperimento.
from azure.ai.ml import automl
from azure.ai.ml.constants import AssetTypes
from azure.ai.ml.dsl import pipeline
@pipeline(description="AutoML Forecasting Pipeline")
def forecasting_train_and_evaluate_factory(
train_data_input,
test_data_input,
target_column_name,
time_column_name,
forecast_horizon,
primary_metric='normalized_root_mean_squared_error',
cv_folds='auto'
):
# Configure training node of pipeline
training_node = automl.forecasting(
training_data=train_data_input,
target_column_name=target_column_name,
primary_metric=primary_metric,
n_cross_validations=cv_folds,
outputs={"best_model": Output(type=AssetTypes.MLFLOW_MODEL)},
)
training_node.set_forecasting_settings(
time_column_name=time_column_name,
forecast_horizon=max_horizon,
frequency=frequency,
# Other settings
...
)
training_node.set_training(
# Training parameters
...
)
training_node.set_limits(
# Limit settings
...
)
# Configure inference node to make rolling forecasts on test set
inference_node = inference_component(
test_data=test_data_input,
model_path=training_node.outputs.best_model,
target_column_name=target_column_name,
forecast_mode='rolling',
step=1
)
# Configure metrics calculation node
compute_metrics_node = compute_metrics_component(
task="tabular-forecasting",
ground_truth=inference_node.outputs.inference_output_file,
prediction=inference_node.outputs.inference_output_file,
evaluation_config=inference_node.outputs.evaluation_config_output_file
)
# Return dictionary with evaluation metrics and raw test set forecasts
return {
"metrics_result": compute_metrics_node.outputs.evaluation_result,
"rolling_fcst_result": inference_node.outputs.inference_output_file
}
Definire gli input di dati di training e test contenuti nelle cartelle locali ./train_data e ./test_data.
my_train_data_input = Input(
type=AssetTypes.MLTABLE,
path="./train_data"
)
my_test_data_input = Input(
type=AssetTypes.URI_FOLDER,
path='./test_data',
)
Si costruisce infine la pipeline, si imposta l'ambiente di calcolo predefinito e si invia il processo:
pipeline_job = forecasting_train_and_evaluate_factory(
my_train_data_input,
my_test_data_input,
target_column_name,
time_column_name,
forecast_horizon
)
# Set pipeline level compute
pipeline_job.settings.default_compute = compute_name
# Submit pipeline job
returned_pipeline_job = ml_client.jobs.create_or_update(
pipeline_job,
experiment_name=experiment_name
)
returned_pipeline_job
Dopo aver inviato la richiesta di esecuzione, la pipeline esegue il training AutoML, l'inferenza di valutazione in sequenza e il calcolo delle metriche. È possibile monitorare e controllare l'esecuzione nell'interfaccia utente dello studio. Al termine dell'esecuzione, è possibile scaricare le previsioni in sequenza e le metriche di valutazione nella directory di lavoro locale:
# Download metrics JSON
ml_client.jobs.download(returned_pipeline_job.name, download_path=".", output_name='metrics_result')
# Download rolling forecasts
ml_client.jobs.download(returned_pipeline_job.name, download_path=".", output_name='rolling_fcst_result')
È possibile esaminare l'output nelle posizioni seguenti:
- Metriche: ./named-outputs/metrics_results/evaluationResult/metrics.json
- Previsioni: ./named-outputs/rolling_fcst_result/inference_output_file (formato righe JSON)
Per altre informazioni sulla valutazione in sequenza, vedere Inferenza e valutazione dei modelli di previsione.
Previsione su larga scala: molti modelli
I numerosi componenti dei modelli in AutoML consentono di eseguire il training e gestire milioni di modelli in parallelo. Per altre informazioni sui concetti relativi a molti modelli, vedere Molti modelli.
Configurazione del training con molti modelli
Il componente di training con molti modelli accetta un file di configurazione in formato YAML delle impostazioni di training di AutoML. Il componente applica queste impostazioni a ogni istanza di AutoML avviata. Il file YAML ha la stessa specifica del processo di comando Forecasting più i partition_column_names
parametri e allow_multi_partitions
.
Parametro | Descrizione |
---|---|
partition_column_names |
Nomi di colonna nei dati che, se raggruppati, definiscono le partizioni di dati. Il componente di training con molti modelli avvia un processo di training indipendente in ogni partizione. |
allow_multi_partitions |
Flag facoltativo che consente il training di un modello per partizione quando ogni partizione contiene più di una serie temporale univoca. Il valore predefinito è false . |
L'esempio seguente fornisce una configurazione YAML di esempio:
$schema: https://azuremlsdk2.blob.core.windows.net/preview/0.0.1/autoMLJob.schema.json
type: automl
description: A time-series forecasting job config
compute: azureml:<cluster-name>
task: forecasting
primary_metric: normalized_root_mean_squared_error
target_column_name: sales
n_cross_validations: 3
forecasting:
time_column_name: date
time_series_id_column_names: ["state", "store"]
forecast_horizon: 28
training:
blocked_training_algorithms: ["ExtremeRandomTrees"]
limits:
timeout_minutes: 15
max_trials: 10
max_concurrent_trials: 4
max_cores_per_trial: -1
trial_timeout_minutes: 15
enable_early_termination: true
partition_column_names: ["state", "store"]
allow_multi_partitions: false
Negli esempi successivi la configurazione viene archiviata nel percorso, /automl_settings_mm.yml'.
Pipeline con molti modelli
Viene quindi definita una funzione di factory che crea pipeline per l'orchestrazione del training con molti modelli, l'inferenza e il calcolo delle metriche. La tabella seguente descrive i parametri per questa funzione factory:
Parametro | Descrizione |
---|---|
max_nodes |
Numero di nodi di calcolo da usare nel processo di training. |
max_concurrency_per_node |
Numero di processi di AutoML da eseguire in ogni nodo. Di conseguenza, la concorrenza totale di processi con molti modelli è max_nodes * max_concurrency_per_node . |
parallel_step_timeout_in_seconds |
Molti modelli component timeout specificati in numero di secondi. |
retrain_failed_models |
Flag per abilitare la ripetizione del training per i modelli non riusciti. Questo valore è utile se sono state eseguite molte esecuzioni di modelli precedenti che hanno generato processi AutoML non riusciti in alcune partizioni di dati. Quando si abilita questo flag, molti modelli avviano solo processi di training per le partizioni precedentemente non riuscite. |
forecast_mode |
Modalità di inferenza per la valutazione del modello. I valori validi sono recursive (valore predefinito) e rolling . Per altre informazioni, vedere Inferenza e valutazione dei modelli di previsione e riferimento alla classe ManyModelsInferenceParameters. |
step |
Dimensioni passo per la previsione in sequenza (il valore predefinito è 1). Per altre informazioni, vedere Inferenza e valutazione dei modelli di previsione e riferimento alla classe ManyModelsInferenceParameters. |
L'esempio seguente illustra un metodo factory per costruire molti modelli di training e pipeline di valutazione del modello:
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential
# Get credential to access AzureML registry
try:
credential = DefaultAzureCredential()
# Check if token can be obtained successfully
credential.get_token("https://management.azure.com/.default")
except Exception as ex:
# Fall back to InteractiveBrowserCredential in case DefaultAzureCredential fails
credential = InteractiveBrowserCredential()
# Get many models training component
mm_train_component = ml_client_registry.components.get(
name='automl_many_models_training',
version='latest'
)
# Get many models inference component
mm_inference_component = ml_client_registry.components.get(
name='automl_many_models_inference',
version='latest'
)
# Get component to compute evaluation metrics
compute_metrics_component = ml_client_metrics_registry.components.get(
name="compute_metrics",
label="latest"
)
@pipeline(description="AutoML Many Models Forecasting Pipeline")
def many_models_train_evaluate_factory(
train_data_input,
test_data_input,
automl_config_input,
compute_name,
max_concurrency_per_node=4,
parallel_step_timeout_in_seconds=3700,
max_nodes=4,
retrain_failed_model=False,
forecast_mode="rolling",
forecast_step=1
):
mm_train_node = mm_train_component(
raw_data=train_data_input,
automl_config=automl_config_input,
max_nodes=max_nodes,
max_concurrency_per_node=max_concurrency_per_node,
parallel_step_timeout_in_seconds=parallel_step_timeout_in_seconds,
retrain_failed_model=retrain_failed_model,
compute_name=compute_name
)
mm_inference_node = mm_inference_component(
raw_data=test_data_input,
max_nodes=max_nodes,
max_concurrency_per_node=max_concurrency_per_node,
parallel_step_timeout_in_seconds=parallel_step_timeout_in_seconds,
optional_train_metadata=mm_train_node.outputs.run_output,
forecast_mode=forecast_mode,
step=forecast_step,
compute_name=compute_name
)
compute_metrics_node = compute_metrics_component(
task="tabular-forecasting",
prediction=mm_inference_node.outputs.evaluation_data,
ground_truth=mm_inference_node.outputs.evaluation_data,
evaluation_config=mm_inference_node.outputs.evaluation_configs
)
# Return metrics results from rolling evaluation
return {
"metrics_result": compute_metrics_node.outputs.evaluation_result
}
Costruire la pipeline con la funzione factory. I dati di training e test si trovano rispettivamente nelle cartelle locali ./data/train e ./data/test. Infine, impostare il calcolo predefinito e inviare il processo come illustrato nell'esempio seguente:
pipeline_job = many_models_train_evaluate_factory(
train_data_input=Input(
type="uri_folder",
path="./data/train"
),
test_data_input=Input(
type="uri_folder",
path="./data/test"
),
automl_config=Input(
type="uri_file",
path="./automl_settings_mm.yml"
),
compute_name="<cluster name>"
)
pipeline_job.settings.default_compute = "<cluster name>"
returned_pipeline_job = ml_client.jobs.create_or_update(
pipeline_job,
experiment_name=experiment_name,
)
ml_client.jobs.stream(returned_pipeline_job.name)
Al termine del processo, è possibile scaricare le metriche di valutazione in locale usando la stessa procedura della pipeline di esecuzione di training singola.
Per un esempio più dettagliato, vedere la previsione della domanda con molti modelli notebook.
Considerazioni sul training per un'esecuzione di molti modelli
I numerosi modelli di training e componenti di inferenza partizionano in modo condizionale i dati in base all'impostazione partition_column_names
in modo che ogni partizione si trova nel proprio file. Questo processo può essere molto lento o presentare errori quando i dati sono molto grandi. È consigliabile partizionare manualmente i dati prima di eseguire il training o l'inferenza di molti modelli.
Nota
Il limite di parallelismo predefinito per molti modelli eseguiti all'interno di una sottoscrizione è impostato su 320. Se il carico di lavoro richiede un limite superiore, è possibile contattare il supporto tecnico Microsoft.
Previsione su larga scala: serie temporale gerarchica
I componenti della serie temporale gerarchica (HTS, Hierarchical Time Series) in AutoML consentono di eseguire il training di un numero elevato di modelli sui dati con struttura gerarchica. Per altre informazioni, vedere Previsione gerarchica delle serie temporali.
Configurazione del training della serie temporale gerarchica
Il componente di training con serie temporale gerarchica accetta un file di configurazione in formato YAML delle impostazioni di training di AutoML. Il componente applica queste impostazioni a ogni istanza di AutoML avviata. Questo file YAML ha la stessa specifica del processo di comando Forecasting e altri parametri correlati alle informazioni sulla gerarchia:
Parametro | Descrizione |
---|---|
hierarchy_column_names |
Elenco di nomi di colonna nei dati che definiscono la struttura gerarchica dei dati. L'ordine delle colonne in questo elenco determina i livelli della gerarchia. Il grado di aggregazione diminuisce con l'indice di elenco. ovvero l'ultima colonna nell'elenco definisce il livello foglia, o più disaggregato, della gerarchia. |
hierarchy_training_level |
Livello gerarchia da usare per il training del modello di previsione. |
L'esempio seguente fornisce una configurazione YAML di esempio:
$schema: https://azuremlsdk2.blob.core.windows.net/preview/0.0.1/autoMLJob.schema.json
type: automl
description: A time-series forecasting job config
compute: azureml:cluster-name
task: forecasting
primary_metric: normalized_root_mean_squared_error
log_verbosity: info
target_column_name: sales
n_cross_validations: 3
forecasting:
time_column_name: "date"
time_series_id_column_names: ["state", "store", "SKU"]
forecast_horizon: 28
training:
blocked_training_algorithms: ["ExtremeRandomTrees"]
limits:
timeout_minutes: 15
max_trials: 10
max_concurrent_trials: 4
max_cores_per_trial: -1
trial_timeout_minutes: 15
enable_early_termination: true
hierarchy_column_names: ["state", "store", "SKU"]
hierarchy_training_level: "store"
Negli esempi successivi la configurazione viene archiviata nel percorso, /automl_settings_hts.yml.
Pipeline della serie temporale gerarchica
Viene quindi definita una funzione di factory che crea pipeline per l'orchestrazione del training con serie temporale gerarchica, l'inferenza e il calcolo delle metriche. La tabella seguente descrive i parametri per questa funzione factory:
Parametro | Descrizione |
---|---|
forecast_level |
Livello della gerarchia per cui recuperare le previsioni. |
allocation_method |
Metodo di allocazione da usare quando le previsioni sono disaggregate. I valori validi sono proportions_of_historical_average e average_historical_proportions . |
max_nodes |
Numero di nodi di calcolo da usare nel processo di training. |
max_concurrency_per_node |
Numero di processi di AutoML da eseguire in ogni nodo. Di conseguenza, la concorrenza totale di un processo di serie temporale gerarchica è max_nodes * max_concurrency_per_node . |
parallel_step_timeout_in_seconds |
Molti modelli component timeout specificati in numero di secondi. |
forecast_mode |
Modalità di inferenza per la valutazione del modello. I valori validi sono recursive e rolling . Per altre informazioni, vedere Inference and evaluation of forecasting models and the HTSInferenceParameters Class reference (Inference and evaluation of forecasting models and the HTSInferenceParameters Class reference). |
step |
Dimensioni passo per la previsione in sequenza (il valore predefinito è 1). Per altre informazioni, vedere Inference and evaluation of forecasting models and the HTSInferenceParameters Class reference (Inference and evaluation of forecasting models and the HTSInferenceParameters Class reference). |
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential
# Get credential to access AzureML registry
try:
credential = DefaultAzureCredential()
# Check if token can be obtained successfully
credential.get_token("https://management.azure.com/.default")
except Exception as ex:
# Fall back to InteractiveBrowserCredential in case DefaultAzureCredential fails
credential = InteractiveBrowserCredential()
# Get HTS training component
hts_train_component = ml_client_registry.components.get(
name='automl_hts_training',
version='latest'
)
# Get HTS inference component
hts_inference_component = ml_client_registry.components.get(
name='automl_hts_inference',
version='latest'
)
# Get component to compute evaluation metrics
compute_metrics_component = ml_client_metrics_registry.components.get(
name="compute_metrics",
label="latest"
)
@pipeline(description="AutoML HTS Forecasting Pipeline")
def hts_train_evaluate_factory(
train_data_input,
test_data_input,
automl_config_input,
max_concurrency_per_node=4,
parallel_step_timeout_in_seconds=3700,
max_nodes=4,
forecast_mode="rolling",
forecast_step=1,
forecast_level="SKU",
allocation_method='proportions_of_historical_average'
):
hts_train = hts_train_component(
raw_data=train_data_input,
automl_config=automl_config_input,
max_concurrency_per_node=max_concurrency_per_node,
parallel_step_timeout_in_seconds=parallel_step_timeout_in_seconds,
max_nodes=max_nodes
)
hts_inference = hts_inference_component(
raw_data=test_data_input,
max_nodes=max_nodes,
max_concurrency_per_node=max_concurrency_per_node,
parallel_step_timeout_in_seconds=parallel_step_timeout_in_seconds,
optional_train_metadata=hts_train.outputs.run_output,
forecast_level=forecast_level,
allocation_method=allocation_method,
forecast_mode=forecast_mode,
step=forecast_step
)
compute_metrics_node = compute_metrics_component(
task="tabular-forecasting",
prediction=hts_inference.outputs.evaluation_data,
ground_truth=hts_inference.outputs.evaluation_data,
evaluation_config=hts_inference.outputs.evaluation_configs
)
# Return metrics results from rolling evaluation
return {
"metrics_result": compute_metrics_node.outputs.evaluation_result
}
Costruire la pipeline usando la funzione factory. I dati di training e test si trovano rispettivamente nelle cartelle locali ./data/train e ./data/test. Infine, impostare il calcolo predefinito e inviare il processo come illustrato nell'esempio seguente:
pipeline_job = hts_train_evaluate_factory(
train_data_input=Input(
type="uri_folder",
path="./data/train"
),
test_data_input=Input(
type="uri_folder",
path="./data/test"
),
automl_config=Input(
type="uri_file",
path="./automl_settings_hts.yml"
)
)
pipeline_job.settings.default_compute = "cluster-name"
returned_pipeline_job = ml_client.jobs.create_or_update(
pipeline_job,
experiment_name=experiment_name,
)
ml_client.jobs.stream(returned_pipeline_job.name)
Al termine del processo, le metriche di valutazione possono essere scaricate in locale usando la stessa procedura della pipeline di esecuzione di training singola.
Per un esempio più dettagliato, vedere il notebook relativo alla previsione della domanda con serie temporale gerarchica.
Considerazioni sul training per un'esecuzione HTS
I componenti di training e inferenza HTS partizionano in modo condizionale i dati in base all'impostazione hierarchy_column_names
in modo che ogni partizione si trova nel proprio file. Questo processo può essere molto lento o presentare errori quando i dati sono molto grandi. L'approccio consigliato consiste nel partizionare manualmente i dati prima di eseguire il training o l'inferenza HTS.
Nota
Il limite di parallelismo predefinito per un'esecuzione HTS all'interno di una sottoscrizione è impostato su 320. Se il carico di lavoro richiede un limite superiore, è possibile contattare il supporto tecnico Microsoft.
Previsione su larga scala: Training di DNN distribuito
Come descritto in precedenza in questo articolo, è possibile abilitare l'apprendimento per reti neurali profonde . Per informazioni sul funzionamento del training distribuito per le attività di previsione DNN, vedere Distributed Deep Neural Network Training (anteprima).
Per gli scenari con requisiti di dati di grandi dimensioni, il training distribuito con AutoML è disponibile per un set limitato di modelli. Altre informazioni ed esempi di codice sono disponibili in AutoML su larga scala: Training distribuito.
Esplorare i notebook di esempio
Esempi di codice dettagliati che illustrano le configurazioni avanzate di previsione sono disponibili nel repository GitHub autoML Forecasting Sample Notebooks . Ecco alcuni dei notebook di esempio:
- Creare una pipeline di previsione della domanda (HTS e Molti modelli)
- Eseguire il training del modello TCNForecaster (DNN) nel set di dati GitHub
- Previsione con rilevamento delle festività e definizione delle caratteristiche (set di dati bike-share)
- Configurare manualmente i ritardi e l'aggregazione delle finestre in sequenza