Esercitazione 3: Abilitare la materializzazione ricorrente ed eseguire l'inferenza batch
Questa serie di esercitazioni illustra come le funzionalità integrano perfettamente tutte le fasi del ciclo di vita di apprendimento automatico: prototipazione, training e operazionalizzazione.
La prima esercitazione ha illustrato come creare una specifica del set di funzionalità con trasformazioni personalizzate. Ha quindi illustrato come usare tale set di funzionalità per generare dati di training, abilitare la materializzazione ed eseguire un backfill. La seconda esercitazione ha illustrato come abilitare la materializzazione ed eseguire un backfill. Ha anche illustrato anche come sperimentare con le funzionalità, come metodo per migliorare le prestazioni del modello.
In questa esercitazione viene illustrato come:
- Abilitare la materializzazione ricorrente per il set di funzionalità
transactions
. - Eseguire una pipeline di inferenza batch nel modello registrato.
Prerequisiti
Prima di procedere con questa esercitazione, assicurarsi di completare la prima e la seconda esercitazione della serie.
Impostazione
Configurare il notebook Spark di Azure Machine Learning.
Per eseguire questa esercitazione, è possibile creare un nuovo notebook ed eseguire le istruzioni, procedura dettagliata. È anche possibile aprire ed eseguire il notebook esistente denominato 3. Abilitare la materializzazione ricorrente ed eseguire l'inferenza batch. È possibile trovare il notebook e tutti i notebook di questa serie nella directory featurestore_sample/notebook. È possibile scegliere tra sdk_only e sdk_and_cli. Mantenere aperta questa esercitazione e farvi riferimento per i collegamenti alla documentazione e altre spiegazioni.
Nell'elenco a discesa Ambiente di calcolo nella barra di spostamento superiore, selezionare Ambiente di calcolo Spark serverless in Azure Machine Learning Serverless Spark.
Configurare la sessione:
- Selezionare Configurare sessione nella barra di stato superiore.
- Selezionare la scheda pacchetti Python.
- Selezionare Carica file Conda.
- Selezionare il file
azureml-examples/sdk/python/featurestore-sample/project/env/online.yml
dal computer locale. - Facoltativamente, aumentare il timeout della sessione (tempo di inattività) per evitare frequenti riesecuzioni dei prerequisiti.
Avviare la sessione Spark.
# run this cell to start the spark session (any code block will start the session ). This can take around 10 mins. print("start spark session")
Configurare la directory radice per gli esempi.
import os # please update the dir to ./Users/<your_user_alias> (or any custom directory you uploaded the samples to). # You can find the name from the directory structure in the left nav root_dir = "./Users/<your_user_alias>/featurestore_sample" if os.path.isdir(root_dir): print("The folder exists.") else: print("The folder does not exist. Please create or fix the path")
Configurare l'interfaccia della riga di comando.
Non applicabile.
Inizializzare il client CRUD dell'area di lavoro del progetto (creare, leggere, aggiornare ed eliminare).
Il notebook dell'esercitazione viene eseguito da questa area di lavoro corrente.
### Initialize the MLClient of this project workspace import os from azure.ai.ml import MLClient from azure.ai.ml.identity import AzureMLOnBehalfOfCredential project_ws_sub_id = os.environ["AZUREML_ARM_SUBSCRIPTION"] project_ws_rg = os.environ["AZUREML_ARM_RESOURCEGROUP"] project_ws_name = os.environ["AZUREML_ARM_WORKSPACE_NAME"] # connect to the project workspace ws_client = MLClient( AzureMLOnBehalfOfCredential(), project_ws_sub_id, project_ws_rg, project_ws_name )
Inizializzare le variabili dell'archivio delle funzionalità.
Per riflettere ciò che è stato creato nella prima esercitazione, assicurarsi di aggiornare il
featurestore_name
valore.from azure.ai.ml import MLClient from azure.ai.ml.identity import AzureMLOnBehalfOfCredential # feature store featurestore_name = ( "<FEATURESTORE_NAME>" # use the same name from part #1 of the tutorial ) featurestore_subscription_id = os.environ["AZUREML_ARM_SUBSCRIPTION"] featurestore_resource_group_name = os.environ["AZUREML_ARM_RESOURCEGROUP"] # feature store ml client fs_client = MLClient( AzureMLOnBehalfOfCredential(), featurestore_subscription_id, featurestore_resource_group_name, featurestore_name, )
Inizializzare il client SDK dell'archivio delle funzionalità.
# feature store client from azureml.featurestore import FeatureStoreClient from azure.ai.ml.identity import AzureMLOnBehalfOfCredential featurestore = FeatureStoreClient( credential=AzureMLOnBehalfOfCredential(), subscription_id=featurestore_subscription_id, resource_group_name=featurestore_resource_group_name, name=featurestore_name, )
Abilitare la materializzazione ricorrente nel set di funzionalità transazioni
Nella seconda esercitazione è stata abilitata la materializzazione ed è stato eseguito il back-fill nel set di funzionalità di transactions
. Il back-fill è un'operazione su richiesta, una tantum, che calcola e inserisce i valori delle caratteristiche nell'archivio di materializzazione.
Per gestire l'inferenza del modello nell'ambiente di produzione, è possibile configurare i processi di materializzazione ricorrenti per mantenere aggiornato l'archivio di materializzazione. Questi processi vengono eseguiti in base alle pianificazioni definite dall'utente. La pianificazione del lavoro ricorrente funziona in questo modo:
I valori di intervallo e frequenza definiscono una finestra. Ad esempio, i valori seguenti definiscono una finestra di tre ore:
interval
=3
frequency
=Hour
La prima finestra inizia dal valore
start_time
definito inRecurrenceTrigger
e così via.Il primo processo ricorrente viene inviato all'inizio della finestra successiva dopo l'ora di aggiornamento.
I processi ricorrenti successivi vengono inviati in ogni finestra dopo il primo processo.
Come illustrato nelle esercitazioni precedenti, dopo la materializzazione dei dati (back-fill o materializzazione ricorrente), il recupero delle funzionalità usa i dati materializzati per impostazione predefinita.
from datetime import datetime
from azure.ai.ml.entities import RecurrenceTrigger
transactions_fset_config = fs_client.feature_sets.get(name="transactions", version="1")
# create a schedule that runs the materialization job every 3 hours
transactions_fset_config.materialization_settings.schedule = RecurrenceTrigger(
interval=3, frequency="Hour", start_time=datetime(2023, 4, 15, 0, 4, 10, 0)
)
fs_poller = fs_client.feature_sets.begin_create_or_update(transactions_fset_config)
print(fs_poller.result())
(Facoltativo) Salvare il file YAML per l'asset del set di funzionalità
Usare le impostazioni aggiornate per salvare il file YAML.
## uncomment and run
# transactions_fset_config.dump(root_dir + "/featurestore/featuresets/transactions/featureset_asset_offline_enabled_with_schedule.yaml")
Eseguire la pipeline di inferenza batch
L'inferenza batch prevede questi passaggi:
Si usa lo stesso componente di recupero delle funzionalità predefinito per il recupero delle funzionalità usato nella pipeline di training (illustrato nella terza esercitazione). Per il training della pipeline, è stata fornita una specifica di recupero delle funzionalità come input del componente. Per l'inferenza batch, passare il modello registrato come input. Il componente cerca la specifica di recupero delle funzionalità nell’artefatto del modello.
Inoltre, per il training, i dati di osservazione avevano la variabile di destinazione. Tuttavia, i dati di osservazione dell'inferenza batch non hanno la variabile di destinazione. Il passaggio di recupero delle funzionalità unisce i dati di osservazione con le funzionalità e restituisce i dati per l'inferenza batch.
La pipeline usa i dati di input di inferenza batch del passaggio precedente, esegue l'inferenza nel modello e aggiunge il valore stimato come output.
Nota
In questo esempio si usa un processo per l'inferenza batch. È anche possibile usare endpoint batch in Azure Machine Learning.
from azure.ai.ml import load_job # will be used later # set the batch inference pipeline path batch_inference_pipeline_path = ( root_dir + "/project/fraud_model/pipelines/batch_inference_pipeline.yaml" ) batch_inference_pipeline_definition = load_job(source=batch_inference_pipeline_path) # run the training pipeline batch_inference_pipeline_job = ws_client.jobs.create_or_update( batch_inference_pipeline_definition ) # stream the run logs ws_client.jobs.stream(batch_inference_pipeline_job.name)
Esaminare i dati di output per l'inferenza batch
Nella visualizzazione pipeline:
Selezionare
inference_step
nella schedaoutputs
.Copiare il valore del campo
Data
. Il risultato sarà simile a:azureml_995abbc2-3171-461e-8214-c3c5d17ede83_output_data_data_with_prediction:1
.Incollare il valore del campo
Data
nella cella seguente, separando i valori di nome e versione. L'ultimo carattere è la versione, preceduta da due punti (:
).Si noti la colonna
predict_is_fraud
generata dalla pipeline di inferenza batch.Nell'output della pipeline di inferenza batch (/project/fraud_mode/pipelines/batch_inference_pipeline.yaml) il sistema ha creato un asset di dati non registrato con un GUID come valore del nome e
1
come valore della versione. Questo problema si è verificato perché non sono stati specificatiname
valori oversion
peroutputs
diinference_step
. In questa cella si ricava e si visualizza il percorso dei dati dell'asset.inf_data_output = ws_client.data.get( name="azureml_1c106662-aa5e-4354-b5f9-57c1b0fdb3a7_output_data_data_with_prediction", version="1", ) inf_output_df = spark.read.parquet(inf_data_output.path + "data/*.parquet") display(inf_output_df.head(5))
Eseguire la pulizia
La quinta esercitazione della serie descrive come eliminare le risorse.
Passaggi successivi
- Informazioni sui concetti relativi all'archivio delle funzionalità e sulle entità di primo livello nell'archivio delle funzionalità gestite.
- Vedere informazioni sull'identità e sul controllo di accesso per l'archivio delle funzionalità gestite.
- Visualizzare la guida alla risoluzione dei problemi per l'archivio delle funzionalità gestite.
- Visualizzare il riferimento YAML.