Eseguire il training di modelli scikit-learn su larga scala con Azure Machine Learning (SDK v1)
Si applica a: Python SDK azureml v1
Questo articolo illustra come eseguire script di training scikit-learn con Azure Machine Learning.
Gli script di esempio in questo articolo vengono usati per classificare le immagini dei fiori iris e creare un modello di Machine Learning basato sul set di dati Iris di scikit-learn.
Indipendentemente dal fatto che si stia eseguendo il training di un modello di apprendimento automatico scikit-learn da zero o si stia portando un modello esistente nel cloud, è possibile usare Azure Machine Learning per aumentare il numero di processi di training open source usando risorse di calcolo cloud elastiche. Con Azure Machine Learning è possibile compilare e distribuire la versione e monitorare i modelli negli ambienti di produzione.
Prerequisiti
È possibile eseguire questo codice in un'istanza di ambiente di calcolo di Azure Machine Learning o nel proprio Jupyter Notebook:
Istanza di calcolo di Azure Machine Learning
- Completare Avvio rapido: Iniziare a usare il servizio Azure Machine Learning per creare un'istanza di ambiente di calcolo. Ogni istanza di ambiente di calcolo include un server di notebook dedicato, precaricato con l'SDK, e il repository dei notebook di esempio.
- Selezionare la scheda Notebook nello studio di Azure Machine Learning. Nella cartella di training degli esempi è possibile accedere a un notebook completato ed espanso passando a questa directory: cartella how-to-use-azureml > ml-frameworks > scikit-learn > train-hyperparameter-tune-deploy-with-sklearn.
- Per completare questa esercitazione, è possibile usare il codice precompilato presente nella cartella di training degli esempi.
Creare un server Jupyter Notebook ed eseguire il codice nelle sezioni seguenti.
Configurare l'esperimento
In questa sezione si configurerà l'esperimento di training caricando i pacchetti Python necessari, inizializzando un'area di lavoro, definendo l'ambiente di training e preparando lo script di training.
Inizializzare un'area di lavoro
L'area di lavoro di Azure Machine Learning è la risorsa di primo livello per il servizio. Fornisce una posizione centralizzata per lavorare con tutti gli artefatti creati. In Python SDK è possibile accedere agli artefatti dell'area di lavoro creando un oggetto workspace
.
Creare un oggetto workspace dal file config.json
creato nella sezione dei prerequisiti.
from azureml.core import Workspace
ws = Workspace.from_config()
Preparare gli script
In questa esercitazione, lo script di trainingtrain_iris.py è già disponibile. In pratica, si dovrebbe essere in grado di eseguire in Azure Machine Learning qualsiasi script di training personalizzato così com'è, senza dover modificare il codice.
Nota
- Lo script di training fornito illustra come registrare alcune metriche nell'esecuzione di Azure Machine Learning usando l'oggetto
Run
all'interno dello script. - Lo script di training fornito usa dati di esempio ottenuti dalla funzione
iris = datasets.load_iris()
. Per usare e accedere ai propri dati, vedere l'articolo su come eseguire il training con set di dati per riuscire a rendere disponibili i dati durante il training.
Definire l'ambiente
Per definire l'ambiente di Azure Machine Learning che incapsula le dipendenze dello script di training, è possibile definire un ambiente personalizzato o usare un ambiente di Azure Machine Learning curato.
Usare un ambiente curato
Se non si vuole definire un ambiente personalizzato, Azure Machine Learning offre ambienti curati predefiniti (facoltativo).
Se si desidera usare un ambiente curato, è possibile eseguire il comando seguente:
from azureml.core import Environment
sklearn_env = Environment.get(workspace=ws, name='AzureML-Tutorial')
Creare un ambiente personalizzato
È possibile anche creare un ambiente personalizzato. Definire le dipendenze Conda in un file YAML; in questo esempio il file è denominato conda_dependencies.yml
.
dependencies:
- python=3.7
- scikit-learn
- numpy
- pip:
- azureml-defaults
Creare un ambiente di Azure Machine Learning da questa specifica di ambiente Conda. Verrà creato un pacchetto dell'ambiente in un contenitore Docker in fase di esecuzione.
from azureml.core import Environment
sklearn_env = Environment.from_conda_specification(name='sklearn-env', file_path='conda_dependencies.yml')
Per altre informazioni sulla creazione e l'utilizzo di ambienti, vedere Creare e usare ambienti software in Azure Machine Learning.
Configurare e inviare un'esecuzione di training
Creare un oggetto ScriptRunConfig
Creare un oggetto ScriptRunConfig per specificare i dettagli di configurazione del processo di training, tra cui script di training, ambiente da usare e destinazione di calcolo in cui eseguirlo.
Qualsiasi argomento dello script di training verrà passato tramite la riga di comando, se specificato nel parametro arguments
.
Il codice seguente configurerà un oggetto ScriptRunConfig per inviare il processo al computer locale per l'esecuzione.
from azureml.core import ScriptRunConfig
src = ScriptRunConfig(source_directory='.',
script='train_iris.py',
arguments=['--kernel', 'linear', '--penalty', 1.0],
environment=sklearn_env)
Se invece si desidera eseguire il processo in un cluster remoto, è possibile specificare la destinazione di calcolo desiderata in corrispondenza del parametro compute_target
di ScriptRunConfig.
from azureml.core import ScriptRunConfig
compute_target = ws.compute_targets['<my-cluster-name>']
src = ScriptRunConfig(source_directory='.',
script='train_iris.py',
arguments=['--kernel', 'linear', '--penalty', 1.0],
compute_target=compute_target,
environment=sklearn_env)
Inviare l'esecuzione
from azureml.core import Experiment
run = Experiment(ws,'Tutorial-TrainIRIS').submit(src)
run.wait_for_completion(show_output=True)
Avviso
Azure Machine Learning esegue gli script di training copiando l'intera directory di origine. Se sono presenti dati sensibili che non si intende caricare, usare un file .ignore oppure non includerli nella directory di origine. Accedere invece ai dati usando un set di dati di Azure Machine Learning.
Cosa accade durante l'esecuzione?
Il processo di esecuzione si articola nelle fasi seguenti:
Preparazione: viene creata un'immagine Docker in base all'ambiente definito. L'immagine viene caricata nel registro contenitori dell'area di lavoro e memorizzata nella cache per le esecuzioni successive. I log vengono inoltre trasmessi alla cronologia di esecuzione ed è possibile visualizzarli per monitorare lo stato di avanzamento. Se invece viene specificato un ambiente curato, verrà usata l'immagine memorizzata nella cache in cui è stato eseguito il backup dell'ambiente curato.
Ridimensionamento: il cluster prova ad aumentare il numero di nodi se, per completare l'esecuzione, il cluster Batch per intelligenza artificiale richiede più nodi di quelli attualmente disponibili.
Esecuzione: tutti gli script disponibili nella cartella degli script vengono caricati nella destinazione di calcolo, gli archivi dati vengono montati o copiati e viene eseguito l'oggetto
script
. Gli output di stdout e la cartella ./logs vengono trasmessi alla cronologia di esecuzione e possono essere usati per monitorare l'esecuzione.Post-elaborazione: la cartella ./outputs dell'esecuzione viene copiata nella cronologia di esecuzione.
Salvare e registrare il modello
Dopo aver eseguito il training del modello, è possibile salvarlo e registrarlo nell'area di lavoro. Con la registrazione dei modelli è possibile archiviare i modelli e creare le relative versioni nell'area di lavoro per semplificare la gestione e la distribuzione dei modelli.
Aggiungere il codice seguente allo script di training, train_iris.py, per salvare il modello.
import joblib
joblib.dump(svm_model_linear, 'model.joblib')
Registrare il modello nell'area di lavoro con il codice seguente. Specificando i parametri model_framework
, model_framework_version
e resource_configuration
, diventa disponibile la distribuzione del modello senza codice. La distribuzione di un modello senza codice consente di distribuire direttamente il modello come servizio Web dal modello registrato e l'oggetto ResourceConfiguration
definisce la risorsa di calcolo per il servizio Web.
from azureml.core import Model
from azureml.core.resource_configuration import ResourceConfiguration
model = run.register_model(model_name='sklearn-iris',
model_path='outputs/model.joblib',
model_framework=Model.Framework.SCIKITLEARN,
model_framework_version='0.19.1',
resource_configuration=ResourceConfiguration(cpu=1, memory_in_gb=0.5))
Distribuzione
Il modello appena registrato può essere distribuito esattamente come qualsiasi altro modello registrato in Azure Machine Learning. La procedura per la distribuzione contiene una sezione sulla registrazione dei modelli, ma è possibile passare direttamente alla creazione di una destinazione di calcolo(how-to-deploy-and-where.md#choose-a-compute-target) per la distribuzione, poiché si dispone già di un modello registrato.
(Anteprima) Distribuzione di un modello senza codice
Importante
Questa funzionalità è attualmente in anteprima pubblica. Questa versione di anteprima viene fornita senza contratto di servizio, pertanto se ne sconsiglia l’uso per i carichi di lavoro in ambienti di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate.
Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.
Anziché la tradizionale route di distribuzione, per scikit-learn è possibile anche usare la funzionalità di distribuzione senza codice (anteprima). La distribuzione di modelli senza codice è supportata per tutti i tipi di modelli scikit-learn predefiniti. Registrando il modello come illustrato in precedenza, ovvero con i parametri model_framework
, model_framework_version
e resource_configuration
, è sufficiente usare la funzione statica deploy()
per distribuire il modello.
web_service = Model.deploy(ws, "scikit-learn-service", [model])
Nota
Queste dipendenze sono incluse nel contenitore di inferenza scikit-learn predefinito.
- azureml-defaults
- inference-schema[numpy-support]
- scikit-learn
- numpy
L'articolo completo illustra il processo di distribuzione in Azure Machine Learning in modo più approfondito.
Passaggi successivi
In questo articolo sono stati effettuati il training e la registrazione di un modello scikit-learn e sono state apprese le opzioni di distribuzione. Per altre informazioni su Azure Machine Learning, vedere i seguenti altri articoli.