Esercitazione: Sviluppo di modelli in una workstation cloud

Informazioni su come sviluppare uno script di training con un notebook in una workstation cloud di Azure Machine Learning. Questa esercitazione illustra le nozioni di base necessarie per iniziare:

  • Configurare e configurare la workstation cloud. La workstation cloud è basata su un'istanza di calcolo di Azure Machine Learning, preconfigurato con ambienti per supportare le varie esigenze di sviluppo del modello.
  • Usare ambienti di sviluppo basati sul cloud.
  • Usare MLflow per tenere traccia delle metriche del modello, tutte provenienti da un notebook.

Prerequisiti

Per usare Azure Machine Learning, è prima necessario un'area di lavoro. Se non ne hai uno, completare La creazione di risorse necessarie per iniziare a creare un'area di lavoro e altre informazioni sull'uso.

Iniziare con i notebook

La sezione Notebooks nell'area di lavoro è un buon posto per iniziare a conoscere Azure Machine Learning e le relative funzionalità. Qui è possibile connettersi alle risorse di calcolo, usare un terminale e modificare ed eseguire Jupyter Notebooks e script.

  1. Accedere ad Azure Machine Learning Studio.

  2. Selezionare l'area di lavoro se non è già aperta.

  3. Nel riquadro di spostamento a sinistra selezionare Notebook.

  4. Se non si dispone di un'istanza di calcolo, verrà visualizzato Crea calcolo al centro della schermata. Selezionare Crea calcolo e compilare il modulo. È possibile usare tutte le impostazioni predefinite. Se si dispone già di un'istanza di calcolo, verrà invece visualizzato Terminale in quel punto. In questa esercitazione si userà il terminale .

    Screenshot che mostra come creare un'istanza di calcolo.

Configurare un nuovo ambiente per la prototipazione (facoltativo)

Per eseguire lo script, è necessario lavorare in un ambiente configurato con le dipendenze e le librerie previsto dal codice. Questa sezione consente di creare un ambiente personalizzato per il codice. Per creare il nuovo kernel Jupyter a cui si connette il notebook, si userà un file YAML che definisce le dipendenze.

  • Caricare un file.

    I file caricati vengono archiviati in una condivisione file di Azure e questi file vengono montati in ogni istanza di calcolo e condivisa all'interno dell'area di lavoro.

    1. Scaricare questo file di ambiente conda, workstation_env.yml nel computer.

    2. Selezionare Aggiungi file e quindi carica file per caricarlo nell'area di lavoro.

      Screenshot che mostra come caricare file nell'area di lavoro.

    3. Selezionare Sfoglia e selezionare file.

    4. Selezionare workstation_env.yml file scaricato.

    5. Selezionare Carica.

    Verrà visualizzato il file workstation_env.yml nella cartella nome utente nella scheda File . Selezionare questo file per visualizzarlo in anteprima e visualizzare le dipendenze specificate.

    Screenshot che mostra il file yml caricato.

  • Creare un kernel.

    Usare ora il terminale di Azure Machine Learning per creare un nuovo kernel Jupyter, in base al file workstation_env.yml .

    1. Selezionare Terminale per aprire una finestra del terminale. È anche possibile aprire il terminale dalla barra dei comandi a sinistra:

      Screenshot che mostra lo strumento del terminale aperto nella barra degli strumenti del notebook.

    2. Se l'istanza di calcolo viene arrestata, selezionare Avvia calcolo e attendere fino a quando non è in esecuzione.

      Screenshot che mostra come avviare il calcolo se è arrestato.

    3. Dopo aver eseguito il calcolo, viene visualizzato un messaggio di benvenuto nel terminale e è possibile avviare la digitazione dei comandi.

    4. Visualizzare gli ambienti conda correnti. L'ambiente attivo è contrassegnato con un oggetto *.

      conda env list
      
    5. Se è stata creata una sottocartella per questa esercitazione, cd a questa cartella ora.

    6. Creare l'ambiente in base al file conda fornito. Sono necessari alcuni minuti per compilare questo ambiente.

      conda env create -f workstation_env.yml
      
      
    7. Attivare il nuovo ambiente.

       conda activate workstation_env
      
    8. Verificare che l'ambiente corretto sia attivo, cercando di nuovo l'ambiente contrassegnato con un oggetto *.

      conda env list
      
    9. Creare un nuovo kernel Jupyter in base all'ambiente attivo.

      python -m ipykernel install --user --name workstation_env --display-name "Tutorial Workstation Env" 
      
    10. Chiudere la finestra del terminale.

