Freigeben über


Protokollieren und Anzeigen von Metriken und Protokolldateien v1

GILT FÜR: Python SDK azureml v1

Sie können sowohl mit dem standardmäßigen Python-Protokollierungspaket als auch mit den spezifischen Funktionen des Python-SDKs für Azure Machine Learning Echtzeitinformationen protokollieren. Sie können lokal protokollieren und Protokolle an Ihren Arbeitsbereich im Portal senden.

Protokolle helfen bei der Diagnose von Fehlern und Warnungen und beim Nachverfolgen von Leistungsmetriken wie Parametern und Modellleistung. In diesem Artikel erfahren Sie, wie Sie die Protokollierung in den folgenden Szenarien aktivieren:

  • Protokollieren von Ausführungsmetriken
  • Interaktive Trainingssitzungen
  • Übermitteln von Trainingsaufträgen mithilfe von ScriptRunConfig
  • Native logging-Einstellungen für Python
  • Protokollierung von zusätzlichen Quellen

Tipp

In diesem Artikel erfahren Sie, wie Sie den Modelltrainingsprozess überwachen. Wenn Sie sich für die Überwachung der Ressourcennutzung und Ereignisse von Azure Machine Learning (z. B. Kontingente, abgeschlossene Trainingsausführungen oder abgeschlossene Modellimplementierungen) interessieren, finden Sie weitere Informationen unter Überwachen von Azure Machine Learning.

Datentypen

Sie können mehrere Datentypen protokollieren, einschließlich skalarer Werte, Listen, Tabellen, Images, Verzeichnisse und mehr. Weitere Informationen und Python-Codebeispiele für verschiedene Datentypen finden Sie auf der Referenzseite für die Run-Klasse.

Protokollieren von Ausführungsmetriken

Verwenden Sie die folgenden Methoden in den Protokollierungs-APIs, um die Visualisierung Ihrer Metriken anzupassen. Beachten Sie die Diensteinschränkungen für diese protokollierten Metriken.

Protokollierter Wert Beispielcode Formatieren im Portal
Protokollieren eines Arrays mit numerischen Werten run.log_list(name='Fibonacci', value=[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]) Liniendiagramm mit nur einer Variablen
Protokollieren eines einzelnen numerischen Werts mit mehrfacher Verwendung desselben Metriknamens (z.B. in einer for-Schleife) for i in tqdm(range(-10, 10)): run.log(name='Sigmoid', value=1 / (1 + np.exp(-i))) angle = i / 2.0 Liniendiagramm mit nur einer Variablen
Wiederholtes Protokollieren einer Zeile mit zwei numerischen Spalten run.log_row(name='Cosine Wave', angle=angle, cos=np.cos(angle)) sines['angle'].append(angle) sines['sine'].append(np.sin(angle)) Liniendiagramm mit zwei Variablen
Protokollieren einer Tabelle mit zwei numerischen Spalten run.log_table(name='Sine Wave', value=sines) Liniendiagramm mit zwei Variablen
Protokollieren eines Bilds run.log_image(name='food', path='./breadpudding.jpg', plot=None, description='desert') Verwenden Sie diese Methode, um eine Bilddatei oder einen Matplotlib-Plot für die Ausführung zu protokollieren. Diese Bilder sind in der Ausführungsaufzeichnung sicht- und vergleichbar.

Protokollieren mit MLflow

Es wird empfohlen, Ihre Modelle, Metriken und Artefakte mit MLflow zu protokollieren, da es sich um eine Open Source-Lösung handelt, die eine Portierung vom lokalen Modus zur Cloud unterstützt. Die folgende Tabelle und die Codebeispiele zeigen, wie Sie MLflow verwenden, um Metriken und Artefakte aus Ihren Trainingsläufen zu protokollieren. Erfahren Sie mehr über die Protokollierungsmethoden und Entwurfsmuster von MLflow.

Stellen Sie sicher, dass Sie die pip-Pakete mlflow und azureml-mlflow in Ihrem Arbeitsbereich installieren.

pip install mlflow
pip install azureml-mlflow

Legen Sie den MLflow-Nachverfolgungs-URI so fest, dass er auf das Azure Machine Learning-Back-End verweist, um sicherzustellen, dass Ihre Metriken und Artefakte in Ihrem Arbeitsbereich protokolliert werden.

from azureml.core import Workspace
import mlflow
from mlflow.tracking import MlflowClient

ws = Workspace.from_config()
mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())

mlflow.create_experiment("mlflow-experiment")
mlflow.set_experiment("mlflow-experiment")
mlflow_run = mlflow.start_run()
Protokollierter Wert Beispielcode Notizen
Protokollierung eines numerischen Werts (int oder float) mlflow.log_metric('my_metric', 1)
Protokollierung eines booleschen Werts mlflow.log_metric('my_metric', 0) 0 = True, 1 = False
Protokollierung einer Zeichenfolge mlflow.log_text('foo', 'my_string') Protokollierung als Artefakt
Protokollierung von numpy-Metriken oder PIL-Imageobjekten mlflow.log_image(img, 'figure.png')
Protokollierung von matlotlib-Plot oder Imagedatei mlflow.log_figure(fig, "figure.png")

Anzeigen von Ausführungsmetriken über das SDK

Mit run.get_metrics() können Sie die Metriken eines trainierten Modells anzeigen.

from azureml.core import Run
run = Run.get_context()
run.log('metric-name', metric_value)

metrics = run.get_metrics()
# metrics is of type Dict[str, List[float]] mapping metric names
# to a list of the values for that metric in the given run.

metrics.get('metric-name')
# list of metrics in the order they were recorded

Sie können mithilfe von MLflow anhand der Daten- und Infoeigenschaften des Ausführungsobjekts auch auf Ausführungsinformationen zugreifen. Weitere Informationen finden Sie in der Dokumentation zum MLflow.entities.Run-Objekt.

Nach Abschluss der Ausführung können Sie das Objekt mithilfe von MlFlowClient() abrufen.

from mlflow.tracking import MlflowClient

# Use MlFlow to retrieve the run that was just completed
client = MlflowClient()
finished_mlflow_run = MlflowClient().get_run(mlflow_run.info.run_id)

Sie können die Metriken, Parameter und Tags für die Ausführung im Datenfeld des Ausführungsobjekts anzeigen.

metrics = finished_mlflow_run.data.metrics
tags = finished_mlflow_run.data.tags
params = finished_mlflow_run.data.params

Hinweis

Das Metrikwörterbuch unter mlflow.entities.Run.data.metrics gibt nur den zuletzt protokollierten Wert für einen angegebenen Metriknamen zurück. Wenn Sie z. B. nacheinander den Wert 1, dann 2, dann 3 und dann 4 für eine Metrik mit dem Namen sample_metric protokollieren, enthält das Metrikwörterbuch für sample_metric nur den Wert 4 vorhanden.

Um alle für einen bestimmten Metriknamen protokollierten Metriken abzurufen, können Sie MlFlowClient.get_metric_history() verwenden.

Anzeigen von Ausführungsmetriken in der Studio-Benutzeroberfläche

Sie können abgeschlossene Ausführungsaufzeichnungen, einschließlich protokollierter Metriken, in Azure Machine Learning Studio durchsuchen.

Navigieren Sie zur Registerkarte Experimente. Um alle Ihre Ausführungen in Ihrem Arbeitsbereich experimentübergreifend anzuzeigen, wählen Sie die Registerkarte Alle Ausführungen aus. Sie können einen Drilldown für die Ausführungen für bestimmte Experimente ausführen, indem Sie den Experimentfilter auf der oberen Menüleiste anwenden.

Wählen Sie für die Ansicht einzelner Experimente die Registerkarte Alle Experimente aus. Auf dem Dashboard für die Experimentausführung können Sie nachverfolgte Metriken und Protokolle für jede Ausführung sehen.

Sie können auch die Tabelle der Ausführungsliste bearbeiten, um mehrere Ausführungen auszuwählen und den letzten, den minimalen oder den maximalen protokollierten Wert für Ihre Ausführungen anzuzeigen. Passen Sie Ihre Diagramme an, um die protokollierten Metrikwerte und Aggregate über mehrere Ausführungen zu vergleichen. Sie können mehrere Metriken auf der y-Achse Ihres Diagramms zeichnen und Ihre x-Achse anpassen, um Ihre protokollierten Metriken zu zeichnen.

Anzeigen und Herunterladen von Protokolldateien für eine Ausführung

Protokolldateien sind eine wichtige Ressource zum Debuggen von Azure Machine Learning-Workloads. Nachdem Sie einen Trainingsauftrag übermittelt haben, zeigen Sie Detailinformationen zu einer bestimmten Ausführung an, um die zugehörigen Protokolle und Ausgaben anzuzeigen:

  1. Navigieren Sie zur Registerkarte Experimente.
  2. Wählen Sie die runID für eine bestimmte Ausführung aus.
  3. Wählen Sie oben auf der Seite Ausgaben und Protokolle aus.
  4. Wählen Sie Alle herunterladen aus, um alle Ihre Protokolle in einen ZIP-Ordner herunterzuladen.
  5. Sie können auch einzelne Protokolldateien herunterladen, indem Sie zuerst die Protokolldatei und dann Herunterladen auswählen.

Screenshot des Abschnitts „Ausgaben und Protokolle“ einer Ausführung.

user_logs-Ordner

Dieser Ordner enthält Informationen zu den vom Benutzer bzw. der Benutzerin generierten Protokollen. Dieser Ordner ist standardmäßig geöffnet, und das std_log.txt-Protokoll ist ausgewählt. In std_log.txt werden die Protokolle Ihres Codes (z. B. Druckanweisungen) angezeigt. Diese Datei enthält das Protokoll stdout und die Protokolle stderr aus Ihrem Steuerungs- und Trainingsskript pro Prozess. In den meisten Fällen überwachen Sie hier die Protokolle.

system_logs-Ordner

Dieser Ordner enthält die von Azure Machine Learning generierten Protokolle und wird standardmäßig geschlossen. Die vom System generierten Protokolle sind in verschiedenen Ordnern gruppiert, je nachdem, in welcher Phase sich der Auftrag während der Laufzeit befindet.

Andere Ordner

Für Aufträge zum Trainieren auf mehreren Computeclustern sind für jede Knoten-IP-Adresse Protokolle vorhanden. Die Struktur ist bei den einzelnen Knoten identisch mit der bei Aufträgen mit einzelnen Knoten. Es gibt einen weiteren Protokolleordner für die Protokolle zur allgemeinen Ausführung und für stderr und stdout.

Azure Machine Learning protokolliert während des Trainings auch Informationen aus verschiedenen Quellen, wie z. B. aus AutoML oder dem Docker-Container, in dem der Trainingsauftrag ausgeführt wird. Viele dieser Protokolle sind nicht dokumentiert. Wenn Sie Probleme haben und sich an den Microsoft-Support wenden, können diese Protokolle möglicherweise bei der Problembehandlung verwendet werden.

Interaktive Protokollierungssitzung

Interaktive Protokollierungssitzungen werden in der Regel in Notebook-Umgebungen verwendet. Die Methode Experiment.start_logging() startet eine interaktive Protokollierungssitzung. Alle Metriken, die während der Sitzung protokolliert werden, werden der Ausführungsaufzeichnung im Experiment hinzugefügt. Die Methode run.complete() beendet die Sitzungen und markiert die Ausführung als abgeschlossen.

ScriptRun-Protokolle

In diesem Abschnitt erfahren Sie, wie Sie Protokollierungscode innerhalb von Ausführungen hinzufügen, die beim Konfigurieren mit ScriptRunConfig erstellt werden. Sie können die Klasse ScriptRunConfig verwenden, um Skripts und Umgebungen für wiederholbare Ausführungen zu kapseln. Sie können diese Option auch verwenden, um ein visuelles Jupyter Notebooks-Widget zur Überwachung anzuzeigen.

Dieses Beispiel führt einen Parameter-Sweep über Alphawerte durch und erfasst die Ergebnisse mit der Methode run.log().

  1. Erstellen Sie ein Trainingsskript, das die Protokollierungslogik (train.py) enthält.

    # Copyright (c) Microsoft. All rights reserved.
    # Licensed under the MIT license.
    
    from sklearn.datasets import load_diabetes
    from sklearn.linear_model import Ridge
    from sklearn.metrics import mean_squared_error
    from sklearn.model_selection import train_test_split
    from azureml.core.run import Run
    import os
    import numpy as np
    import mylib
    # sklearn.externals.joblib is removed in 0.23
    try:
        from sklearn.externals import joblib
    except ImportError:
        import joblib
    
    os.makedirs('./outputs', exist_ok=True)
    
    X, y = load_diabetes(return_X_y=True)
    
    run = Run.get_context()
    
    X_train, X_test, y_train, y_test = train_test_split(X, y,
                                                        test_size=0.2,
                                                        random_state=0)
    data = {"train": {"X": X_train, "y": y_train},
            "test": {"X": X_test, "y": y_test}}
    
    # list of numbers from 0.0 to 1.0 with a 0.05 interval
    alphas = mylib.get_alphas()
    
    for alpha in alphas:
        # Use Ridge algorithm to create a regression model
        reg = Ridge(alpha=alpha)
        reg.fit(data["train"]["X"], data["train"]["y"])
    
        preds = reg.predict(data["test"]["X"])
        mse = mean_squared_error(preds, data["test"]["y"])
        run.log('alpha', alpha)
        run.log('mse', mse)
    
        model_file_name = 'ridge_{0:.2f}.pkl'.format(alpha)
        # save model in the outputs folder so it automatically get uploaded
        with open(model_file_name, "wb") as file:
            joblib.dump(value=reg, filename=os.path.join('./outputs/',
                                                         model_file_name))
    
        print('alpha is {0:.2f}, and mse is {1:0.2f}'.format(alpha, mse))
    
  2. Übermitteln Sie das train.py-Skript, um in einer vom Benutzer verwalteten Umgebung ausgeführt zu werden. Der gesamte Skriptordner wird zum Training übermittelt.

    from azureml.core import ScriptRunConfig
    
    src = ScriptRunConfig(source_directory='./scripts', script='train.py', environment=user_managed_env)
    run = exp.submit(src)

    Der Parameter show_output aktiviert die ausführliche Protokollierung, mit der Sie Details aus dem Trainingsprozess sowie Informationen zu allen entfernten Ressourcen oder Computezielen anzeigen können. Verwenden Sie den folgenden Code, um die ausführliche Protokollierung zu aktivieren, wenn Sie das Experiment übermitteln.

    run = exp.submit(src, show_output=True)
    

    Sie können denselben Parameter auch in der wait_for_completion-Funktion der resultierende Ausführung verwenden.

    run.wait_for_completion(show_output=True)
    

Native Python-Protokollierung

Einige Protokolle im SDK können einen Fehler enthalten, der Sie anweist, den Protokolliergrad auf DEBUG festzulegen. Um den Protokolliergrad festzulegen, fügen Sie Ihrem Skript den folgenden Code hinzu.

import logging
logging.basicConfig(level=logging.DEBUG)

Weitere Protokollierungsquellen

Azure Machine Learning kann während des Trainings auch Informationen aus anderen Quellen protokollieren, etwa aus automatisierten Machine Learning-Ausführungen oder aus Docker-Containern, in denen der Auftrag ausgeführt wird. Diese Protokolle sind nicht dokumentiert, aber wenn Probleme auftreten und Sie sich an den Microsoft-Support wenden, können diese Protokolle möglicherweise bei der Problembehandlung verwendet werden.

Informationen zur Protokollierung von Metriken im Azure Machine Learning-Designer finden Sie unter Protokollieren von Metriken im Designer

Beispielnotebooks

Die folgenden Notebooks verdeutlichen die Konzepte in diesem Artikel:

Informationen zum Ausführen von Notebooks finden Sie im Artikel Verwenden von Jupyter-Notebooks zum Erkunden des Azure Machine Learning-Diensts.

Nächste Schritte

Lesen Sie diese Artikel, um mehr über die Verwendung von Azure Machine Learning zu erfahren: