Configurare e inviare processi di training
SI APPLICA A:Python SDK azureml v1
Questo articolo illustra come configurare e inviare processi di Azure Machine Learning per eseguire il training dei modelli. I frammenti di codice illustrano le parti chiave della configurazione e l'invio di uno script di training. Usare quindi uno dei notebook di esempio per trovare gli esempi di lavoro end-to-end completi.
Quando si esegue il training, è comune avviare nel computer locale e quindi aumentare il numero di istanze in un cluster basato sul cloud. Con Azure Machine Learning è possibile eseguire lo script in varie destinazioni di calcolo senza dover modificare lo script di training.
È sufficiente definire l'ambiente per ogni destinazione di calcolo all'interno di una configurazione del processo di script. Quindi, quando si vuole eseguire l'esperimento di training in una destinazione di calcolo diversa, specificare la configurazione del processo per tale calcolo.
Prerequisiti
- Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare. Provare subito la versione gratuita o a pagamento di Azure Machine Learning
- Azure Machine Learning SDK per Python (>= 1.13.0)
- Un'area di lavoro di Azure Machine Learning,
ws
- Una destinazione di calcolo,
my_compute_target
. Creare una destinazione di calcolo
Che cos'è una configurazione di esecuzione dello script?
ScriptRunConfig viene usato per configurare le informazioni necessarie per l'invio di un processo di training come parte di un esperimento.
Si invia l'esperimento di training con un oggetto ScriptRunConfig. Questo oggetto include:
- source_directory: la directory di origine che contiene lo script di training
- script: script di training da eseguire
- compute_target: destinazione di calcolo su cui eseguire
- environment: ambiente da usare durante l'esecuzione dello script
- e alcune opzioni configurabili aggiuntive (vedere la documentazione di riferimento per altre informazioni)
Eseguire training del modello
Il modello di codice per inviare un processo di training è lo stesso per tutti i tipi di destinazioni di calcolo:
- Creare un esperimento da eseguire
- Creare un ambiente in cui verrà eseguito lo script
- Creare uno ScriptRunConfig, che specifica la destinazione di calcolo e l'ambiente
- Inviare il processo
- Attendere il completamento del processo
In alternativa, è possibile:
- Inviare un'esecuzione di HyperDrive per l'ottimizzazione degli iperparametri.
- Inviare un esperimento tramite l'estensione di VS Code.
Creare un esperimento
Creare un esperimento nell'area di lavoro. Un esperimento è un contenitore leggero che consente di organizzare gli invii di processi e tenere traccia del codice.
from azureml.core import Experiment
experiment_name = 'my_experiment'
experiment = Experiment(workspace=ws, name=experiment_name)
Selezionare una destinazione di calcolo
Selezionare la destinazione di calcolo in cui verrà eseguito lo script di training. Se non viene specificata alcuna destinazione di calcolo in ScriptRunConfig o se compute_target='local'
, Azure Machine Learning eseguirà lo script in locale.
Il codice di esempio in questo articolo presuppone che sia già stata creata una destinazione my_compute_target
di calcolo dalla sezione "Prerequisiti".
Nota
Azure Databricks non è supportato come destinazione di calcolo per il training del modello. È possibile usare Azure Databricks per le attività di preparazione e distribuzione dei dati.
Nota
Per creare e collegare una destinazione di calcolo per il training nel cluster Kubernetes abilitato per Azure Arc, vedere Configurare Machine Learning abilitato per Azure Arc
Creare un ambiente
Gli ambienti di Azure Machine Learning sono un incapsulamento dell'ambiente in cui viene eseguito il training di Machine Learning. Specificano i pacchetti Python, l'immagine Docker, le variabili di ambiente e le impostazioni software per gli script di training e assegnazione dei punteggi. Specificano anche i runtime (Python, Spark o Docker).
È possibile definire un ambiente personalizzato o usare un ambiente curato di Azure Machine Learning. Gli ambienti curati sono ambienti predefiniti disponibili nell'area di lavoro per impostazione predefinita. Questi ambienti sono supportati da immagini Docker memorizzate nella cache che riducono il costo di preparazione del processo. Per l'elenco completo degli ambienti curati disponibili, vedere Ambienti curati di Azure Machine Learning .
Per una destinazione di calcolo remota, è possibile usare uno di questi ambienti curati più diffusi per iniziare con:
from azureml.core import Workspace, Environment
ws = Workspace.from_config()
myenv = Environment.get(workspace=ws, name="AzureML-Minimal")
Per altre informazioni e dettagli sugli ambienti, vedere Creare & ambienti software in Azure Machine Learning.
Destinazione di calcolo locale
Se la destinazione di calcolo è il computer locale, è necessario assicurarsi che tutti i pacchetti necessari siano disponibili nell'ambiente Python in cui viene eseguito lo script. Usare python.user_managed_dependencies
per usare l'ambiente Python corrente (o Python nel percorso specificato).
from azureml.core import Environment
myenv = Environment("user-managed-env")
myenv.python.user_managed_dependencies = True
# You can choose a specific Python environment by pointing to a Python path
# myenv.python.interpreter_path = '/home/johndoe/miniconda3/envs/myenv/bin/python'
Creare la configurazione del processo di script
Ora che si dispone di una destinazione di calcolo (my_compute_target
vedere Prerequisiti e ambiente (myenv
vedere Creare un ambiente), creare una configurazione del processo script che esegue lo script di training (train.py
) disponibile nella project_folder
directory:
from azureml.core import ScriptRunConfig
src = ScriptRunConfig(source_directory=project_folder,
script='train.py',
compute_target=my_compute_target,
environment=myenv)
# Set compute target
# Skip this if you are running on your local computer
script_run_config.run_config.target = my_compute_target
Se non si specifica un ambiente, verrà creato automaticamente un ambiente predefinito.
Se sono presenti argomenti della riga di comando da passare allo script di training, è possibile specificarli tramite il arguments
parametro del costruttore ScriptRunConfig, ad esempio arguments=['--arg1', arg1_val, '--arg2', arg2_val]
.
Se si vuole eseguire l'override del tempo massimo predefinito consentito per il processo, è possibile farlo tramite il max_run_duration_seconds
parametro . Il sistema tenterà di annullare automaticamente il processo se richiede più tempo di questo valore.
Specificare una configurazione del processo distribuito
Se si vuole eseguire un processo di training distribuito , specificare la configurazione specifica del processo distribuita al distributed_job_config
parametro . I tipi di configurazione supportati includono MpiConfiguration, TensorflowConfiguration e PyTorchConfiguration.
Per altre informazioni ed esempi sull'esecuzione di processi Horovod, TensorFlow e PyTorch distribuiti, vedere:
Inviare l'esperimento
run = experiment.submit(config=src)
run.wait_for_completion(show_output=True)
Importante
Quando si invia il processo di training, viene creato e inviato uno snapshot della directory contenente gli script di training. Lo snapshot viene inoltre archiviato come parte dell'esperimento nell'area di lavoro. Se si modificano i file e si invia di nuovo il processo, verranno caricati solo i file modificati.
Per evitare che i file non necessari vengano inclusi nello snapshot, impostare un file ignorato (.gitignore
o .amlignore
) nella directory . Aggiungere i file e le directory da escludere. Per altre informazioni sulla sintassi da usare all'interno di questo file, vedere sintassi e modelli per .gitignore
. Il .amlignore
file usa la stessa sintassi. Se esistono entrambi i file, il .amlignore
file viene usato e il .gitignore
file non è usato.
Per altre informazioni sugli snapshot, vedere Snapshot.
Importante
Cartelle speciali Due cartelle outputs e logs, hanno un trattamento speciale in Azure Machine Learning. Durante il training, quando si scrivono file in cartelle denominate output e log relativi rispettivamente alla directory radice (./outputs
e ./logs
), i file verranno caricati automaticamente nella cronologia dei processi in modo che sia possibile accedervi al termine del processo.
Per creare artefatti creati durante il training (ad esempio file modello, checkpoint, file di dati o immagini tracciate), scriverli nella cartella ./outputs
.
Analogamente, è possibile scrivere tutti i log dal processo di training nella ./logs
cartella . Per usare l'integrazione TensorBoard di Azure Machine Learning, assicurarsi di scrivere i log di TensorBoard in questa cartella. Mentre il processo è in corso, sarà possibile avviare TensorBoard ed eseguire lo streaming di questi log. Successivamente, sarà anche possibile ripristinare i log da uno dei processi precedenti.
Ad esempio, per scaricare un file scritto nella cartella outputs nel computer locale dopo il processo di training remoto: run.download_file(name='outputs/my_output_file', output_file_path='my_destination_path')
Rilevamento e integrazione di Git
Quando si avvia un processo di training in cui la directory di origine è un repository Git locale, le informazioni sul repository vengono archiviate nella cronologia dei processi. Per altre informazioni, vedere Integrazione di Git con Azure Machine Learning.
Esempi di notebook
Per esempi di configurazione dei processi per diversi scenari di training, vedere questi notebook:
- Training su varie destinazioni di calcolo
- Training con framework di Machine Learning
- tutorials/img-classification-part1-training.ipynb
Per informazioni su come eseguire i notebook, vedere l'articolo Esplorare Azure Machine Learning con notebook Jupyter.
Risoluzione dei problemi
AttributeError: l'oggetto 'RoundTripLoader' non ha alcun attributo 'comment_handling': questo errore deriva dalla nuova versione (v0.17.5) di
ruamel-yaml
, unaazureml-core
dipendenza, che introduce una modifica che causa un'interruzione inazureml-core
. Per correggere questo errore, disinstallareruamel-yaml
eseguendopip uninstall ruamel-yaml
e installando una versione diversa diruamel-yaml
. Le versioni supportate sono da v0.15.35 a v0.17.4 (incluse). A tale scopo, eseguirepip install "ruamel-yaml>=0.15.35,<0.17.5"
.Il processo ha esito negativo con
jwt.exceptions.DecodeError
: messaggio di errore esatto:jwt.exceptions.DecodeError: It is required that you pass in a value for the "algorithms" argument when calling decode()
.Prendere in considerazione l'aggiornamento alla versione più recente di azureml-core:
pip install -U azureml-core
.Se si verifica questo problema per i processi locali, controllare la versione di PyJWT installata nell'ambiente in cui si avviano i processi. Le versioni supportate di PyJWT sono < 2.0.0. Disinstallare PyJWT dall'ambiente se la versione è >= 2.0.0. È possibile controllare la versione di PyJWT, disinstallare e installare la versione corretta come indicato sotto:
- Avviare una shell dei comandi, attivare l'ambiente conda in cui è installato azureml-core.
- Immettere
pip freeze
e cercarePyJWT
, se trovato, la versione elencata deve essere < 2.0.0 - Se la versione elencata non è supportata,
pip uninstall PyJWT
nella shell dei comandi immettere y per confermare. - Installare usando
pip install 'PyJWT<2.0.0'
Se si invia un ambiente creato dall'utente con il processo, è consigliabile usare la versione più recente di azureml-core in tale ambiente. Versioni >= 1.18.0 di azureml-core già pin PyJWT < 2.0.0. Se è necessario usare una versione di azureml-core < 1.18.0 nell'ambiente inviato, assicurarsi di specificare PyJWT < 2.0.0 nelle dipendenze pip.
ModuleErrors (nessun modulo denominato): se si esegue ModuleErrors durante l'invio di esperimenti in Azure Machine Learning, lo script di training prevede l'installazione di un pacchetto ma non viene aggiunto. Dopo aver specificato il nome del pacchetto, Azure Machine Learning installa il pacchetto nell'ambiente usato per il processo di training.
Se si usano estimatori per inviare esperimenti, è possibile specificare un nome di pacchetto tramite
pip_packages
oconda_packages
parametro nello strumento di stima in base all'origine in cui si vuole installare il pacchetto. È anche possibile specificare un file yml con tutte le dipendenze usandoconda_dependencies_file
o elencare tutti i requisiti pip in un file txt usando ilpip_requirements_file
parametro . Se si dispone di un oggetto Azure Machine Learning Environment che si vuole eseguire l'override dell'immagine predefinita usata dallo strumento di stima, è possibile specificare tale ambiente tramite ilenvironment
parametro del costruttore di stima.Le immagini Docker gestite da Azure Machine Learning e i relativi contenuti possono essere visualizzati nei contenitori di Azure Machine Learning. Le dipendenze specifiche del framework sono elencate nella documentazione del framework corrispondente:
Nota
Se si ritiene che un pacchetto specifico sia abbastanza comune da essere aggiunto in Immagini e ambienti gestiti da Azure Machine Learning, generare un problema di GitHub nei contenitori di Azure Machine Learning.
NameError (nome non definito), AttributeError (Object non ha attributo): questa eccezione deve provenire dagli script di training. È possibile esaminare i file di log da portale di Azure per ottenere altre informazioni sul nome specifico non definito o sull'errore dell'attributo. Dall'SDK è possibile usare
run.get_details()
per esaminare il messaggio di errore. Verranno elencati anche tutti i file di log generati per il processo. Assicurarsi di esaminare lo script di training e correggere l'errore prima di inviare di nuovo il processo.Eliminazione del processo o dell'esperimento: gli esperimenti possono essere archiviati usando il metodo Experiment.archive o dalla visualizzazione della scheda Esperimento in studio di Azure Machine Learning client tramite il pulsante "Esperimento archivio". Questa azione nasconde l'esperimento dalle query e dalle visualizzazioni dell'elenco, ma non la elimina.
L'eliminazione permanente di singoli esperimenti o processi non è attualmente supportata. Per altre informazioni sull'eliminazione degli asset dell'area di lavoro, vedere Esportare o eliminare i dati dell'area di lavoro del servizio Machine Learning.
Documento metrica troppo grande: Azure Machine Learning ha limiti interni per le dimensioni degli oggetti metrica che possono essere registrati contemporaneamente da un processo di training. Se si verifica un errore "Documento metrica troppo grande" durante la registrazione di una metrica con valori di elenco, provare a suddividere l'elenco in blocchi più piccoli, ad esempio:
run.log_list("my metric name", my_metric[:N]) run.log_list("my metric name", my_metric[N:])
Internamente, Azure Machine Learning concatena i blocchi con lo stesso nome di metrica in un elenco contiguo.
L'avvio della destinazione di calcolo richiede molto tempo: le immagini Docker per le destinazioni di calcolo vengono caricate da Registro Azure Container (Registro Azure Container). Per impostazione predefinita, Azure Machine Learning crea un Registro Azure Container che usa il livello di servizio di base . La modifica di ACR per l'area di lavoro al livello Standard o Premium può ridurre il tempo necessario per compilare e caricare le immagini. Per altre informazioni, vedere Livelli di servizio di Registro Azure Container.
Passaggi successivi
- Esercitazione: Eseguire il training e distribuire un modello usa una destinazione di calcolo gestita per eseguire il training di un modello.
- Informazioni su come eseguire il training di modelli con framework di Machine Learning specifici, ad esempio Scikit-learn, TensorFlow e PyTorch.
- Consultare le informazioni su come ottimizzare in modo efficiente gli iperparametri per creare modelli migliori.
- Dopo aver creato un modello con training, consultare le informazioni su come e dove distribuire i modelli.
- Visualizzare le informazioni di riferimento sull'SDK della classe ScriptRunConfig .
- Usare Azure Machine Learning con le reti virtuali di Azure