A questo momento è disponibile un nuovo kernel. Si aprirà quindi un notebook e si userà questo kernel.

Creare un notebook

  1. Selezionare Aggiungi file e scegliere Crea nuovo file.

    Screenshot: Creare un nuovo file.

  2. Assegnare un nome al nuovo notebook develop-tutorial.ipynb (o immettere il nome preferito).

  3. Se l'istanza di calcolo viene arrestata, selezionare Avvia calcolo e attendere fino a quando non è in esecuzione.

    Screenshot che mostra come avviare il calcolo se è arrestato.

  4. Verrà visualizzato che il notebook è connesso al kernel predefinito in alto a destra. Passare all'uso del kernel Env della workstation esercitazione .

Sviluppare uno script di training

In questa sezione si sviluppa uno script di training Python che stima i pagamenti predefiniti della carta di credito usando i set di dati di test e training preparati dal set di dati UCI.

Questo codice usa sklearn per il training e MLflow per registrare le metriche.

  1. Iniziare con il codice che importa i pacchetti e le librerie che verranno usati nello script di training.

    import os
    import argparse
    import pandas as pd
    import mlflow
    import mlflow.sklearn
    from sklearn.ensemble import GradientBoostingClassifier
    from sklearn.metrics import classification_report
    from sklearn.model_selection import train_test_split
  2. Caricare ed elaborare quindi i dati per questo esperimento. In questa esercitazione si legge i dati da un file su Internet.

    # load the data
    credit_df = pd.read_csv(
        "https://azuremlexamples.blob.core.windows.net/datasets/credit_card/default_of_credit_card_clients.csv",
        header=1,
        index_col=0,
    )
    
    train_df, test_df = train_test_split(
        credit_df,
        test_size=0.25,
    )
  3. Ottenere i dati pronti per il training:

    # Extracting the label column
    y_train = train_df.pop("default payment next month")
    
    # convert the dataframe values to array
    X_train = train_df.values
    
    # Extracting the label column
    y_test = test_df.pop("default payment next month")
    
    # convert the dataframe values to array
    X_test = test_df.values
  4. Aggiungere codice per avviare l'assegnazione automatica con MLflow, in modo che sia possibile tenere traccia delle metriche e dei risultati. Con la natura iterativa dello sviluppo di modelli, MLflow consente di registrare i parametri e i risultati del modello. Fare riferimento a queste esecuzioni per confrontare e comprendere le prestazioni del modello. I log forniscono anche un contesto per quando si è pronti a passare dalla fase di sviluppo alla fase di training dei flussi di lavoro all'interno di Azure Machine Learning.

    # set name for logging
    mlflow.set_experiment("Develop on cloud tutorial")
    # enable autologging with MLflow
    mlflow.sklearn.autolog()
  5. Eseguire il training di un modello.

    # Train Gradient Boosting Classifier
    print(f"Training with data of shape {X_train.shape}")
    
    mlflow.start_run()
    clf = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1)
    clf.fit(X_train, y_train)
    
    y_pred = clf.predict(X_test)
    
    print(classification_report(y_test, y_pred))
    # Stop logging for this model
    mlflow.end_run()

Scorrere

Dopo aver ottenuto risultati del modello, è possibile modificare qualcosa e riprovare. Ad esempio, provare una tecnica di classificatore diversa:

# Train  AdaBoost Classifier
from sklearn.ensemble import AdaBoostClassifier

print(f"Training with data of shape {X_train.shape}")

mlflow.start_run()
ada = AdaBoostClassifier()

ada.fit(X_train, y_train)

y_pred = ada.predict(X_test)

print(classification_report(y_test, y_pred))
# Stop logging for this model
mlflow.end_run()

Esaminare i risultati

Dopo aver provato due modelli diversi, usare i risultati rilevati per MLFfow decidere quale modello è meglio. È possibile fare riferimento a metriche come accuratezza o altri indicatori che usano la maggior parte degli scenari. È possibile esaminare questi risultati in modo più dettagliato esaminando i processi creati da MLflow.

  1. Nella barra di spostamento a sinistra selezionare Processi.

    Screenshot che mostra come selezionare Processi nello spostamento.

  2. Selezionare il collegamento per l'esercitazione Sviluppo nel cloud.

  3. Sono visualizzati due processi diversi, uno per ognuno dei modelli provato. Questi nomi vengono generati automaticamente. Quando si passa il puntatore del mouse su un nome, usare lo strumento di matita accanto al nome se si vuole rinominarlo.

  4. Selezionare il collegamento per il primo processo. Il nome viene visualizzato nella parte superiore. È anche possibile rinominarla qui con lo strumento a matita.

  5. La pagina mostra i dettagli del processo, ad esempio proprietà, output, tag e parametri. In Tag verrà visualizzato il estimator_name, che descrive il tipo di modello.

  6. Selezionare la scheda Metriche per visualizzare le metriche registrate da MLflow. Si prevede che i risultati siano diversi, in quanto si dispone di un set di training diverso.

    Screenshot che mostra le metriche per un processo.

  7. Selezionare la scheda Immagini per visualizzare le immagini generate da MLflow.

    Screenshot che mostra le immagini per un processo.

  8. Indietro e esaminare le metriche e le immagini per l'altro modello.

Creare uno script Python

Creare ora uno script Python dal notebook per il training del modello.

  1. Nella barra degli strumenti del notebook selezionare il menu.

  2. Selezionare Esporta come> Python.

    Screenshot che mostra l'esportazione di un file Python dal notebook.

  3. Assegnare un nome al file train.py.

  4. Esaminare questo file ed eliminare il codice che non si vuole nello script di training. Ad esempio, mantenere il codice per il modello che si vuole usare ed eliminare il codice per il modello che non si vuole.

    • Assicurarsi di mantenere il codice che avvia l'assegnazione automatica (mlflow.sklearn.autolog()).
    • È possibile eliminare i commenti generati automaticamente e aggiungere altri commenti.
    • Quando si esegue lo script Python in modo interattivo (in un terminale o in un notebook), è possibile mantenere la riga che definisce il nome dell'esperimento (mlflow.set_experiment("Develop on cloud tutorial")). In alternativa, assegnargli un nome diverso per vederlo come una voce diversa nella sezione Processi . Ma quando si prepara lo script per un processo di training, tale riga non funzionerà e deve essere omessa: la definizione del processo include il nome dell'esperimento.
    • Quando si esegue il training di un singolo modello, le righe per avviare e terminare un'esecuzione (mlflow.start_run() e mlflow.end_run()) non sono necessarie (non avranno alcun effetto), ma possono essere lasciate in se si desidera.
  5. Al termine delle modifiche, salvare il file.

È ora disponibile uno script Python da usare per il training del modello preferito.

Eseguire lo script Python

Per il momento, si esegue questo codice nell'istanza di calcolo, ovvero l'ambiente di sviluppo di Azure Machine Learning. Esercitazione: eseguire il training di un modello illustra come eseguire uno script di training in modo più scalabile sulle risorse di calcolo più potenti.

  1. A sinistra selezionare Apri terminale per aprire una finestra del terminale.

    Screenshot che mostra come aprire una finestra del terminale.

  2. Visualizzare gli ambienti conda correnti. L'ambiente attivo è contrassegnato con un oggetto *.

    conda env list
    
  3. Attivare il kernel:

    conda activate workstation_env
    
  4. Se è stata creata una sottocartella per questa esercitazione, cd a questa cartella ora.

  5. Eseguire lo script di training.

    python train.py
    

Esaminare i risultati dello script

Indietro a Processi per visualizzare i risultati dello script di training. Tenere presente che i dati di training cambiano con ogni divisione, quindi i risultati differiscono anche tra le esecuzioni.

Pulire le risorse

Se si prevede di continuare ora ad altre esercitazioni, passare a Passaggi successivi.

Arrestare l'istanza di calcolo

Se non lo si userà ora, arrestare l'istanza di calcolo:

  1. In studio, nell'area di spostamento a sinistra selezionare Calcolo.
  2. Nelle schede principali selezionare Istanze di calcolo
  3. Selezionare l'istanza di calcolo nell'elenco.
  4. Nella barra degli strumenti superiore selezionare Arresta.

Eliminare tutte le risorse

Importante

Le risorse create possono essere usate come prerequisiti per altre esercitazioni e procedure dettagliate per Azure Machine Learning.

Se non si prevede di usare alcuna delle risorse create, eliminarle in modo da non comportare addebiti:

  1. Nel portale di Azure fare clic su Gruppi di risorse all'estrema sinistra.

  2. Nell'elenco selezionare il gruppo di risorse creato.

  3. Selezionare Elimina gruppo di risorse.

    Screenshot delle opzioni da selezionare per eliminare un gruppo di risorse nel portale di Azure.

  4. Immettere il nome del gruppo di risorse. Selezionare Elimina.

Passaggi successivi

Altre informazioni su:

Questa esercitazione illustra i primi passaggi della creazione di un modello, la creazione di prototipi nello stesso computer in cui risiede il codice. Per il training di produzione, informazioni su come usare lo script di training su risorse di calcolo remote più potenti: