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:
- Navigieren Sie zur Registerkarte Experimente.
- Wählen Sie die runID für eine bestimmte Ausführung aus.
- Wählen Sie oben auf der Seite Ausgaben und Protokolle aus.
- Wählen Sie Alle herunterladen aus, um alle Ihre Protokolle in einen ZIP-Ordner herunterzuladen.
- Sie können auch einzelne Protokolldateien herunterladen, indem Sie zuerst die Protokolldatei und dann Herunterladen auswählen.
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().
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))
Ü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:
- how-to-use-azureml/training/train-on-local
- how-to-use-azureml/track-and-monitor-experiments/logging-api
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:
- Ein Beispiel für die Registrierung des besten Modells und dessen Bereitstellung finden Sie im Tutorial Trainieren eines Bildklassifizierungsmodells mit Azure Machine Learning.