Configurare e inviare processi di training
Si applica a: Python SDK azureml v1
Nel presente articolo si descrive 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. Quindi, usare uno dei notebook di esempio per trovare gli esempi di lavoro end-to-end completi.
Quando si esegue il training, è pratica comune iniziare sul proprio computer locale e aumentare il numero di istanze in un secondo momento in un cluster basato sul cloud. Con Azure Machine Learning è possibile eseguire lo script di training in diverse destinazioni di calcolo senza doverlo modificare.
È sufficiente definire l'ambiente per ogni destinazione di calcolo in una configurazione del processo di script. Successivamente, quando si desidera eseguire l'esperimento di training in una destinazione di calcolo diversa, specificare la configurazione del processo per tale ambiente di calcolo.
Prerequisiti
- 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 oggi stesso
- Azure Machine Learning SDK per Python (v1) (>= 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 script?
Un oggetto ScriptRunConfig viene usato per configurare le informazioni necessarie per l'invio di un processo di training come parte di un esperimento.
L'esperimento di training viene inviato con un oggetto ScriptRunConfig. Questo oggetto include:
- source_directory: la directory di origine contenente lo script di training
- script: lo script di training da eseguire
- compute_target: la destinazione di calcolo da eseguire
- ambiente: l'ambiente da utilizzare durante l'esecuzione dello script
- e altre opzioni configurabili (vedere la documentazione di riferimento per maggiori informazioni)
Eseguire il training del modello
Il criterio di codice per inviare un processo di training è il medesimo per tutti i tipi di destinazioni di calcolo:
- Creare un esperimento da eseguire
- Creare un ambiente nel quale sarà eseguito lo script
- Creare un oggetto ScriptRunConfig che specifichi 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.
Si applica a: Python SDK azureml v1
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 nella quale eseguire lo script di training. Se non viene specificata alcuna destinazione di calcolo in ScriptRunConfig, oppure se compute_target='local'
, Azure Machine Learning eseguirà lo script in locale.
Il codice di esempio riportato in questo articolo presuppone che sia stata già creata una destinazione di calcolomy_compute_target
dalla sezione "Prerequisiti".
Nota
- Azure Databricks non è supportato come destinazione di calcolo per il training modello. È possibile usare Azure Databricks per le attività di preparazione e distribuzione dei dati.
- Per creare e rendere visibile una destinazione di calcolo per il training nel cluster Kubernetes abilitato per Azure Arc, vedere Configurare Machine Learning abilitato per Azure Arc
Crea un ambiente
Gli ambienti di Azure Machine Learning sono un incapsulamento dell'ambiente in cui avviene l'attività di training di apprendimento automatico. Essi specificano i pacchetti Python, l'immagine Docker, le variabili di ambiente e le impostazioni software per gli script di training e assegnazione punteggi. Inoltre, specificano i runtime (Python, Spark o Docker).
È possibile definire un ambiente personalizzato o usare un ambiente curato da 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 consentono di ridurre i costi di preparazione del processo. Vedere Ambienti curati da Azure Machine Learning, per conoscere l'elenco completo degli ambienti curati disponibili.
Per una destinazione di calcolo remota, è possibile usare uno tra questi ambienti curati più diffusi, per iniziare:
Si applica a: Python SDK azureml v1
from azureml.core import Workspace, Environment
ws = Workspace.from_config()
myenv = Environment.get(workspace=ws, name="AzureML-Minimal")
Per maggiori informazioni e dettagli sugli ambienti, vedere Creare e usare gli ambienti software in Azure Machine Learning.
Destinazione di calcolo locale
Se la destinazione di calcolo è il computer locale, l’utente deve assicurarsi che tutti i pacchetti necessari siano disponibili nell'ambiente Python in cui viene eseguito lo script. Usare python.user_managed_dependencies
per utilizzare l'ambiente Python corrente (o Python nel percorso specificato).
Si applica a: Python SDK azureml v1
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 script
Ora che si dispone di una destinazione di calcolo (my_compute_target
, vedere Prerequisiti e un ambiente (myenv
vedere Creare un ambiente), creare una configurazione del processo script che esegue lo script di training (train.py
) situato nella project_folder
directory:
Si applica a: Python SDK azureml v1
from azureml.core import ScriptRunConfig
src = ScriptRunConfig(source_directory=project_folder,
script='train.py',
compute_target=my_compute_target,
environment=myenv)
Se non si specifica un ambiente, sarà creato automaticamente un ambiente predefinito.
Se si hanno argomenti della riga di comando che si desidera trasmettere allo script di training, è possibile specificarli tramite il parametro arguments
del costruttore ScriptRunConfig, ad esempio, arguments=['--arg1', arg1_val, '--arg2', arg2_val]
.
Se si desidera eseguire l'override del tempo massimo predefinito, consentito per il processo, è possibile farlo tramite il parametro max_run_duration_seconds
. Il sistema tenterà di annullare automaticamente il processo se esso richiede più tempo rispetto al valore indicato.
Specificare una configurazione del processo distribuito
Per eseguire un processo di training distribuito, fornire al parametro distributed_job_config
la configurazione specifica del processo distribuito. Tra i tipi di configurazione supportati vi sono: MpiConfiguration, TensorflowConfiguration e PyTorchConfiguration.
Per ulteriori informazioni ed esempi sull'esecuzione di processi Horovod, TensorFlow e PyTorch distribuiti, vedere:
Inviare l'esperimento
SI APPLICA A: Python SDK azureml v1
run = experiment.submit(config=src)
run.wait_for_completion(show_output=True)
Importante
Quando si invia il processo di training, viene creato uno snapshot della directory contenente gli script di training, che viene poi inviato alla destinazione di calcolo. Lo snapshot viene inoltre archiviato come parte dell'esperimento nell'area di lavoro. Se si modificano i file e si invia nuovamente il processo, verranno caricati soltanto i file modificati.
Per impedire che nello snapshot vengano inclusi file non necessari, creare un file ignore (.gitignore
o .amlignore
) nella directory. Aggiungere i file e le directory da escludere. Per altre informazioni sulla sintassi da utilizzare in questo file, vedere sintassi e criteri per .gitignore
. Il file .amlignore
utilizza la stessa sintassi. Se sono presenti entrambi i file, viene usato il file .amlignore
, mentre il file .gitignore
resta inutilizzato.
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, se si scrivono file in cartelle denominate outputs e logs relative alla directory radice (./outputs
e ./logs
, rispettivamente), i file vengono caricati automaticamente nella cronologia processo per potervi accedere quando il processo è stato completato.
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 qualsiasi log del processo di training nella cartella ./logs
. Per usare l'integrazione TensorBoard di Azure Machine Learning, assicurarsi di scrivere i log di TensorBoard in questa cartella. Quando il processo è in esecuzione, sarà possibile avviare TensorBoard e trasmettere questi log. In seguito, sarà anche possibile ripristinare i log di uno qualsiasi dei processi precedenti.
Ad esempio, per scaricare un file scritto nella cartella outputs al proprio 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 processo. Per altre informazioni, vedere Integrazione di Git con Azure Machine Learning.
Esempi di notebook
Vedere questi notebook per trovare degli esempi di configurazione dei processi per diversi scenari di training:
- Eseguire il training in diverse destinazioni di calcolo
- Training con framework per 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
, una dipendenzaazureml-core
, che introduce una modifica che causa un'interruzione diazureml-core
. Per correggere l'errore, disinstallareruamel-yaml
eseguendopip uninstall ruamel-yaml
e installando una versione differente diruamel-yaml
. Versioni supportate, da v0.15.35 a v0.17.4 (incluse). A tale scopo, eseguirepip install "ruamel-yaml>=0.15.35,<0.17.5"
.Processo non riuscito 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
.If. Se si verifica questo problema per i processi locali, controllare la versione di PyJWT installata nell'ambiente in cui si stanno avviando 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 e attivare l'ambiente Conda in cui è installato azureml-core.
- Immettere
pip freeze
e cercarePyJWT
, se presente; la versione elencata deve essere < 2.0.0 - Se la versione elencata non è supportata, eseguire
pip uninstall PyJWT
nella shell dei comandi e immettere y per la conferma. - Installare usando
pip install 'PyJWT<2.0.0'
If. Se si invia un ambiente creato dall'utente con il processo, prendere in considerazione l'aggiornamento alla versione più recente di azureml-core in tale ambiente. Le versioni >= 1.18.0 di azureml-core hanno già aggiunto 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. Se si rileva ModuleErrors durante l'invio di esperimenti in Azure Machine Learning, lo script di training prevede l'installazione di un pacchetto, tuttavia non viene aggiunto. Dopo aver specificato il nome del pacchetto, Azure Machine Learning installa il pacchetto nell'ambiente utilizzato per il processo di training.
If. Se si usano Strumenti di stima per inviare esperimenti, è possibile specificare un nome pacchetto tramite il parametro
pip_packages
oconda_packages
nello strumento di stima basato sull'origine dalla quale si vuole installare il pacchetto. È anche possibile specificare un file yml con tutte le dipendenze usandoconda_dependencies_file
oppure elencare tutti i requisiti pip in un file .txt utilizzando il parametropip_requirements_file
. Se si dispone di un oggetto di ambiente Azure ML personalizzato per il quale si vuole eseguire l'override dell'immagine predefinita utilizzata dallo strumento di stima, è possibile specificare tale ambiente tramite il parametroenvironment
del costruttore dello strumento di stima.Le immagini Docker gestite da Azure Machine Learning e il relativo contenuto possono essere visualizzate nei contenitori Azure Machine Learning. Le dipendenze specifiche del framework sono elencate nella rispettiva documentazione del framework:
Nota
Se si ritiene che un determinato pacchetto sia abbastanza comune da essere aggiunto nelle immagini e negli ambienti gestiti da Azure Machine Learning, generare un problema di GitHub nei Contenitori Azure Machine Learning.
NameError (nome non definito), AttributeError (Oggetto senza attributo): questa eccezione deve provenire dagli script di training. È possibile esaminare i file di log nel portale di Azure per ottenere maggiori informazioni sul nome specifico non definito o sull'errore attributo. Dall'SDK, è possibile usare
run.get_details()
per visualizzare il messaggio di errore. Saranno inoltre elencati tutti i file di log generati per il processo. Assicurarsi di esaminare lo script di training e di correggere l'errore prima di inviare nuovamente il processo.Eliminazione di processi o esperimenti: gli esperimenti possono essere archiviati con il metodo Experiment.archive, oppure dalla vista della scheda Esperimento nel client studio di Azure Machine Learning con il pulsante "Archivia esperimento". Tale operazione nasconde l'esperimento dall'elenco di query e viste, ma non lo elimina.
L'eliminazione permanente di un singolo esperimento o processo non è attualmente supportata. Per altre informazioni sull'eliminazione delle risorse dell'area di lavoro, vedere Esportare o eliminare i dati dell'area di lavoro del servizio Machine Learning.
Dimensioni eccessive della documentazione della metrica: Azure Machine Learning presenta limiti interni relativamente alle dimensioni degli oggetti della metrica che si possono registrare 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 ML 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 (ACR). Per impostazione predefinita, Azure Machine Learning crea un ACR 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 di un modello e distribuirlo usa una destinazione di calcolo gestita per il training di un modello.
- Vedere come eseguire il training di modelli con framework di Machine Learning specifici, ad esempio Scikit-learn, TensorFlowe 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 il riferimento SDK ScriptRunConfig class.
- Usare Azure Machine Learning con le reti virtuali di Azure