Nachverfolgen von Machine Learning- und Deep Learning-Trainingsausführungen

Mit der MLflow-Nachverfolgungskomponente können Sie Quelleneigenschaften, Parameter, Metriken, Tags und Artefakte in Zusammenhang mit dem Trainieren eines Machine Learning- oder Deep Learning-Modells protokollieren. Probieren Sie eines der MLflow-Schnellstarttutorials aus, um mit MLflow zu beginnen.

MLflow-Nachverfolgung mit Experimenten und Ausführungen

Die MLflow-Nachverfolgung basiert auf zwei Konzepten: Experimente und Ausführungen:

Hinweis

Ab dem 27. März 2024 legt MLflow eine Kontingentgrenze für die Anzahl der Gesamtparameter, Tags und Metrikschritte für alle vorhandenen und neuen Durchläufe sowie die Anzahl der Gesamtdurchläufe für alle vorhandenen und neuen Experimente fest. Weitere Informationen finden Sie unter Ressourcengrenzwerte. Wenn Sie das Kontingent für die Ausführung pro Experiment erreicht haben, empfiehlt Databricks, Ihre Ausführungen zu löschen, die Sie nicht mehr benötigen. Verwenden Sie dazu die API zum Löschen von Ausführungen in Python. Wenn Sie andere Kontingentgrenzwerte erreichen, empfiehlt Databricks, Ihre Protokollierungsstrategie so anzupassen, dass sie unter dem Grenzwert bleibt. Wenn Sie eine Erhöhung dieses Grenzwerts benötigen, wenden Sie sich mit einer kurzen Erläuterung Ihres Anwendungsfalls an Ihr Databricks-Kontoteam. Erklären Sie, warum die vorgeschlagenen Gegenmaßnahmen nicht funktionieren, und den neuen Grenzwert, den Sie anfordern.

  • Ein MLflow-Experiment ist die primäre Einheit für die Organisation und Zugriffssteuerung von MLflow-Trainingsausführungen für Machine Learning-Modelle. Alle MLflow-Ausführungen gehören zu einem Experiment. Mit Experimenten können Sie Ausführungen visualisieren, nach Ausführungen suchen und sie vergleichen sowie Ausführungsartefakte und Metadaten für die Analyse in anderen Tools herunterladen.

  • Eine MLflow-Ausführung entspricht einer einzelnen Ausführung des Modellcodes.

  • Organisieren von Trainingsausführungen mit MLflow-Experimenten

  • Verwalten von Trainingscode mit MLflow-Ausführungen

Die MLflow-Nachverfolgungs-API protokolliert Parameter, Metriken, Tags und Artefakte aus einer Modellausführung. Die Nachverfolgungs-API kommuniziert mit einem MLflow-Nachverfolgungsserver. Wenn Sie Databricks verwenden, protokolliert ein in Databricks gehosteter Nachverfolgungsserver die Daten. Der gehostete MLflow-Nachverfolgungsserver verfügt über Python-, Java- und R-APIs.

Hinweis

MLflow wird in Databricks Runtime ML-Clustern installiert. Um MLflow in einem Databricks Runtime-Cluster verwenden zu können, müssen Sie die mlflow-Bibliothek installieren. Anweisungen zum Installieren einer Bibliothek in einem Cluster finden Sie unter Installieren einer Bibliothek in einem Cluster. Folgende spezielle Pakete müssen für MLflow installiert werden:

  • Wählen Sie für Python die Bibliotheksquelle PyPI aus, und geben Sie mlflow in das Feld Paket ein.
  • Wählen Sie für R die Bibliotheksquelle CRAN aus, und geben Sie mlflow in das Feld Paket ein.
  • Installieren Sie für Scala diese beiden Pakete:
    • Wählen die Bibliotheksquelle Maven aus, und geben Sie org.mlflow:mlflow-client:1.11.0 in das Feld Koordinaten ein.
    • Wählen Sie die Bibliotheksquelle PyPI aus, und geben Sie mlflow in das Feld Paket ein.

Wo werden MLflow-Ausführungen protokolliert?

Alle MLflow-Ausführungen werden im aktiven Experiment protokolliert, das auf eine der folgenden Arten festgelegt werden kann:

Wenn kein aktives Experiment festgelegt ist, werden die Ausführungen im Notebookexperiment protokolliert.

Um Ihre Experimentergebnisse auf einem remote gehosteten MLflow-Tracking-Server in einem anderen Arbeitsbereich als dem, in dem Sie Ihr Experiment ausführen, zu protokollieren, legen Sie den Tracking-URI so fest, dass er mit mlflow.set_tracking_uri() auf den Remote-Arbeitsbereich verweist, und legen Sie den Pfad zu Ihrem Experiment im Remote-Arbeitsbereich mit mlflow.set_experiment() fest.

mlflow.set_tracking_uri(<uri-of-remote-workspace>)
mlflow.set_experiment("path to experiment in remote workspace")

Wenn Sie Experimente lokal ausführen und Experimentergebnisse auf dem Databricks MLflow-Nachverfolgungsserver protokollieren möchten, geben Sie Ihre Databricks-Arbeitsbereichsinstanz (DATABRICKS_HOST) und das persönliche Databricks-Zugriffstoken (DATABRICKS_TOKEN) an. Als Nächstes können Sie den Nachverfolgungs-URI so festlegen, dass er mit mlflow.set_tracking_uri() auf den Arbeitsbereich verweist, und den Pfad zu Ihrem Experiment mithilfe von mlflow.set_experiment() festlegen. Ausführliche Informationen zum Ermitteln der Werte für die Umgebungsvariablen DATABRICKS_HOST und DATABRICKS_TOKEN finden Sie unter Authentifizieren mit persönlichen Azure Databricks-Zugriffstoken.

Das folgende Codebeispiel zeigt, wie Sie diese Werte festlegen:


os.environ["DATABRICKS_HOST"] = "https://dbc-1234567890123456.cloud.databricks.com" # set to your server URI
os.environ["DATABRICKS_TOKEN"] = "dapixxxxxxxxxxxxx"

mlflow.set_tracking_uri("databricks")
mlflow.set_experiment("/your-experiment")

Beispielnotebook zur Protokollierung

Dieses Notebook zeigt, wie Sie Ausführungen in einem Notebookexperiment und in einem Arbeitsbereichsexperiment protokollieren. Nur in einem Notebook initiierte MLflow-Ausführungen können im Notebookexperiment protokolliert werden. MLflow-Ausführungen, die über ein beliebiges Notebook oder über die APIs gestartet werden, können in einem Arbeitsbereichsexperiment protokolliert werden. Informationen zum Anzeigen protokollierter Ausführungen finden Sie unter Anzeigen von Notebookexperimenten und Anzeigen von Arbeitsbereichsexperimenten.

Notebook zum Protokollieren von MLflow-Ausführungen

Notebook abrufen

Sie können MLflow Python-, Java- oder Scala- und R-APIs verwenden, um Ausführungen zu starten und Ausführungsdaten aufzeichnen. Ausführliche Informationen finden Sie in den MLflow-Beispielnotebooks.

Zugreifen auf den MLflow-Nachverfolgungsserver von außerhalb von Azure Databricks

Sie können auch von außerhalb von Azure Databricks in den Nachverfolgungsserver schreiben und von diesem lesen, z. B. mithilfe der MLflow-CLI. Siehe Zugreifen auf den MLflow-Nachverfolgungsserver von außerhalb von Azure Databricks.

Programmgesteuertes Analysieren von MLflow-Ausführungen

Sie können programmgesteuert auf MLflow-Ausführungsdaten zugreifen, indem Sie die folgenden beiden Datenrahmen-APIs verwenden:

In diesem Beispiel wird veranschaulicht, wie der MLflow-Python-Client verwendet wird, um ein Dashboard zu erstellen, das Änderungen an Auswertungsmetriken im Laufe der Zeit visualisiert, die Anzahl der von einem bestimmten Benutzer gestarteten Ausführungen nachverfolgt und die Gesamtzahl der Ausführungen für alle Benutzer misst:

Darum können Modelltrainingsmetriken und -ausgaben variieren

Viele der in ML verwendeten Algorithmen weisen ein zufälliges Element auf, z. B. Stichprobe oder zufällige Anfangsbedingungen innerhalb des Algorithmus selbst. Wenn Sie ein Modell mit einem dieser Algorithmen trainieren, sind die Ergebnisse jeder Ausführung möglicherweise nicht identisch, auch wenn Sie die Ausführung mit den gleichen Bedingungen starten. Viele Bibliotheken bieten einen Seedingmechanismus, um die Anfangsbedingungen für diese stochastischen Elemente zu beheben. Es kann jedoch andere Ursachen für Variationen geben, die nicht durch Seeds gesteuert werden. Einige Algorithmen reagieren empfindlich auf die Reihenfolge der Daten, und verteilte ML-Algorithmen können auch davon beeinflusst werden, wie die Daten partitioniert sind. Im Allgemeinen ist diese Variation nicht gravierend und im Modellentwicklungsprozess nicht wichtig.

Verwenden Sie die PySpark-Funktionen repartition und sortWithinPartitions, um Variationen zu steuern, die durch Unterschiede bei der Reihenfolge und Partitionierung verursacht werden.

Beispiele für die MLflow-Nachverfolgung

Die folgenden Notebooks veranschaulichen, wie Sie verschiedene Modelltypen trainieren, die Trainingsdaten in MLflow nachverfolgen und Nachverfolgungsdaten in Delta Lake speichern.