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:

  • Impostare e configurare la workstation cloud. La workstation cloud è basata su un'istanza di ambiente di calcolo di Azure Machine Learning, preconfigurata con ambienti per supportare le diverse esigenze di sviluppo dei modelli.
  • Usare ambienti di sviluppo basati sul cloud.
  • Usare MLflow per tenere traccia delle metriche dei modelli direttamente da un notebook.

Prerequisiti

Per usare Azure Machine Learning, è prima di tutto necessaria un'area di lavoro. Se non è disponibile, completare i passaggi in Creare le risorse necessarie per iniziare per creare un'area di lavoro e scoprire di più su come usarla.

Iniziare dai notebook

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

  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 ambiente di calcolo, verrà visualizzato il comando Crea ambiente di calcolo al centro dello schermo. Selezionare Crea ambiente di calcolo e compilare il modulo. È possibile usare tutte le impostazioni predefinite. Se si dispone già di un'istanza di ambiente di calcolo, verrà invece visualizzato il comando Terminale in tale posizione. Il Terminale si userà più avanti in questa esercitazione.

    Screenshot shows how to create a compute instance.

Configurare un nuovo ambiente per la creazione di prototipi (facoltativo)

Per consentire l'esecuzione dello script, è necessario lavorare in un ambiente configurato con le dipendenze e le librerie previste dal codice. Questa sezione illustra come 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, montati in ogni istanza di ambiente di calcolo e condivisi all'interno dell'area di lavoro.

    1. Scaricare questo file di ambiente conda, workstation_env.yml, nel computer usando il pulsante Scarica file non elaborato in alto a destra.
    1. Selezionare Aggiungi file e quindi selezionare Carica file per caricare il file nell'area di lavoro.

      Screenshot shows how to upload files to your workspace.

    2. Selezionare Sfoglia e seleziona file.

    3. Selezionare il file workstation_env.yml scaricato.

    4. Selezionare Carica.

    Il file workstation_env.yml verrà visualizzato nella cartella username nella scheda File. Selezionare questo file per visualizzare l'anteprima ed esaminare le dipendenze specificate. Il contenuto sarà simile al seguente:

    name: workstation_env
    # This file serves as an example - you can update packages or versions to fit your use case
    dependencies:
      - python=3.8
      - pip=21.2.4
      - scikit-learn=0.24.2
      - scipy=1.7.1
      - pandas>=1.1,<1.2
      - pip:
        - mlflow-skinny 
        - azureml-mlflow
        - psutil>=5.8,<5.9
        - ipykernel~=6.0
        - matplotlib
    
  • Creare un kernel.

    Usare ora il terminale di Azure Machine Learning per creare un nuovo kernel Jupyter, basato sul 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 shows open terminal tool in notebook toolbar.

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

      Screenshot shows how to start compute if it's stopped.

    3. Una volta in esecuzione, verrà visualizzato un messaggio di benvenuto nel terminale e sarà possibile iniziare a digitare i comandi.

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

      conda env list
      
    5. Se è stata creata una sottocartella per questa esercitazione, usare il comando cd per passare a tale cartella.

    6. Creare l'ambiente in base al file conda fornito. La creazione dell'ambiente richiede alcuni minuti.

      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 *.

      conda env list
      
    9. Creare un nuovo kernel Jupyter basato sull'ambiente attivo.

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

Sarà ora disponibile un nuovo kernel. Si aprirà quindi un notebook e si userà questo kernel.

Creare un notebook

  1. Selezionare Aggiungi filee scegliere Crea nuovo file.

    Screenshot: Create new file.

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

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

    Screenshot shows how to start compute if it's stopped.

  4. In alto a destra osservare che il notebook è connesso al kernel predefinito. Passare al kernel Tutorial Workstation Env, se è stato creato.

Sviluppare uno script di training

In questa sezione viene sviluppato uno script di training Python che stima i pagamenti predefiniti con carta di credito usando i set di dati di test e di 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 per l'importazione dei pacchetti e delle 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 questo esempio si leggono i dati da un file in 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 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 il codice per avviare la registrazione automatica con MLflow, in modo da poter tenere traccia delle metriche e dei risultati. Vista la natura iterativa dello sviluppo di modelli, MLflow consente di registrare i parametri e i risultati dei modelli. Fare riferimento a queste esecuzioni per confrontare e comprendere le prestazioni di un modello. I log forniscono anche il contesto per quando si è pronti per passare dalla fase di sviluppo a quella di training dei flussi di lavoro in 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()

    Nota

    Gli avvisi di MLflow possono essere ignorati. Si otterranno comunque tutti i risultati necessari.

Iterare

Ora che sono disponibili i risultati del modello, è possibile apportare alcune modifiche e riprovare. Provare ad esempio una tecnica di classificazione 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()

Nota

Gli avvisi di MLflow possono essere ignorati. Si otterranno comunque tutti i risultati necessari.

Esaminare i risultati

Dopo aver provato due modelli diversi, usare i risultati rilevati da MLFfow per decidere quale sia il migliore. È possibile fare riferimento a metriche come l'accuratezza o altri indicatori più importanti per gli scenari specifici. È possibile approfondire questi risultati esaminando i processi creati da MLflow.

  1. Nel riquadro di spostamento a sinistra selezionare Processi.

    Screenshot shows how to select Jobs in the navigation.

  2. Selezionare il collegamento per l'esercitazione per lo sviluppo nel cloud.

  3. Verranno visualizzati due processi diversi, uno per ognuno dei modelli analizzati. I nomi vengono generati automaticamente. Quando si passa il puntatore su un nome, è possibile usare lo strumento matita accanto al nome per modificarlo.

  4. Selezionare il collegamento per il primo processo. Il nome verrà visualizzato nella parte superiore. È anche possibile modificare il nome con lo strumento matita in questa posizione.

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

  6. Selezionare la scheda Metriche per visualizzare le metriche registrate da MLflow. I risultati effettivi saranno diversi, in quanto si dispone di un set di training diverso.

    Screenshot shows metrics for a job.

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

    Screenshot shows images for a job.

  8. Tornare indietro ed 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. Sulla barra degli strumenti del notebook selezionare il menu.

  2. Selezionare Esporta come> Python.

    Screenshot shows exporting a Python file from the notebook.

  3. Assegnare al file il nome train.py.

  4. Esaminare il file ed eliminare il codice non desiderato nello script di training. Mantenere ad esempio il codice per il modello che si vuole usare ed eliminare il codice per il modello che non si vuole usare.

    • Assicurarsi di mantenere il codice che avvia la registrazione automatica (mlflow.sklearn.autolog()).
    • È possibile eliminare i commenti generati automaticamente e aggiungere altri commenti personalizzati.
    • 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")). È anche possibile assegnare un nome diverso per visualizzarlo come voce diversa nella sezione Processi. Tuttavia, quando si prepara lo script per un processo di training, tale riga non funzionerà e deve essere omessa. Il nome dell'esperimento è incluso nella definizione del processo.
    • Quando si esegue il training di un singolo modello, anche 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 nel codice, se lo si desidera.
  5. Dopo aver apportato tutte le modifiche, salvare il file.

A questo punto si dispone di uno script Python da usare per il training del modello preferito.

Eseguire lo script Python

Per il momento, questo codice viene eseguito nell'istanza di ambiente di calcolo, ovvero l'ambiente di sviluppo di Azure Machine Learning. In Esercitazione: Eseguire il training di un modello viene illustrato come eseguire uno script di training in modo più scalabile su risorse di calcolo più potenti.

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

    Screenshot shows how to open a terminal window.

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

    conda env list
    
  3. Se è stato creato un nuovo kernel, attivarlo ora:

    conda activate workstation_env
    
  4. Se è stata creata una sottocartella per questa esercitazione, usare il comando cd per passare a tale cartella.

  5. Eseguire lo script di training.

    python train.py
    

Nota

Gli avvisi di MLflow possono essere ignorati. Si otterranno comunque tutte le metriche e le immagini dalla registrazione automatica.

Esaminare i risultati dello script

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

Pulire le risorse

Se si prevede di continuare con altre esercitazioni, andare a Passaggi successivi.

Arrestare l'istanza di ambiente di calcolo

Se non si prevede di usare subito l'istanza di ambiente di calcolo, arrestarla:

  1. Nell'area di spostamento a sinistra nello studio selezionare Calcolo.
  2. Nelle schede in alto selezionare Istanze di ambiente di calcolo
  3. Selezionare l'istanza di ambiente di calcolo nell'elenco.
  4. Sulla barra degli strumenti in alto 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 le risorse create non servono più, eliminarle per evitare 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 of the selections to delete a resource group in the Azure portal.

  4. Immettere il nome del gruppo di risorse. Quindi seleziona Elimina.

Passaggi successivi

Altre informazioni su:

Questa esercitazione ha illustrato i primi passaggi per la creazione di un modello e la creazione di prototipi nello stesso computer in cui si trova il codice. Per il training nell'ambiente di produzione, vedere come usare lo script di training su risorse di calcolo remote più potenti: