Teilen über


Nachverfolgen der Modellentwicklung mithilfe von MLflow

Mit der MLflow-Nachverfolgung können Sie Notizbücher und Schulungsdatensätze, Parameter, Metriken, Tags und Artefakte im Zusammenhang mit der Schulung eines maschinellen Lernens oder Deep Learning-Modells protokollieren. Ein Beispielnotizbuch für die ersten Schritte mit MLflow finden Sie im Lernprogramm: End-to-End-klassische ML-Modelle auf Azure Databricks.

MLflow-Tracking mit Experimenten, Läufen und Modellen

Der Modellentwicklungsprozess ist iterativ, und es kann schwierig sein, Ihre Arbeit beim Entwickeln und Optimieren eines Modells nachzuverfolgen. In Azure Databricks können Sie die MLflow-Nachverfolgung verwenden, um den Modellentwicklungsprozess nachzuverfolgen, einschließlich Parametereinstellungen oder Kombinationen, die Sie ausprobiert haben und wie sie die Leistung des Modells beeinflusst haben.

Die MLflow-Tracking verwendet Experimente, Läufe und Modelle , um Ihre ML- und Deep Learning-Modellentwicklung zu protokollieren und zu verfolgen. Bei einer Ausführung handelt es sich um eine einzelne Ausführung von Modellcode. Während einer MLflow-Ausführung können Sie Modellparameter und Ergebnisse protokollieren. Ein Experiment ist eine Sammlung verwandter Läufe. In einem Experiment können Sie die Ausführung vergleichen und filtern, um zu verstehen, wie Ihr Modell ausgeführt wird und wie ihre Leistung von den Parametereinstellungen, Eingabedaten usw. abhängt. Ein Modell ist eine Sammlung von Artefakten, die ein trainiertes Machine Learning-Modell darstellen.

Mit MLflow 3 erhöht sich das Konzept eines Modells, LoggedModels das von einer Ausführung produziert wird, und legt es als eine unterschiedliche Entität fest, um den Modelllebenszyklus in verschiedenen Schulungs- und Evaluierungsläufen nachzuverfolgen.

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.

MLflow-Nachverfolgungs-API

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.

MLflow ist auf Databricks Runtime ML-Clustern vorinstalliert. 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. Um MLflow 3 und seine neuesten Tracking-Funktionen zu verwenden, stellen Sie sicher, dass Sie ein Upgrade auf die neueste Version durchführen (siehe Installieren von MLflow 3).

Wo MLflow-Läufe protokolliert werden

Databricks stellt einen gehosteten MLflow-Tracking-Server bereit, der Ihre Experimentdaten in Ihrem Arbeitsbereich speichert, ohne dass eine Einrichtung erforderlich ist. Sie können MLflow auch so konfigurieren, dass bei Bedarf unterschiedliche Tracking-Server verwendet werden.

Die MLflow-Nachverfolgung wird durch zwei Einstellungen gesteuert:

  • Nachverfolgungs-URI: Bestimmt, welcher Server verwendet werden soll (Standardeinstellung für den aktuellen Databricks-Arbeitsbereich)
  • Experiment: Bestimmt, welches Experiment in diesem Server protokolliert werden soll
import mlflow

# By default MLflow logs to the Databricks-hosted workspace tracking server. You can connect to a different server using the tracking URI.
mlflow.set_tracking_uri("databricks://remote-workspace-url")

# Set experiment in the tracking server
mlflow.set_experiment("/Shared/my-experiment")

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

Weitere Informationen zum Steuern, wo Ihre MLflow-Daten gespeichert werden, finden Sie unter Auswählen, wo Ihre MLflow-Daten gespeichert sind.

Ausführungen und Modelle zu einem Test protokollieren

MLflow kann automatisch Schulungscode protokollieren, der in vielen Machine Learning- und Deep Learning-Frameworks geschrieben wurde. Dies ist die einfachste Möglichkeit, mit der MLflow-Nachverfolgung zu beginnen. Sehen Sie sich das Beispielnotizbuch an.

Um mehr Kontrolle darüber zu erhalten, welche Parameter und Metriken protokolliert werden, oder um zusätzliche Artefakte wie CSV-Dateien oder Plots zu protokollieren, verwenden Sie die MLflow-Protokollierungs-API. Sehen Sie sich das Beispielnotizbuch an.

Verwenden Sie Autologging zum Nachverfolgen der Modellentwicklung

In diesem Beispielnotizbuch wird gezeigt, wie Sie die autologging mit scikit-learn verwenden. Informationen zum Autologging mit anderen Python-Bibliotheken finden Sie in der MLflow-Autologging-Dokumentation.

MLflow 3

MLflow autologisierendes Python-Notebook für MLflow 3

Notebook abrufen

MLflow 2.x

Automatische MLflow-Protokollierung: Python-Notebook

Notebook abrufen

Verwenden der Protokollierungs-API zum Nachverfolgen der Modellentwicklung

Dieses Beispielnotizbuch zeigt, wie die Python-Protokollierungs-API verwendet wird. MLflow verfügt auch über REST-, R- und Java-APIs.

MLflow 3

MLflow-Protokollierungs-API Python-Notizbuch für MLflow 3

Notebook abrufen

MLflow 2.x

MLflow-Protokollierungs-API: Python-Notebook

Notebook abrufen

Protokollieren von Ausführungen in einem Arbeitsbereichsexperiment

Wenn Sie ein Modell in einem Databricks-Notizbuch trainieren, werden die Ausführungen standardmäßig in das Notizbuchexperiment protokolliert. 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. Um Läufe zu einem Experiment im Arbeitsbereich zu protokollieren, verwenden Sie einen Code, der einem der folgenden Beispiele aus Ihrem Notizbuch oder API-Aufruf ähnelt:

experiment_name = "/Shared/name_of_experiment/"
mlflow.set_experiment(experiment_name)

Anweisungen zum Erstellen eines Arbeitsbereichsexperiments finden Sie unter Erstellen des Arbeitsbereichsexperiments. Informationen zum Anzeigen protokollierter Ausführungen finden Sie unter Anzeigen von Notebookexperimenten und Anzeigen von Arbeitsbereichsexperimenten.

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 Seeding-Mechanismus an, um die Startbedingungen für diese stochastischen Komponenten festzulegen. 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. Diese Variation ist im Modellentwicklungsprozess nicht signifikant und 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 Notizbücher veranschaulichen das Nachverfolgen der Modellentwicklung mithilfe von MLflow.