Tutorial: Modellentwicklung auf einer Cloudarbeitsstation

Erfahren Sie, wie Sie ein Trainingsskript mit einem Notebook auf einer Azure Machine Learning-Cloudarbeitsstation entwickeln. In diesem Tutorial werden die Grundlagen behandelt, die Sie für die ersten Schritte benötigen:

  • Richten Sie die Cloudarbeitsstation ein und konfigurieren Sie sie. Ihre Cloudarbeitsstation basiert auf einer Azure Machine Learning-Compute-Instanz, die mit Umgebungen vorkonfiguriert ist, um Ihre verschiedenen Modellentwicklungsanforderungen zu unterstützen.
  • Verwenden Sie cloudbasierte Entwicklungsumgebungen.
  • Verwenden Sie MLflow, um Ihre Modellmetriken in einem Notebook nachzuverfolgen.

Voraussetzungen

Um Azure Machine Learning verwenden zu können, benötigen Sie zuerst einen Arbeitsbereich. Wenn Sie noch keinen haben, schließen Sie Erstellen von Ressourcen, die Sie für die ersten Schritte benötigen ab, um einen Arbeitsbereich zu erstellen, und mehr über dessen Verwendung zu erfahren.

Notebooks

Der Abschnitt „Notebooks“ in Ihrem Arbeitsbereich ist ein guter Ausgangspunkt, um sich mit Azure Machine Learning und den zugehörigen Funktionen vertraut zu machen. Hier können Sie eine Verbindung mit Computeressourcen herstellen, mit einem Terminal arbeiten und Jupyter Notebooks sowie Skripts bearbeiten und ausführen.

  1. Melden Sie sich bei Azure Machine Learning Studio an.

  2. Wählen Sie Ihren Arbeitsbereich aus, wenn er noch nicht geöffnet ist.

  3. Wählen Sie im Navigationsbereich auf der linken Seite die Option Notebooks aus.

  4. Wenn Sie keine Compute-Instanz haben, wird in der Mitte des Bildschirms Compute erstellen angezeigt. Wählen Sie Compute erstellen aus, und füllen Sie das Formular aus. Sie können alle Standardwerte verwenden. (Wenn Sie bereits über eine Compute-Instanz verfügen, wird stattdessen an dieser Stelle Terminal angezeigt. Sie verwenden Terminal später in diesem Tutorial.)

    Screenshot shows how to create a compute instance.

Einrichten einer neuen Umgebung für die Prototyperstellung (optional)

Damit Ihr Skript ausgeführt werden kann, müssen Sie in einer Umgebung arbeiten, die mit den vom Code erwarteten Abhängigkeiten und Bibliotheken konfiguriert ist. In diesem Abschnitt können Sie eine Umgebung erstellen, die auf Ihren Code zugeschnitten ist. Um den neuen Jupyter-Kernel zu erstellen, mit dem Ihr Notebook eine Verbindung herstellt, verwenden Sie eine YAML-Datei, die die Abhängigkeiten definiert.

  • Laden Sie eine Datei hoch.

    Dateien, die Sie hochladen, werden in einer Azure-Dateifreigabe gespeichert, und diese Dateien werden in jede Compute-Instanz eingebunden und innerhalb des Arbeitsbereichs freigegeben.

    1. Laden Sie diese Conda-Umgebungsdatei workstation_env.yml auf Ihren Computer herunter, indem Sie die Schaltfläche Rohdatei herunterladen oben rechts verwenden.
    1. Wählen Sie Dateien hinzufügen und dann Dateien hochladen aus, um sie in Ihren Arbeitsbereich hochzuladen.

      Screenshot shows how to upload files to your workspace.

    2. Wählen Sie Datei(en) durchsuchen und auswählen aus.

    3. Wählen Sie die Datei workstation_env.yml aus, die Sie heruntergeladen haben.

    4. Wählen Sie die Option Hochladen.

    Die Datei workstation_env.yml wird in Ordner mit Ihrem Benutzernamen auf der Registerkarte Dateien angezeigt. Wählen Sie diese Datei aus, um eine Vorschau anzuzeigen, und sehen Sie, welche Abhängigkeiten sie angibt. Sie werden Inhalte wie diese sehen:

    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
    
  • Erstellen Sie einen Kernel.

    Verwenden Sie nun das Azure Machine Learning-Terminal, um einen neuen Jupyter-Kernel basierend auf der Datei workstation_env.yml zu erstellen.

    1. Klicken Sie auf Terminal, um ein Terminalfenster zu öffnen. Sie können das Terminal auch über die linke Befehlsleiste öffnen:

      Screenshot shows open terminal tool in notebook toolbar.

    2. Wenn die Compute-Instanz beendet wurde, wählen Sie Compute starten aus, und warten Sie, bis sie ausgeführt wird.

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

    3. Sobald der Compute ausgeführt wird, wird im Terminal eine Willkommensmeldung angezeigt, und Sie können mit der Eingabe von Befehlen beginnen.

    4. Zeigen Sie Ihre aktuellen Conda-Umgebungen an. Die aktive Umgebung ist mit einem * gekennzeichnet.

      conda env list
      
    5. Wenn Sie einen Unterordner für dieses Tutorial erstellt haben, cd Sie jetzt zu diesem Ordner.

    6. Erstellen Sie die Umgebung basierend auf der bereitgestellten Conda-Datei. Die Erstellung dieser Umgebung dauert einige Minuten.

      conda env create -f workstation_env.yml
      
      
    7. Aktivieren Sie die neue Umgebung.

       conda activate workstation_env
      
    8. Überprüfen Sie, ob die richtige Umgebung (mit * gekennzeichnet) aktiv ist.

      conda env list
      
    9. Erstellen Sie einen neuen Jupyter-Kernel basierend auf Ihrer aktiven Umgebung.

      python -m ipykernel install --user --name workstation_env --display-name "Tutorial Workstation Env" 
      
    10. Schließen Sie das Terminalfenster.

Sie verfügen jetzt über einen neuen Kernel. Als Nächstes öffnen Sie ein Notebook und verwenden diesen Kernel.

Erstellen eines Notebooks

  1. Wählen Sie Dateien hinzufügen und dann Neue Datei erstellen aus.

    Screenshot: Create new file.

  2. Nennen Sie Ihr neues Notebook develop-tutorial.ipynb (oder geben Sie Ihren bevorzugten Namen ein).

  3. Wenn die Compute-Instanz beendet wurde, wählen Sie Compute starten aus, und warten Sie, bis sie ausgeführt wird.

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

  4. Oben rechts sehen Sie, dass das Notebook mit dem Standardkernel verbunden ist. Wenn Sie den Kernel erstellt haben, wechseln Sie zur Verwendung des Kernels Tutorial Workstation Env.

Entwickeln eines Trainingsskripts

In diesem Abschnitt entwickeln Sie ein Python-Trainingsskript, das Zahlungsverzug bei Kreditkartenzahlungen vorhersagt, indem Sie die vorbereiteten Test- und Trainingsdatasets aus dem UCI-Dataset verwenden.

Dieser Code verwendet sklearn für das Training und MLflow zum Protokollieren der Metriken.

  1. Beginnen Sie mit Code, der die Pakete und Bibliotheken importiert, die Sie im Trainingsskript verwenden.

    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. Laden und verarbeiten Sie als Nächstes die Daten für dieses Experiment. In diesem Tutorial lesen Sie die Daten aus einer Datei im 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. Bereiten Sie die Daten für das Training vor:

    # 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. Fügen Sie Code hinzu, um die automatische Protokollierung mit MLflow zu starten, damit Sie die Metriken und Ergebnisse nachverfolgen können. Dank der iterativen Modellentwicklung können Sie mit MLflow Modellparameter und Ergebnisse protokollieren. Sehen Sie sich diese Ausführungen an, um die Leistung Ihres Modells zu vergleichen und zu verstehen. Die Protokolle liefern auch den Kontext dafür, wann Sie bereit sind, von der Entwicklungsphase zur Trainingsphase Ihrer Workflows in Azure Machine Learning überzugehen.

    # set name for logging
    mlflow.set_experiment("Develop on cloud tutorial")
    # enable autologging with MLflow
    mlflow.sklearn.autolog()
  5. Trainieren des Modells.

    # 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()

    Hinweis

    Sie können die mlflow-Warnungen ignorieren. Sie erhalten weiterhin alle Ergebnisse, die nachverfolgt werden müssen.

Durchlaufen

Nachdem Sie nun die Modellergebnisse erhalten haben, können Sie etwas ändern und es erneut versuchen. Probieren Sie beispielsweise ein anderes Klassifizierungsverfahren aus:

# 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()

Hinweis

Sie können die mlflow-Warnungen ignorieren. Sie erhalten weiterhin alle Ergebnisse, die nachverfolgt werden müssen.

Untersuchen der Ergebnisse

Nachdem Sie nun zwei verschiedene Modelle ausprobiert haben, verwenden Sie die von MLFfow nachverfolgten Ergebnisse, um zu entscheiden, welches Modell besser ist. Sie können auf Metriken wie Genauigkeit oder andere Indikatoren verweisen, die für Ihre Szenarien am wichtigsten sind. Sie können diese Ergebnisse ausführlicher untersuchen, indem Sie sich die von MLflow erstellten Aufträge ansehen.

  1. Wählen Sie im linken Navigationsbereich Aufträge aus.

    Screenshot shows how to select Jobs in the navigation.

  2. Wählen Sie den Link zum Tutorial Entwickeln in der Cloud aus.

  3. Es werden zwei verschiedene Aufträge angezeigt, einer für jedes der Modelle, die Sie ausprobiert haben. Diese Namen werden automatisch generiert. Verwenden Sie das Stifttool neben dem Namen, das angezeigt wird, wenn Sie mit dem Mauszeiger auf einen Namen zeigen, wenn Sie ihn umbenennen möchten.

  4. Wählen Sie den Link für den ersten Auftrag aus. Der Name wird oben angezeigt. Sie können es auch hier mit dem Stifttool umbenennen.

  5. Auf der Seite werden Details des Auftrags angezeigt, z. B. Eigenschaften, Ausgaben, Tags und Parameter. Unter Tags wird „estimator_name“ angezeigt, der den Typ des Modells beschreibt.

  6. Wählen Sie die Registerkarte Metriken aus, um die Metriken anzuzeigen, die von MLflow protokolliert wurden. (Die Ergebnisse unterscheiden sich von Ihren, da Sie über einen anderen Trainingssatz verfügen.)

    Screenshot shows metrics for a job.

  7. Wählen Sie die Registerkarte Images aus, um die von MLflow generierten Bilder anzuzeigen.

    Screenshot shows images for a job.

  8. Gehen Sie zurück und überprüfen Sie die Metriken und Images für das andere Modell.

Erstellen eines Python-Skripts

Erstellen Sie nun ein Python-Skript aus Ihrem Notebook für das Modelltraining.

  1. Wählen Sie auf der Symbolleiste des Notebooks das Menü aus.

  2. Wählen Sie Exportieren als> Python aus.

    Screenshot shows exporting a Python file from the notebook.

  3. Nennen Sie die Datei train.py.

  4. Durchsuchen Sie diese Datei, und löschen Sie den Code, den Sie nicht im Trainingsskript verwenden möchten. Behalten Sie beispielsweise den Code für das Modell bei, das Sie verwenden möchten, und löschen Sie Code für das Modell, das Sie nicht möchten.

    • Stellen Sie sicher, dass Sie den Code beibehalten, der die automatische Protokollierung (mlflow.sklearn.autolog()) startet.
    • Sie können die automatisch generierten Kommentare löschen und weitere eigene Kommentare hinzufügen.
    • Wenn Sie das Python-Skript interaktiv (in einem Terminal oder Notebook) ausführen, können Sie die Zeile beibehalten, die den Experimentnamen definiert (mlflow.set_experiment("Develop on cloud tutorial")). Sie können ihm sogar einen anderen Namen geben, um ihn als einen anderen Eintrag im Abschnitt Aufträge zu sehen. Wenn Sie jedoch das Skript für einen Trainingsauftrag vorbereiten, funktioniert diese Zeile nicht und sollte weggelassen werden. Die Auftragsdefinition enthält den Namen des Experiments.
    • Wenn Sie ein einzelnes Modell trainieren, sind die Linien zum Starten und Beenden einer Ausführung (mlflow.start_run() und mlflow.end_run()) ebenfalls nicht erforderlich (sie haben keine Auswirkung), können aber beibehalten werden.
  5. Wenn Sie mit den Bearbeitungen fertig sind, speichern Sie die Datei.

