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

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:

  1. Creare un esperimento da eseguire
  2. Creare un ambiente nel quale sarà eseguito lo script
  3. Creare un oggetto ScriptRunConfig che specifichi la destinazione di calcolo e l'ambiente
  4. Inviare il processo
  5. Attendere il completamento del processo

In alternativa, è possibile:

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 del 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 il 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 (myenvvedere 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:

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 dipendenza azureml-core, che introduce una modifica che causa un'interruzione di azureml-core. Per correggere l'errore, disinstallare ruamel-yaml eseguendo pip uninstall ruamel-yaml e installando una versione differente di ruamel-yaml. Versioni supportate, da v0.15.35 a v0.17.4 (incluse). A tale scopo, eseguire pip 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:

    1. Avviare una shell dei comandi e attivare l'ambiente Conda in cui è installato azureml-core.
    2. Immettere pip freeze e cercare PyJWT, se presente; la versione elencata deve essere < 2.0.0
    3. Se la versione elencata non è supportata, eseguire pip uninstall PyJWT nella shell dei comandi e immettere y per la conferma.
    4. 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 o conda_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 usando conda_dependencies_file oppure elencare tutti i requisiti pip in un file .txt utilizzando il parametro pip_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 parametro environment 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