Avviare, monitorare e tenere traccia della cronologia di esecuzione
SI APPLICA A: Python SDK azureml v1
SI APPLICA A: Estensione ML dell’interfaccia della riga di comando di Azure v1
In Azure Machine Learning SDK per Python v1 e l'interfaccia della riga di comando di Machine Learning sono disponibili vari metodi per monitorare, organizzare e tenere traccia delle esecuzioni per il training e la sperimentazione. La cronologia di esecuzione di ML è una parte importante di un processo di sviluppo di ML spiegabile e ripetibile.
Suggerimento
Per informazioni sull'uso di Studio, vedere Tenere traccia, monitorare e analizzare le esecuzioni con Studio.
Se si usa Azure Machine Learning SDK v2, vedere gli articoli seguenti:
Questo articolo illustra come eseguire le attività seguenti:
- Monitorare le prestazioni di esecuzione.
- Contrassegnare e trovare le esecuzioni.
- Eseguire ricerche nella cronologia di esecuzione.
- Annullare le esecuzioni o contrassegnarle come non riuscite.
- Creare esecuzioni figlio.
- Monitorare lo stato dell'esecuzione tramite notifiche e-mail.
Suggerimento
Per informazioni sul monitoraggio del servizio Azure Machine Learning e dei servizi di Azure associati, vedere Come monitorare Azure Machine Learning. Per informazioni sui modelli di monitoraggio distribuiti come servizi Web, vedere Raccogliere i dati del modello e Monitorare con Application Insights.
Prerequisiti
È necessario avere quanto segue:
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.
Un'area di lavoro di Azure Machine Learning.
Azure Machine Learning SDK per Python (versione 1.0.21 o successiva). Per installare o aggiornare la versione più recente dell'SDK, vedere Installare o aggiornare l'SDK.
Per controllare la versione di Azure Machine Learning SDK, usare il codice seguente:
print(azureml.core.VERSION)
Interfaccia della riga di comando di Azure ed estensione dell’interfaccia della riga di comando di Azure Machine Learning.
Importante
Alcuni comandi dell'interfaccia della riga di comando (CLI) di Azure in questo articolo usano l'estensione
azure-cli-ml
, o v1, per Azure Machine Learning. L'assistenza per l'estensione v1 terminerà il 30 settembre 2025. Sarà possibile installare e usare l'estensione v1 fino a tale data.Consigliamo di passare all'estensione
ml
, o v2, prima del 30 settembre 2025. Per ulteriori informazioni sull'estensione v2, vedere Estensione dell'interfaccia della riga di comando di Azure ML e Python SDK v2.
Monitorare le prestazioni di esecuzione
Avviare un'esecuzione e il relativo processo di registrazione
SI APPLICA A: Python SDK azureml v1
Configurare l'esperimento importando le classi Workspace, Experiment, Rune ScriptRunConfig dal pacchetto azureml.core.
import azureml.core from azureml.core import Workspace, Experiment, Run from azureml.core import ScriptRunConfig ws = Workspace.from_config() exp = Experiment(workspace=ws, name="explore-runs")
Avviare un'esecuzione e il relativo processo di registrazione con il metodo
start_logging()
.notebook_run = exp.start_logging() notebook_run.log(name="message", value="Hello from run!")
Monitorare lo stato di un'esecuzione
SI APPLICA A: Python SDK azureml v1
Recuperare lo stato di un'esecuzione con il metodo
get_status()
.print(notebook_run.get_status())
Per recuperare l'ID esecuzione, il tempo di esecuzione e altri dettagli, usare il metodo
get_details()
.print(notebook_run.get_details())
Al termine, usare il metodo
complete()
per contrassegnare l’esecuzione come completata.notebook_run.complete() print(notebook_run.get_status())
Se si usa lo schema progettuale
with...as
di Python, l'esecuzione verrà automaticamente contrassegnata come completata quando non rientra nell'ambito. Non è necessario contrassegnare manualmente l'esecuzione come completata.with exp.start_logging() as notebook_run: notebook_run.log(name="message", value="Hello from run!") print(notebook_run.get_status()) print(notebook_run.get_status())
Contrassegnare e trovare le esecuzioni
In Azure Machine Learning è possibile usare proprietà e tag per organizzare ed eseguire query sulle esecuzioni per ottenere informazioni importanti.
Aggiungere proprietà e tag
SI APPLICA A: Python SDK azureml v1
Per aggiungere alle esecuzioni metadati non disponibili per la ricerca, usare il metodo
add_properties()
. Ad esempio, il codice seguente aggiunge la proprietà"author"
all'esecuzione:local_run.add_properties({"author":"azureml-user"}) print(local_run.get_properties())
Le proprietà non sono modificabili, quindi creano un record permanente a scopo di controllo. L'esempio di codice seguente genera un errore perché nel codice precedente è già stato aggiunto
"azureml-user"
come valore della proprietà"author"
:try: local_run.add_properties({"author":"different-user"}) except Exception as e: print(e)
A differenza delle proprietà, i tag sono modificabili. Per aggiungere informazioni significative e disponibili per la ricerca per i consumer dell'esperimento, usare il metodo
tag()
.local_run.tag("quality", "great run") print(local_run.get_tags()) local_run.tag("quality", "fantastic run") print(local_run.get_tags())
È anche possibile aggiungere tag stringa semplici. Quando questi tag vengono visualizzati nel dizionario dei tag come chiavi, hanno il valore
None
.local_run.tag("worth another look") print(local_run.get_tags())
Eseguire query su proprietà e tag
È possibile eseguire query all'interno di un esperimento per restituire un elenco di esecuzioni che corrispondono a proprietà e tag specifici.
SI APPLICA A: Python SDK azureml v1
list(exp.get_runs(properties={"author":"azureml-user"},tags={"quality":"fantastic run"})) list(exp.get_runs(properties={"author":"azureml-user"},tags="worth another look"))
Annullare le esecuzioni o contrassegnarle come non riuscite
Se si rileva un errore o se l'esecuzione richiede troppo tempo, è possibile annullare l'esecuzione.
SI APPLICA A: Python SDK azureml v1
Per annullare un'esecuzione usando l'SDK, usare il metodo cancel()
:
src = ScriptRunConfig(source_directory='.', script='hello_with_delay.py')
local_run = exp.submit(src)
print(local_run.get_status())
local_run.cancel()
print(local_run.get_status())
Se l'esecuzione viene completata, ma contiene un errore (ad esempio, è stato usato lo script di training non corretto), è possibile usare il metodo fail()
per contrassegnarla come non riuscita.
local_run = exp.submit(src)
local_run.fail()
print(local_run.get_status())
Creare esecuzioni figlio
Si applica a: Python SDK azureml v1
Creare esecuzioni figlio per raggruppare le esecuzioni correlate, ad esempio per diverse iterazioni di ottimizzazione degli iperparametri.
Nota
Le esecuzioni figlio possono essere create solo usando l'SDK.
Questo esempio di codice usa lo script hello_with_children.py
per creare un batch di cinque esecuzioni figlio dall'interno di un'esecuzione inviata usando il metodo child_run()
:
!more hello_with_children.py
src = ScriptRunConfig(source_directory='.', script='hello_with_children.py')
local_run = exp.submit(src)
local_run.wait_for_completion(show_output=True)
print(local_run.get_status())
with exp.start_logging() as parent_run:
for c,count in enumerate(range(5)):
with parent_run.child_run() as child:
child.log(name="Hello from child run", value=c)
Nota
Quando non rientrano più nell'ambito, le esecuzioni figlio vengono automaticamente contrassegnate come completate.
Per creare molte esecuzioni figlio in modo efficiente, usare il metodo create_children()
. Poiché ogni creazione genera una chiamata di rete, la creazione di un batch di esecuzioni è più efficiente rispetto alla creazione di un’esecuzione alla volta.
Inviare esecuzioni figlio
Le esecuzioni figlio possono essere inviate anche da un'esecuzione padre. In questo modo è possibile creare gerarchie di esecuzioni padre e figlio. Non è possibile creare un'esecuzione figlio senza padre: anche se l'esecuzione padre non esegue alcuna operazione ma avvia l'esecuzione figlio, è comunque necessario creare una gerarchia. Gli stati di tutte le esecuzioni sono indipendenti: lo stato di un’esecuzione padre può essere "Completed"
(operazione riuscita) anche se una o più esecuzioni figlio sono state annullate o contrassegnate come non riuscite.
È possibile che l'esecuzione figlio usi una configurazione di esecuzione diversa rispetto all'esecuzione padre. Ad esempio, è possibile usare una configurazione meno potente basata sulla CPU per l'esecuzione padre, mentre si usano configurazioni basate su GPU per le esecuzioni figlio. Potrebbe essere necessario passare argomenti e dati diversi a ogni esecuzione figlio. Per personalizzare un'esecuzione figlio, creare un oggetto ScriptRunConfig
per l'esecuzione figlio.
Importante
Per inviare un'esecuzione figlio da un'esecuzione padre in un ambiente di calcolo remoto, è necessario accedere prima all'area di lavoro nel codice di esecuzione padre. Per impostazione predefinita, il contesto di ambiente di un'esecuzione remota non dispone di credenziali per l'invio di esecuzioni figlio. Usare un'entità servizio o credenziali di identità gestita per accedere. Per altre informazioni sull'autenticazione, vedere Configurare l'autenticazione.
Il codice seguente:
- Recupera una risorsa di calcolo denominata
"gpu-cluster"
dall'area di lavorows
- Esegue iterazioni in base a diversi valori di argomento da passare agli oggetti
ScriptRunConfig
figlio - Crea e invia una nuova esecuzione figlio usando la risorsa di calcolo personalizzata e l'argomento
- Si blocca fino al completamento di tutte le esecuzioni figlio
# parent.py
# This script controls the launching of child scripts
from azureml.core import Run, ScriptRunConfig
compute_target = ws.compute_targets["gpu-cluster"]
run = Run.get_context()
child_args = ['Apple', 'Banana', 'Orange']
for arg in child_args:
run.log('Status', f'Launching {arg}')
child_config = ScriptRunConfig(source_directory=".", script='child.py', arguments=['--fruit', arg], compute_target=compute_target)
# Starts the run asynchronously
run.submit_child(child_config)
# Experiment will "complete" successfully at this point.
# Instead of returning immediately, block until child runs complete
for child in run.get_children():
child.wait_for_completion()
Per creare molte esecuzioni figlio con configurazioni, argomenti e input identici, usare il metodo create_children()
. Poiché ogni creazione genera una chiamata di rete, la creazione di un batch di esecuzioni è più efficiente rispetto alla creazione di un’esecuzione alla volta.
All'interno di un'esecuzione figlio è possibile visualizzare l'ID esecuzione padre:
## In child run script
child_run = Run.get_context()
child_run.parent.id
Eseguire query su esecuzioni figlio
Per eseguire una query sulle esecuzioni figlio di un’esecuzione padre specifica, usare il metodo get_children()
.
L'argomento recursive = True
consente di eseguire una query su un albero annidato di elementi figlio e nipote.
print(parent_run.get_children())
Accedere all'esecuzione padre o radice
È possibile usare il campo Run.parent
per accedere all'esecuzione che ha avviato l'esecuzione figlio corrente. Un caso d'uso comune per l'uso del campo Run.parent
consiste nel combinare i risultati del log in un'unica posizione. Le esecuzioni figlio vengono eseguite in modo asincrono; l’ordinamento e la sincronizzazione non sono garantiti, anche se l’esecuzione padre attende il completamento delle esecuzioni figlio.
# in child (or even grandchild) run
def root_run(self : Run) -> Run :
if self.parent is None :
return self
return root_run(self.parent)
current_child_run = Run.get_context()
root_run(current_child_run).log("MyMetric", f"Data from child run {current_child_run.id}")
Monitorare lo stato dell'esecuzione tramite notifiche e-mail
Nella barra di spostamento a sinistra del portale di Azure selezionare la scheda Monitoraggio.
Selezionare Impostazioni di diagnostica e quindi + Aggiungi impostazione di diagnostica.
Nella finestra Impostazione di diagnostica,
- in Dettagli categoria selezionare AmlRunStatusChangedEvent.
- In Dettagli destinazione selezionare Invia all’area di lavoro Log Analytics e specificare un valore nei campi Sottoscrizione e Area di lavoro Log Analytics.
Nota
L'area di lavoro Log Analytics di Azure è un tipo di risorsa di Azure diverso rispetto all'area di lavoro del servizio Azure Machine Learning. Se non sono presenti opzioni in tale elenco, è possibile creare un'area di lavoro Log Analytics.
Nella scheda Log aggiungere una nuova regola di avviso.
Per informazioni, vedere come creare e gestire gli avvisi del log tramite Monitoraggio di Azure.
Notebook di esempio
I notebook seguenti illustrano i concetti descritti in questo articolo:
Per altre informazioni sulle API di registrazione, vedere il notebook sulle API di registrazione.
Per altre informazioni sulla gestione delle esecuzioni con Azure Machine Learning SDK, vedere il notebook sulla gestione delle esecuzioni.
Passaggi successivi
- Per informazioni su come registrare le metriche per gli esperimenti, vedere Registrare metriche durante le esecuzioni del training.
- Per informazioni su come monitorare risorse e log da Azure Machine Learning, vedere Monitoraggio di Azure Machine Learning.