Sie verfügen jetzt über ein Python-Skript, das Sie zum Trainieren Ihres bevorzugten Modells verwenden können.

Ausführen des Python-Skripts

Vorerst führen Sie diesen Code auf Ihrer Compute-Instanz aus, d. h. auf Ihrer Azure Machine Learning-Entwicklungsumgebung. Im Tutorial: Trainieren eines Modells erfahren Sie, wie Sie ein Trainingsskript auf skalierbare Weise auf leistungsstärkere Computeressourcen ausführen.

  1. Wählen Sie auf der linken Seite Terminal öffnen aus, um ein Terminalfenster zu öffnen.

    Screenshot shows how to open a terminal window.

  2. Zeigen Sie Ihre aktuellen Conda-Umgebungen an. Die aktive Umgebung ist mit einem * gekennzeichnet.

    conda env list
    
  3. Wenn Sie einen neuen Kernel erstellt haben, aktivieren Sie ihn jetzt:

    conda activate workstation_env
    
  4. Wenn Sie einen Unterordner für dieses Tutorial erstellt haben, cd Sie jetzt zu diesem Ordner.

  5. Führen Sie Ihr Trainingsskript aus.

    python train.py
    

Hinweis

Sie können die mlflow-Warnungen ignorieren. Sie erhalten weiterhin alle Metriken und Bilder aus der automatischen Protokollierung.

Untersuchen der Skriptergebnisse

Wechseln Sie zurück zu Aufträge, um die Ergebnisse Ihres Trainingsskripts anzuzeigen. Beachten Sie, dass sich die Trainingsdaten mit jeder Aufteilung ändern, sodass sich die Ergebnisse auch zwischen den Ausführungen unterscheiden.

Bereinigen von Ressourcen

Wenn Sie nun mit dem anderen Tutorials fortfahren möchten, springen Sie zu Nächste Schritte.

Beenden der Compute-Instanz

Wenn Sie die Compute-Instanz jetzt nicht verwenden möchten, beenden Sie sie:

  1. Wählen Sie im Studio im linken Navigationsbereich Compute aus.
  2. Wählen Sie auf den oberen Registerkarten Compute-Instanzen aus.
  3. Wählen Sie in der Liste die Compute-Instanz aus.
  4. Wählen Sie auf der oberen Symbolleiste Beenden aus.

Löschen aller Ressourcen

Wichtig

Die von Ihnen erstellten Ressourcen können ggf. auch in anderen Azure Machine Learning-Tutorials und -Anleitungen verwendet werden.

Wenn Sie die erstellten Ressourcen nicht mehr benötigen, löschen Sie diese, damit Ihnen keine Kosten entstehen:

  1. Wählen Sie ganz links im Azure-Portal Ressourcengruppen aus.

  2. Wählen Sie in der Liste die Ressourcengruppe aus, die Sie erstellt haben.

  3. Wählen Sie die Option Ressourcengruppe löschen.

    Screenshot of the selections to delete a resource group in the Azure portal.

  4. Geben Sie den Ressourcengruppennamen ein. Wählen Sie anschließend die Option Löschen.

Nächste Schritte

Weitere Informationen:

In diesem Tutorial wurden die ersten Schritte zum Erstellen eines Modells gezeigt, wobei der Prototyp auf demselben Rechner erstellt wurde, auf dem sich auch der Code befindet. Erfahren Sie für Ihr Produktionstraining, wie Sie dieses Trainingsskript für leistungsfähigere Remotecomputeressourcen verwenden: