Condividi tramite


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, è necessaria un'area di lavoro. Se non è disponibile, completare Creare le risorse necessarie per iniziare creare un'area di lavoro e ottenere maggiori informazioni su come usarla.

Iniziare con il calcolo

La sezione Calcolo nell'area di lavoro consente di creare risorse di calcolo. Un'istanza di ambiente di calcolo è una workstation basata sul cloud completamente gestita da Azure Machine Learning. Questa serie di esercitazioni usa un'istanza di ambiente di calcolo. È anche possibile usarla per eseguire codice personalizzato e per sviluppare e testare modelli.

  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 Calcolo.
  4. Se non è disponibile un'istanza di ambiente di calcolo, verrà visualizzato il comando Nuovo al centro dello schermo. Selezionare Nuovo e compilare il modulo. È possibile usare tutte le impostazioni predefinite.
  5. Se è disponibile un'istanza di ambiente di calcolo, selezionarla nell'elenco. Se è arrestata, selezionare Avvia.

Aprire Visual Studio Code (VS Code)

Quando è disponibile un'istanza di calcolo in esecuzione, è possibile accedervi in diversi modi. Questa esercitazione illustra l'uso dell'istanza di ambiente di calcolo di VS Code. VS Code fornisce un ambiente di sviluppo integrato (IDE) completo con la potenza delle risorse di Azure Machine Learning.

Nell'elenco delle istanze di ambiente di calcolo selezionare il collegamento VS Code (Web) o VS Code (Desktop) per l'istanza di ambiente di calcolo da usare. Se si sceglie VS Code (Desktop), potrebbe essere visualizzato un popup che chiede se si vuole aprire l'applicazione.

Screenshot che mostra i collegamenti per avviare VS Code (Web) o (Desktop).

Questa istanza di VS Code è collegata all'istanza di ambiente di calcolo e al file system dell'area di lavoro. Anche se la si apre sul desktop, i file visualizzati sono file nell'area di lavoro.

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.

    2. Trascinare il file dal computer alla finestra di VS Code. Il file viene caricato nell'area di lavoro.

    3. Spostare il file nella cartella username.

      Screenshot che mostra come caricare un file.

    4. 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 per creare un nuovo kernel Jupyter, basato sul file workstation_env.yml.

    1. Nella barra dei menu in alto selezionare Terminale > Nuovo terminale.

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

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

      conda env list
      
    3. cd nella cartella in cui è stato caricato il file di workstation_env.yml. Ad esempio, se è stato caricato nella cartella utente:

      cd Users/myusername
      
    4. Assicurarsi che il workstation_env.yml si trovi in questa cartella.

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

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

      conda activate workstation_env
      

      Nota

      Se viene visualizzato CommandNotFoundError, seguire le istruzioni per eseguire conda init bash, chiudere il terminale e aprirne uno nuovo. Quindi eseguire di nuovo il comando conda activate workstation_env.

    7. Verificare che l'ambiente corretto sia attivo, cercando di nuovo l'ambiente contrassegnato con *.

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

      python -m ipykernel install --user --name workstation_env --display-name "Tutorial Workstation Env" 
      
    9. 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. Nella barra dei menu in alto selezionare File > Nuovo file.
  2. Assegnare al nuovo file il nome develop-tutorial.ipynb o immettere il nome preferito. Assicurarsi di usare l'estensione .ipynb.

Impostare il kernel

  1. In alto a destra selezionare Seleziona un kernel.
  2. Selezionare Istanza di ambiente di calcolo di Azure ML (computeinstance-name).
  3. Selezionare il kernel creato, Tutorial Workstation Env. Se non viene visualizzato, selezionare lo strumento Aggiorna in alto a destra.

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. Tornare all'area di lavoro nello studio di Azure Machine Learning.

  2. Nel riquadro di spostamento a sinistra selezionare Processi.

    Screenshot che mostra come selezionare Processi nel riquadro di spostamento.

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

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

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

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

  7. 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 che mostra le metriche per un processo.

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

    Screenshot che mostra le immagini per un processo.

  9. 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. Nella finestra di VS Code fare clic con il pulsante destro del mouse sul nome file del notebook e selezionare Importa notebook in script.

  2. Usare il menu File > Salva per salvare il nuovo file di script. Assegnare al file il nome train.py.

  3. 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()).
    • Quando si esegue lo script Python in modo interattivo, come in questo caso, è 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 è applicabile 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.
  4. 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. Selezionare l'ambiente creato in precedenza in questa esercitazione come versione di Python (workstations_env). Nell'angolo inferiore destro del notebook verrà visualizzato il nome dell'ambiente. Selezionarlo, quindi selezionare l'ambiente al centro della schermata.

    Screenshot che mostra la selezione del nuovo ambiente.

  2. Eseguire ora lo script Python. Usare lo strumento Esegui file Python in alto a destra.

    Screenshot che mostra lo strumento Esegui file Python in alto a destra nella schermata.

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 nell'area di lavoro nello studio di Azure Machine Learning 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, procedere direttamente 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 Ambiente di 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. Nella casella di ricerca della portale di Azure immettere Gruppi di risorse e selezionarlo nei risultati.

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

  3. Nella pagina Panoramica 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. 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: