Verwalten von MLflow-Modellen über Arbeitsbereiche und Plattformen hinweg

Maschinelles Lernen in der Produktion erfordert mehr, als nur ein gutes Modell zu trainieren. Sie benötigen zuverlässige Workflows, um Modelle von der Entwicklung bis hin zur Validierung in die Produktion zu verschieben. Die Arbeitsbereichsübergreifende Protokollierung in Microsoft Fabric ermöglicht zwei wichtige Szenarien:

  • Erstellen Sie End-to-End-MLOps-Workflows. Trainieren und Experimentieren in einem Entwicklungsarbeitsbereich, Überprüfen in einem Testarbeitsbereich und Bereitstellen in einem Produktionsarbeitsbereich mithilfe standardmäßiger MLflow-APIs. Diese Trennung von Umgebungen hilft Teams dabei, Qualitätssperren durchzusetzen und klare Audit-Trails von Experimenten bis zur Produktion aufrechtzuerhalten.

  • Bringen Sie vorhandene Machine Learning-Ressourcen in Fabric integrieren. Wenn Sie bereits Modelle in Azure Databricks, Azure Machine Learning, einer lokalen Umgebung oder einer anderen Plattform trainiert haben, die MLflow unterstützt, können Sie diese Experimente und Modelle direkt in einem Fabric Arbeitsbereich protokollieren. Sie können Ihre Machine Learning-Artefakte ganz einfach an einem Ort konsolidieren, ohne Ihre Schulungspipelinen neu zu erstellen.

Die arbeitsbereichübergreifende Protokollierung funktioniert über das synapseml-mlflow-Paket, das ein Fabric kompatibles MLflow-Tracking-Plug-In bereitstellt. Sie authentifizieren sich mit Ihrem Zielarbeitsbereich, legen den Nachverfolgungs-URI fest und verwenden standardmäßige MLflow-Befehle.

Hinweis

Die Arbeitsbereichsübergreifende Protokollierung konzentriert sich auf die Code-first-Erfahrung. Die Benutzeroberflächenintegration für Arbeitsbereichsübergreifende Szenarien wird in einer zukünftigen Version behandelt.

Voraussetzungen

Erstellen Sie für Fabric Notizbuchszenarien ein neues Notizbuch, und fügen Sie ein Seehaus an, bevor Sie Code ausführen.

Tipp

Die Arbeitsbereichsübergreifende Protokollierung wird in Arbeitsbereichen mit aktivierter Schutz vor ausgehenden Zugriffen unterstützt. Für die Arbeitsbereichsübergreifende Protokollierung in einem anderen Arbeitsbereich ist ein verwalteter privater Endpunkt erforderlich. Die Protokollierung funktioniert von außerhalb von Fabric und innerhalb desselben Arbeitsbereichs ohne zusätzliche Konfiguration.

Installieren des MLflow-Plug-Ins

Das synapseml-mlflow-Paket ermöglicht die arbeitsbereichübergreifende Protokollierung, indem das Fabric MLflow-Tracking-Plug-In bereitgestellt wird. Wählen Sie den Installationsbefehl basierend auf Ihrer Umgebung aus.

Von Bedeutung

MLflow 3 wird derzeit nicht unterstützt. Sie müssen mlflow-skinny auf Version 2.22.2 oder früher festlegen.

Verwenden Sie für ein Fabric-Notizbuch diesen Befehl, um das Paket mit Onlinenotizbuchabhängigkeiten zu installieren:

%pip install -U "synapseml-mlflow[online-notebook]" "mlflow-skinny<=2.22.2"

Starten Sie nach der Installation den Kernel neu, bevor Sie den verbleibenden Code ausführen.

Protokollieren von MLflow-Objekten in einen anderen Fabric-Arbeitsbereich

In diesem Szenario führen Sie ein Notizbuch in einem Fabric Arbeitsbereich (Quelle) aus und protokollieren Experimente und Modelle in einem anderen Fabric Arbeitsbereich (Ziel).

Festlegen des Zielarbeitsbereichs

Zeigen Sie auf Ihren Zielarbeitsbereich, indem Sie die Umgebungsvariable MLFLOW_TRACKING_URI festlegen:

import os

target_workspace_id = "<your-target-workspace-id>"
target_uri = f"sds://api.fabric.microsoft.com/v1/workspaces/{target_workspace_id}/mlflow"
os.environ["MLFLOW_TRACKING_URI"] = target_uri

Protokollieren von Experimenten und Modellen

Erstellen Sie ein Experiment, und protokollieren Sie eine Ausführung mit Parametern, Metriken und einem Modell:

import mlflow
import mlflow.sklearn
import numpy as np
from sklearn.linear_model import LogisticRegression
from mlflow.models.signature import infer_signature

# Create or set the experiment in the target workspace
EXP_NAME = "my-cross-workspace-experiment"
MODEL_NAME = "my-cross-workspace-model"
mlflow.set_experiment(EXP_NAME)

with mlflow.start_run() as run:
    lr = LogisticRegression()
    X = np.array([-2, -1, 0, 1, 2, 1]).reshape(-1, 1)
    y = np.array([0, 0, 1, 1, 1, 0])
    lr.fit(X, y)

    score = lr.score(X, y)
    signature = infer_signature(X, y)

    mlflow.log_params({
        "objective": "classification",
        "learning_rate": 0.05,
    })
    mlflow.log_metric("score", score)

    mlflow.sklearn.log_model(lr, "model", signature=signature)

    mlflow.register_model(
        f"runs:/{run.info.run_id}/model",
        MODEL_NAME
    )

Nach Abschluss der Ausführung werden das Experiment und das registrierte Modell im Zielarbeitsbereich angezeigt.

Verschieben von MLflow-Objekten zwischen Fabric Arbeitsbereichen

In diesem Szenario protokollieren Sie zunächst Objekte im Quellarbeitsbereich, laden dann die Artefakte herunter und protokollieren sie erneut im Zielarbeitsbereich. Diese Methode ist nützlich, wenn Sie ein trainiertes Modell von einem Entwicklungsarbeitsbereich zu einem Produktionsarbeitsbereich heraufstufen müssen.

Schritt 1: Protokollieren von Objekten im Quellarbeitsbereich

import mlflow
import mlflow.sklearn
import numpy as np
from sklearn.linear_model import LogisticRegression
from mlflow.models.signature import infer_signature

# Log to the current (source) workspace
EXP_NAME = "source-experiment"
mlflow.set_experiment(EXP_NAME)

with mlflow.start_run() as run:
    lr = LogisticRegression()
    X = np.array([-2, -1, 0, 1, 2, 1]).reshape(-1, 1)
    y = np.array([0, 0, 1, 1, 1, 0])
    lr.fit(X, y)

    signature = infer_signature(X, y)
    mlflow.sklearn.log_model(lr, "model", signature=signature)

    source_run_id = run.info.run_id

Schritt 2: Herunterladen von Artefakten aus der Quellausführung

import mlflow.artifacts

# Download the model artifacts locally
local_artifact_path = mlflow.artifacts.download_artifacts(
    run_id=source_run_id,
    artifact_path="model"
)

Schritt 3: Artefakten erneut im Zielarbeitsbereich protokollieren

import os

target_workspace_id = "<your-target-workspace-id>"
target_uri = f"sds://api.fabric.microsoft.com/v1/workspaces/{target_workspace_id}/mlflow"
os.environ["MLFLOW_TRACKING_URI"] = target_uri

TARGET_EXP_NAME = "promoted-experiment"
TARGET_MODEL_NAME = "promoted-model"
mlflow.set_experiment(TARGET_EXP_NAME)

with mlflow.start_run() as run:
    mlflow.log_artifacts(local_artifact_path, "model")
    mlflow.register_model(
        f"runs:/{run.info.run_id}/model",
        TARGET_MODEL_NAME
    )

Protokollieren von MLflow-Objekten außerhalb von Fabric

Sie können MLflow-Experimente und -Modelle in einem Fabric Arbeitsbereich aus jeder Umgebung protokollieren, in der Sie Ihre Modelle erstellen, einschließlich:

  • Lokale Computer. VS Code, Jupyter-Notizbücher oder lokale Python Umgebung.
  • Azure Databricks. Azure Databricks Notizbücher und Aufträge.
  • Azure Machine Learning. Azure Machine Learning Compute-Instanzen und Pipelines.
  • Jede andere Plattform. Jede Umgebung, die Python und MLflow unterstützt.

Schritt 1: Installieren des Pakets

Installieren Sie das synapseml-mlflow Paket in Ihrer Umgebung:

pip install -U "synapseml-mlflow" "mlflow-skinny<=2.22.2"

Schritt 2: Authentifizieren mit Fabric

Wählen Sie eine Authentifizierungsmethode basierend auf Ihrer Umgebung aus:

Verwenden Sie diese Methode für lokale Entwicklungsumgebungen mit Browserzugriff, z. B. VS Code oder Jupyter.

from fabric.analytics.environment.credentials import SetFabricAnalyticsDefaultTokenCredentialsGlobally
from azure.identity import DefaultAzureCredential

SetFabricAnalyticsDefaultTokenCredentialsGlobally(
    credential=DefaultAzureCredential(exclude_interactive_browser_credential=False)
)

Schritt 3: Festlegen des Zielarbeitsbereichs und protokollieren von MLflow-Objekten

Legen Sie nach der Authentifizierung den Nachverfolgungs-URI so fest, dass er auf Ihr Ziel Fabric Arbeitsbereich zeigt, und protokollieren Sie Experimente und Modelle mithilfe standardmäßiger MLflow-APIs:

import os
import mlflow
import mlflow.sklearn
import numpy as np
from sklearn.linear_model import LogisticRegression
from mlflow.models.signature import infer_signature

target_workspace_id = "<your-target-workspace-id>"
target_uri = f"sds://api.fabric.microsoft.com/v1/workspaces/{target_workspace_id}/mlflow"
os.environ["MLFLOW_TRACKING_URI"] = target_uri

EXP_NAME = "external-experiment"
MODEL_NAME = "external-model"
mlflow.set_experiment(EXP_NAME)

with mlflow.start_run() as run:
    lr = LogisticRegression()
    X = np.array([-2, -1, 0, 1, 2, 1]).reshape(-1, 1)
    y = np.array([0, 0, 1, 1, 1, 0])
    lr.fit(X, y)

    signature = infer_signature(X, y)
    mlflow.log_metric("score", lr.score(X, y))
    mlflow.sklearn.log_model(lr, "model", signature=signature)

    mlflow.register_model(
        f"runs:/{run.info.run_id}/model",
        MODEL_NAME
    )

Verwendung von arbeitsbereichsübergreifender Protokollierung mit Schutz für ausgehenden Zugriff

Wenn ihr Arbeitsbereich den Schutz für ausgehenden Zugriff aktiviert hat, erfordert die arbeitsbereichübergreifende Protokollierung einen arbeitsbereichübergreifenden verwalteten privaten Endpunkt vom Quellarbeitsbereich bis zum Zielarbeitsbereich.

Die Protokollierung innerhalb desselben Arbeitsbereichs und die Protokollierung von außerhalb Fabric (lokale Computer, Azure Databricks, Azure Machine Learning) funktioniert ohne zusätzliche Konfiguration.

Ausführliche Informationen zu unterstützten Szenarien und der erforderlichen Konfiguration finden Sie unter Workspace-Schutz für ausgehenden Zugriff für Fabric Data Science.

Installieren des Pakets in einem OAP-aktivierten Arbeitsbereich

Der Standardbefehl %pip install erfordert ausgehenden Internetzugriff, der in Arbeitsbereichen mit aktivierter OAP (Outbound Access Protection) blockiert wird. Um das synapseml-mlflow Paket zu installieren, laden Sie es zuerst aus einer Nicht-OAP-Umgebung herunter, und laden Sie es dann in das Lakehouse hoch.

  1. Laden Sie das synapseml-mlflow Paket von einem Computer mit Internetzugang herunter.

    pip download synapseml-mlflow[online-notebook]
    
  2. Laden Sie die heruntergeladenen Dateien in das Lakehouse innerhalb Ihres OAP-aktivierten Arbeitsbereichs hoch. Laden Sie alle .whl Dateien in den Abschnitt "Dateien" des Lakehouses hoch (z. B. /lakehouse/default/Files).

  3. Installieren Sie über den Lakehouse-Pfad in Ihrem Fabric-Notizbuch.

    %pip install --no-index --find-links=/lakehouse/default/Files "synapseml-mlflow[online-notebook]>2.0.0" "mlflow-skinny<=2.22.2" --pre
    
  4. Legen Sie den Nachverfolgungs-URI fest, um den verwalteten privaten Endpunkt zu verwenden. Wenn Ihr aktueller Arbeitsbereich OAP aktiviert ist, müssen Sie einen arbeitsbereichübergreifenden verwalteten privaten Endpunkt aus dem Quellarbeitsbereich in den Zielarbeitsbereich konfigurieren. Leiten Sie dann den Nachverfolgungs-URI über den privaten Endpunkt weiter.

    import os
    from fabric.analytics.environment.context import FabricContext, InternalContext
    
    context = FabricContext(workspace_id=target_workspace_id, internal_context=InternalContext(is_wspl_enabled=True))
    print(context.pbi_shared_host)
    # You need to set up and use this private endpoint if your current workspace has OAP enabled
    
    os.environ["MLFLOW_TRACKING_URI"] = f"sds://{context.pbi_shared_host}/v1/workspaces/{target_workspace_id}/mlflow"
    

Bekannte Einschränkungen

  • Schreibberechtigung ist erforderlich. Sie müssen über Schreibberechtigungen für den Zielarbeitsbereich verfügen.
  • Arbeitsbereichübergreifende Linien werden nicht unterstützt. Sie können keine Beziehungen zwischen Notizbüchern, Experimenten und Modellen anzeigen, wenn diese Objekte aus verschiedenen Arbeitsbereichen protokolliert werden.
  • Das Quellnotizbuch ist in der Zielarbeitsumgebung nicht sichtbar. Das Quellnotizbuch wird nicht im Zielarbeitsbereich angezeigt. Auf den Detail- und Listenseiten der Artefakte ist der Link zum Quellnotizbuch leer.
  • Eintragsschnappschüsse werden nicht unterstützt. Machine Learning-Experimente oder Modelle, die an einem anderen Arbeitsbereich protokolliert werden, werden nicht in der Momentaufnahme des Quellausführungsnotizbuchelements angezeigt.
  • Große Sprachmodelle werden nicht unterstützt. Die Arbeitsbereichsübergreifende Protokollierung unterstützt keine großen Sprachmodelle (LLMs).